Редактирование: Git

Перейти к: навигация, поиск

Внимание: Вы работаете как анонимный пользователь. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
{{DISPLAYTITLE:git}}
+
[[Category:Devel]]
 
{{Stub}}
 
{{Stub}}
== Руководства ==
+
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/git}}
 +
 
 +
== Всё о GIT, со слов ldv ==
  
* [[Краткое руководство по сборке с gear]]
 
 
* [[Git.alt|Руководство по git.alt]]
 
* [[Git.alt|Руководство по git.alt]]
  
== Всё о GIT, со слов ldv@ ==
+
''Здесь на самом деле не про git per se, а про git применительно к ALT Linux и git.alt; в качестве введения в git см., например, [http://www.kernel.org/pub/software/scm/git/docs/everyday.html Everyday GIT].''
 
 
На самом деле не про git как таковой, а про git применительно к ALT Linux и git.alt; некое подобие QuickStart по git@ALT для присматривающихся участников team — [[git/start|здесь]].
 
 
 
В качестве введения в git смотрите [http://www.ibm.com/developerworks/ru/library/l-git/index.html?S_TACT=105AGX99&S_CMP=GR01 Управление исходным кодом с помощью Git] (на русском языке) и [http://www.kernel.org/pub/software/scm/git/docs/everyday.html Everyday GIT] (на английском языке).
 
  
'''Примечание:''' все примеры команд, указываемых через дефис (например, <tt>git-clone</tt>) на последних версиях Git следует применять без дефиса, заменив его пробелом: <tt>git clone</tt>.
+
''Некое подобие QuickStart по git@ALT для присматривающихся участников team -- [[git/start|здесь]].''
  
NB: эту страницу (а также [[gear]], [[git/start2]], [[gear/geartags]], [[gear/ImportUpstreamVBranch]], [[gear/ImportSeparateUpstream]], [[git/recommit]], [[git/gitnotes]], [[git/SomeDestReposViaBranches]], [[git/MergingBranches]], [[git/BranchInGit]]) надо творчески раскромсать на:
+
<div style="display: inline; color: red;">NB: эту страницу (а также [[gear|gear]], [[gear/kis|gear/kis]], [[gear/geartags|gear/geartags]], [[gear/ImportUpstreamVBranch|gear/ImportUpstreamVBranch]], [[gear/ImportSeparateUpstream|gear/ImportSeparateUpstream]], [[git/recommit|git/recommit]], [[git/gitnotes|git/gitnotes]], [[git/gitincompact|git/gitincompact]], [[git/SomeDestReposViaBranches|git/SomeDestReposViaBranches]], [[git/MergingBranches|git/MergingBranches]], [[git/BranchInGit|git/BranchInGit]]) надо творчески раскромсать на:</div>
 
* Введение в git + ссылки
 
* Введение в git + ссылки
* [[Git.alt|Руководство по git.alt]]
+
* Руководство по git.alt
* [[Руководство по gear]]
+
* Ведение пакетов при помощи gear
* [[Справочник по git.alt]]
+
* Справочник по git.alt
 
* Справочник по gear
 
* Справочник по gear
  
 
__TOC__
 
__TOC__
 +
  
 
=== GEAR ===
 
=== GEAR ===
  
В апреле 2006 года идея хранить исходный код пакетов в git-репозитории была реализована с помощью утилиты, которая 27-го апреля получила имя [[gear|gear]].  Напомню вкратце:
+
В апреле 2007 года идея хранить исходный код пакетов в git-репозитории была реализована с помощью утилиты, которая 27-го апреля получила имя [[gear|gear]].  Напомню вкратце:
  
 
Основной смысл хранения исходного кода пакетов в git-репозитории заключается в более эффективной и удобной совместной разработке, а также минимизации трафика и места на диске для хранения архива репозитория за длительный срок.  Идея <tt>gear</tt> заключается в том, чтобы с помощью одного файла с простыми правилами (для обработки которых достаточно <tt>git</tt>+<tt>sed</tt>) можно было собирать пакеты из произвольно устроенного git-репозитория, по аналогии с [[hasher]], который был задуман как средство собирать пакеты из произвольных srpm-пакетов.
 
Основной смысл хранения исходного кода пакетов в git-репозитории заключается в более эффективной и удобной совместной разработке, а также минимизации трафика и места на диске для хранения архива репозитория за длительный срок.  Идея <tt>gear</tt> заключается в том, чтобы с помощью одного файла с простыми правилами (для обработки которых достаточно <tt>git</tt>+<tt>sed</tt>) можно было собирать пакеты из произвольно устроенного git-репозитория, по аналогии с [[hasher]], который был задуман как средство собирать пакеты из произвольных srpm-пакетов.
Строка 35: Строка 33:
 
=== Структура репозитория ===
 
=== Структура репозитория ===
  
Как уже было сказано, <tt>gear</tt> не накладывает ограничений на внутреннюю организацию git-репозитория (не считая файла с правилами). Тем не менее, у меня есть несколько соображений о том, как более эффективно и удобно организовывать git-репозитории, предназначенные для хранения пакетов:
+
Как уже было сказано, <tt>gear</tt> не накладывает ограничений на внутреннюю организацию git-репозитория (не считая файла с правилами). Тем не менее, у меня есть несколько соображений о том, как более эффективно и удобно организовывать git-репозитории, предназначенные для хранения пакетов:
 +
 
 +
* Одна сущность - один репозиторий.
 +
::Не стоит помещать в один репозиторий несколько разных пакетов, за исключением случаев, когда у этих пакетов есть общий пакет-предок.  Соблюдение этого правила облегчает совместную работу над пакетом, поскольку не перегруженный репозиторий легче клонировать и в целом инструментарий git больше подходит для работы с такими репозиториями.
 +
** '''Отрицательная сторона''': несколько сложнее делать «push» и «pull» в случае, когда репозиториев, которые надо обработать, много.  Впрочем, push/pull в цикле выручает.
  
* Одна сущность — один репозиторий.
 
*: Не стоит помещать в один репозиторий несколько разных пакетов, за исключением случаев, когда у этих пакетов есть общий пакет-предок. Соблюдение этого правила облегчает совместную работу над пакетом, поскольку не перегруженный репозиторий легче клонировать и в целом инструментарий git больше подходит для работы с такими репозиториями.
 
*:: '''Отрицательная сторона''': несколько сложнее делать «push» и «pull» в случае, когда репозиториев, которые надо обработать, много. Впрочем, push/pull в цикле выручает.
 
 
* Несжатый исходный код.
 
* Несжатый исходный код.
*: Сжатый разными архиваторами исходный код (как правило это tarball’ы) лучше хранить в git-репозитории в несжатом виде. Изменение файлов, которые помещены в репозиторий в сжатом виде, менее удобно отслеживать штатными средствами (<tt>git-diff</tt>). Поскольку git хранит объекты в сжатом виде, двойное сжатие редко приводит к экономии дискового пространства. Наконец, алгоритм, применяемый для минимизации трафика при обновлении репозитория по протоколу git, заметно более эффективен на несжатых данных.
+
::Сжатый разными архиваторами исходный код (как правило это tarball'ы) лучше хранить в git-репозитории в несжатом виде. Изменение файлов, которые помещены в репозиторий в сжатом виде, менее удобно отслеживать штатными средствами (<tt>git-diff</tt>). Поскольку git хранит объекты в сжатом виде, двойное сжатие редко приводит к экономии дискового пространства. Наконец, алгоритм, применяемый для минимизации трафика при обновлении репозитория по протоколу git, заметно более эффективен на несжатых данных.
*:: '''Отрицательная сторона''': поскольку некоторые виды сжатия одних и тех же данных могут приводить к разным результатам, может уменьшиться степень первозданности (нативности) исходного кода.
+
** '''Отрицательная сторона''': поскольку некоторые виды сжатия одних и тех же данных могут приводить к разным результатам, может уменьшиться степень первозданности (нативности) исходного кода.
 +
 
 
* Распакованный исходный код.
 
* Распакованный исходный код.
*: Исходный код, запакованный tar/cpio/, лучше хранить в git-репозитории в распакованном виде, по тем же причинам (заметно удобнее отслеживать изменения, существенно меньше трафик при обновлении).
+
::Исходный код, запакованный tar/cpio/..., лучше хранить в git-репозитории в распакованном виде, по тем же причинам (заметно удобнее отслеживать изменения, существенно меньше трафик при обновлении).
*:: '''Отрицательная сторона''': поскольку git из информации о владельце, правах доступа и дате модификации файлов хранит только исполняемость файлов, любой архив, созданный из репозитория, будет по этим параметрам отличаться от первозданного. Помимо потери нативности, изменение прав доступа и даты модификации может теоретически повлиять на результат сборки пакета. Впрочем, такие пакеты, если они будут обнаружены, всё равно надо править.
+
** '''Отрицательная сторона''': поскольку git из информации о владельце, правах доступа и дате модификации файлов хранит только исполняемость файлов, любой архив, созданный из репозитория, будет по этим параметрам отличаться от первозданного. Помимо потери нативности, изменение прав доступа и даты модификации может теоретически повлиять на результат сборки пакета. Впрочем, такие пакеты, если они будут обнаружены, всё равно надо править.
 +
 
 
* Аккуратный changelog.
 
* Аккуратный changelog.
*: В changelog релизного commit’а стоит включать соответствующий текст из changelog’а пакета, как это делают утилиты <tt>gear-commit</tt> (обёртка к <tt>git-commit</tt>, специально предназначенная для этих целей) и <tt>gear-srpmimport</tt>. В результате можно будет получить представление об изменениях в пакете, не заглядывая в spec-файл самого пакета.
+
::В changelog релизного commit'а стоит включать соответствующий текст из changelog'а пакета, как это делают утилиты <tt>gear-commit</tt> (обёртка к <tt>git-commit</tt>, специально предназначенная для этих целей) и <tt>gear-srpmimport</tt>. В результате можно будет получить представление об изменениях в пакете, не заглядывая в spec-файл самого пакета.
  
 
=== Инструкция по эксплуатации git.altlinux.org ===
 
=== Инструкция по эксплуатации git.altlinux.org ===
Строка 55: Строка 56:
 
По всем вопросам, связанным с этой частью инструкции, пишите на join@.
 
По всем вопросам, связанным с этой частью инструкции, пишите на join@.
  
Клонировать к себе на компьютер свой репозиторий с git.altlinux.org (SSH предварительно [[Git.alt/Справочник#SSH-доступ|настроен]]):
+
Клонировать к себе на компьютер свой репозиторий с git.altlinux.org:
  
  $ git clone git.alt:packages/vitmp.git
+
  $ git-clone git.alt:packages/vitmp.git
 
  remote: Generating pack...
 
  remote: Generating pack...
 
  remote: Done counting 12 objects.
 
  remote: Done counting 12 objects.
Строка 65: Строка 66:
  
 
Клонировать к себе на компьютер чужой репозиторий с git.altlinux.org:
 
Клонировать к себе на компьютер чужой репозиторий с git.altlinux.org:
  $ git clone git.alt:/people/ldv/packages/vitmp.git
+
  $ git-clone git.alt:/people/ldv/packages/vitmp.git
  
 
Залить на git.alt свой ранее созданный git-репозиторий:
 
Залить на git.alt свой ранее созданный git-репозиторий:
Строка 77: Строка 78:
 
Далее зафетчим этот бранч к нам с одноименным названием:
 
Далее зафетчим этот бранч к нам с одноименным названием:
  
  $ git fetch git.alt:/people/foo/packages/bar.git bar-bugfree:bar-bugfree
+
  $ git-fetch git.alt:/people/foo/packages/bar.git bar-bugfree:bar-bugfree
  
 
Дальше работаем с ним как хотим ;)
 
Дальше работаем с ним как хотим ;)
Строка 85: Строка 86:
  
 
Копирование файлов из одного бранча в другой:
 
Копирование файлов из одного бранча в другой:
  $ git archive --format=tar --prefix=directory-branchXXX branchXXX:directory | tar xf -
+
  $ git-archive --format=tar --prefix=directory-branchXXX branchXXX:directory | tar xf -
 
и устаревший способ:
 
и устаревший способ:
  $ git tar-tree branchXXX:directory directory-branchXXX | tar xf -
+
  $ git-tar-tree branchXXX:directory directory-branchXXX | tar xf -
  
 
== Ответы на часто забываемые вопросы ==
 
== Ответы на часто забываемые вопросы ==
  
=== «Как найти мейнтейнера?» ===
+
=== «Как найти майнтейнера?» ===
# [http://sisyphus.ru/srpm/spt/gear http://sisyphus.ru/srpm/spt/gear] (с датами и ссылками)
+
1. [http://alt3.linux.kiev.ua/srpm/Sisyphus/spt/git http://alt3.linux.kiev.ua/srpm/Sisyphus/spt/git] (с датами и ссылками)
# [http://git.altlinux.org/people-packages-list http://git.altlinux.org/people-packages-list]
+
2. [http://git.altlinux.org/people-packages-list http://git.altlinux.org/people-packages-list]
# см. ниже:
+
3. см. ниже:
{{Начало цитаты|источник=[http://lists.altlinux.org/pipermail/devel/2007-March/043158.html ldv@]}}
+
<pre>> Слить сорцы из git'а, сделать патч и отправить автору (да, в мире существуют
> Слить сорцы из git'а, сделать патч и отправить автору (да, в мире существуют <br />
+
> другие git-репозитории, помимо git.a.o). Совершенно обычный use-case для того
> другие git-репозитории, помимо git.a.o). Совершенно обычный use-case для того <br />
+
> типа пользователя, кого сейчас в инфраструктуре совершенно игнорируют: casual
> типа пользователя, кого сейчас в инфраструктуре совершенно игнорируют: casual <br />
+
> mantainers, которых почти всё устраивает, но иногда хочется написать патчик и
> mantainers, которых почти всё устраивает, но иногда хочется написать патчик и <br />
 
 
> отправить обратно.
 
> отправить обратно.
 
 
В принципе, даже той информации, которая есть в бинарном пакете сейчас,
 
В принципе, даже той информации, которая есть в бинарном пакете сейчас,
 
уже достаточно для casual mantainers:
 
уже достаточно для casual mantainers:
 
 
1. В установленном бинарном пакете есть %{SOURCERPM} (виден по rpmquery -i),
 
1. В установленном бинарном пакете есть %{SOURCERPM} (виден по rpmquery -i),
 
из которого однозначно вычисляется имя исходного пакета.
 
из которого однозначно вычисляется имя исходного пакета.
 
 
2. Далее, в установленном бинарном пакете есть %{CHANGELOGNAME} (виден по
 
2. Далее, в установленном бинарном пакете есть %{CHANGELOGNAME} (виден по
 
rpmquery --lastchange).
 
rpmquery --lastchange).
 
 
3. По именам мантейнера (MAINT) и исходного пакета (PKG) можно с очень
 
3. По именам мантейнера (MAINT) и исходного пакета (PKG) можно с очень
 
высокой вероятностью предположить, что если пакет был собран из
 
высокой вероятностью предположить, что если пакет был собран из
 
git-репозитория, то этот репозиторий называется
 
git-репозитория, то этот репозиторий называется
<nowiki>http://git.altlinux.org/people/MAINT/packages/?p=PKG.git</nowiki>
+
http://git.altlinux.org/people/MAINT/packages/?p=PKG.git</pre>
{{Конец цитаты}}
+
''[http://lists.altlinux.org/pipermail/devel/2007-March/043158.html ldv@]''
  
 
=== Как вести пакет в git ===
 
=== Как вести пакет в git ===
{{Начало цитаты|источник={{man|damir}}}}
+
==== damir@ ====
Посмотрите на http://git.altlinux.org/people/damir/packages/?p=liblazy.git;a=summary
+
<pre>Посмотрите на http://git.altlinux.org/people/damir/packages/?p=liblazy.git;a=summary
  
 
Там правда апстрим git-овый, но это сути не меняет.
 
Там правда апстрим git-овый, но это сути не меняет.
Строка 133: Строка 129:
 
При переезде на новую версию надо будет всего лишь:
 
При переезде на новую версию надо будет всего лишь:
  
1. Поставить нужный тег на апстримной ветке (например liblazy-0.2). <br />
+
1. Поставить нужный тег на апстримной ветке (например liblazy-0.2).
2. Смержить этот тег в master с -s ours <br />
+
2. Смержить этот тег в master с -s ours
3. Заменить в спеке версию с 0.1 на 0.2. <br />
+
3. Заменить в спеке версию с 0.1 на 0.2.
4. Выполнить gear-update-tag -ac <br />
+
4. Выполнить gear-update-tag -ac
5. Дописать changelog
+
5. Дописать changelog</pre>
{{Конец цитаты}}
 
  
 
=== Как втащить пакет из Сизифа, если его нет на git.alt/people ===
 
=== Как втащить пакет из Сизифа, если его нет на git.alt/people ===
Пакет, который давно не собирался или заброшен, или его мейнтейнер не пользуется git.alt, можно найти в [http://git.altlinux.org/archive/ архиве Сизифа]. Архив Сизифа содержит последние версии когда-либо собиравшихся в Сизиф пакетов (с историей) и доступен по <tt>ssh git.alt</tt> в каталоге <tt>/archive</tt>. Для удобства хранилища собраны в двухуровневое дерево (по первой букве), без различия мейнтейнеров.
+
Пакет, который давно не собирался или заброшен, или его майнтейнер не пользуется git.alt, можно найти в [http://git.altlinux.org/archive/ архиве Сизифа]. Архив Сизифа содержит последние версии когда-либо собиравшихся в Сизиф пакетов (с историей) и доступен по <tt>ssh git.alt</tt> в каталоге <tt>/archive</tt>. Для удобства хранилища собраны в двухуровневое дерево (по первой букве), без различия майнтейнеров.
  
 
Таким образом ''на сегодня'' <tt>git-clone git.alt:/archive/m/mkimage</tt> отдаст хранилище, соответствующее текущему пакету <tt>mkimage</tt> в Сизифе, кто бы его ни собрал на этот раз.
 
Таким образом ''на сегодня'' <tt>git-clone git.alt:/archive/m/mkimage</tt> отдаст хранилище, соответствующее текущему пакету <tt>mkimage</tt> в Сизифе, кто бы его ни собрал на этот раз.
Строка 186: Строка 181:
  
 
Втягивание чужих изменений производится стандартными git-средствами: добавлением remote
 
Втягивание чужих изменений производится стандартными git-средствами: добавлением remote
  $ git remote add someuser ssh://git.alt/people/someuser/packages/bugzilla.git
+
  $ git remote add someuser ssh://git.alt/people/someuser/bugzilla.git
 
засасыванием изменений:
 
засасыванием изменений:
 
  $ git fetch someuser master
 
  $ git fetch someuser master
Строка 194: Строка 189:
 
  $ git push
 
  $ git push
  
== Удаление удалённых веток в git ==
 
  
Если вы хотите удалить ветку из репозитория, располагающегося не на вашей машине — сделайте в него <tt>push</tt> из «никакой» ветки:
 
 
git push origin :no-longer-needed-branch
 
 
или если хотите удалить тег:
 
 
git push origin :no-longer-needed-tag
 
 
Полная форма <tt>push</tt> выглядит так:
 
git push <remote repository> [<local branch>:]<remote branch>
 
 
где <tt><local branch></tt> — имя локальной ветки, из которой берутся данные, а <tt><remote branch></tt> — имя ветки в удалённом репозитории, куда происходит их передача с замещением имеющегося. Привычный вид <tt>git push <remote repo> <remote branch></tt> является лишь одной из реализаций этой полной формы.
 
 
==Апстрим в SVN==
 
{{main|Git/svn}}
 
 
<div id="links"></div>
 
 
== Ссылки ==
 
== Ссылки ==
=== По-русски ===
+
* [http://www.kernel.org/pub/software/scm/git/docs/everyday.html Everyday Git] With 20 Commands Or So
* [http://freesource.info/wiki/RuslanHihin/GitTutorial1 Учебник «Введение в git» (для версии 1.5.1 или более поздней версии]
+
* [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Git User's Manual]
* [http://freesource.info/wiki/RuslanHihin/20povsedevnyxkomandgit 20 повседневных команд git]
+
* [http://www.freesource.info/wiki/AltLinux/Sisyphus/devel/gear Использование gear]
* [http://freesource.info/wiki/RuslanHihin/GitUserManual Главы из руководства пользователя git]
+
* [[git/recommit|Как переделать commit, в котором сразу же нашёлся ляп]]
* [http://los-t.livejournal.com/tag/git%20guts git guts] (внутренности git)
+
* [[git/MergingBranches|Как мержить бранчи]], поддерживая пакет с N пересекающимися патчами
* [http://blog.tarantsov.com/2008/11/essential-git.html Введение в структуру хранилища git] (полезно для понимания происходящего)
+
* [[git/gitincompact|Как установить git в Compact 3.0]]
* [http://admdev.blogspot.com/2009/02/git.html Практическое введение в git] (нечто вроде quickstart без привязки к специфике ALT)
+
* [http://lwn.net/Articles/245678/ Линкдамп] по документации git
* [http://git-scm.com/book/ru/v2 Pro git] (перевод второго издания вышедшей недавно книги, без привязки к специфике ALT)
+
** [http://www.kernel.org/pub/software/scm/git/docs/tutorial.html tutorial] по 1.5+, в частности
* [http://wiki.etersoft.ru/UsesGit Использование Git для разработки в Etersoft]
 
* [http://www.opennet.ru/base/dev/git_kung_fu.txt.html Правила хорошего тона при работе с git в многопользовательском окружении]
 
 
 
=== Вводные статьи ===
 
 
* [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ Intro to Distributed Version Control (Illustrated])
 
* [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ Intro to Distributed Version Control (Illustrated])
* [http://cworth.org/hgbook-git/tour/ A tour of git: the basics]
+
* [http://www.infoq.com/articles/dvcs-guide Distributed Version Control Systems: A Not-So-Quick Guide Through]
* '''[http://www.kernel.org/pub/software/scm/git/docs/giteveryday.html Everyday Git] With 20 Commands Or So'''
+
* [http://www.opensolaris.org/os/community/tools/scm/git-report-final.txt Обзор git] для сообщества OpenSolaris
* [http://git.or.cz/course/svn.html ...для SVN-щика]
+
* [http://freesource.info/wiki//RuslanHihin/GitTutorial1 Учебник "введение в git" (для версии 1.5.1 или более поздняя версия]
 
+
* [http://freesource.info/wiki//RuslanHihin/20povsedevnyxkomandgit 20 повседневных команд git]  
=== Официальная документация ===
+
* [http://freesource.info/wiki//RuslanHihin/GitUserManual Главы из руководства пользователя git]
* [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Git User's Manual]
 
* [http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html gittutorial(7)]
 
* [http://kernel.org/pub/software/scm/git/docs/howto/ Git Howtos]
 
 
* [http://git.or.cz/gitwiki/ GitWiki]
 
* [http://git.or.cz/gitwiki/ GitWiki]
 
** [http://git.or.cz/gitwiki/GitDocumentation GitDocumentation]
 
** [http://git.or.cz/gitwiki/GitDocumentation GitDocumentation]
Строка 245: Строка 215:
 
** [http://git.or.cz/gitwiki/Aliases Aliases]
 
** [http://git.or.cz/gitwiki/Aliases Aliases]
 
** [http://git.or.cz/gitwiki/GitGlossary GitGlossary]
 
** [http://git.or.cz/gitwiki/GitGlossary GitGlossary]
 
=== tips&tricks ===
 
* [[git/recommit|Как переделать commit, в котором сразу же нашёлся ляп]]
 
* [[git/MergingBranches|Как мержить бранчи]], поддерживая пакет с N пересекающимися патчами
 
 
* [http://zrusin.blogspot.com/2007/09/git-cheat-sheet.html Zack Rusin: Git cheat sheet] ([http://www.samlown.com/uploads/documents/git-cheat-sheet-a4.pdf A4])
 
* [http://zrusin.blogspot.com/2007/09/git-cheat-sheet.html Zack Rusin: Git cheat sheet] ([http://www.samlown.com/uploads/documents/git-cheat-sheet-a4.pdf A4])
* [http://tomayko.com/writings/the-thing-about-git The Thing About Git]
 
* [http://article.gmane.org/gmane.comp.version-control.git/31625 Branching and merging with git]
 
* [http://www.ndpsoftware.com/git-cheatsheet.html Wonderful git cheatsheet]
 
 
=== Разное ===
 
* [http://github.com/guides GitHub: Git Guides]
 
* [http://www.gitcasts.com/ GitCasts]
 
* [http://gitfu.wordpress.com/ git-fu]
 
* [http://lwn.net/Articles/245678/ Линкдамп] по документации git
 
* [http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html Git Magic]
 
 
* [http://linux.yyz.us/git-howto.html Kernel Hackers' Guide to git]
 
* [http://linux.yyz.us/git-howto.html Kernel Hackers' Guide to git]
* [http://osteele.com/archives/2008/05/my-git-workflow My Git Workflow]
+
* [http://cworth.org/hgbook-git/tour/ A tour of git: the basics]
* [http://www.opensolaris.org/os/community/tools/scm/git-report-final.txt Обзор git] для сообщества OpenSolaris
 
 
* [http://www.sourcemage.org/Git_Guide Git Guide - SourceMage Wiki]
 
* [http://www.sourcemage.org/Git_Guide Git Guide - SourceMage Wiki]
* [http://www.infoq.com/articles/dvcs-guide Distributed Version Control Systems: A Not-So-Quick Guide Through]
+
* [http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html Git Magic]
 +
* [http://gitfu.wordpress.com/ git-fu]
 
* [http://versioncontrolblog.com/ Version Control Blog]
 
* [http://versioncontrolblog.com/ Version Control Blog]
* [http://thread.gmane.org/gmane.comp.video.dri.devel/34739/focus=34744 Linux kernel "clean history" tips]
+
* [http://github.com/guides GitHub: Git Guides]
* [http://krlmlr.github.io/using-gitattributes-to-avoid-merge-conflicts/ Using .gitattributes to avoid merge conflicts] (по NEWS и подобным)
+
* [http://kernel.org/pub/software/scm/git/docs/howto/ Git Howtos]
* [http://www.rosipov.com/blog/use-vimdiff-as-git-mergetool/ Use vimdiff as git mergetool]
+
* [http://www.gitcasts.com/ GitCasts]
 
+
* [http://article.gmane.org/gmane.comp.version-control.git/31625 Branching and merging with git]
{{Category navigation|title=git|category=git|sortkey=*}}
 

Обратите внимание, что все добавления и изменения текста статьи рассматриваются, как выпущенные на условиях лицензии CC-BY-SA-3.0.

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Вики-разметка
Заголовки: 1-го: == ==, 2-го: === ===, 3-го: ==== ==== уровня.
Быстрая вставка: «» | [[]] [[|]] {{}} {{|}} [[Категория:]] [[altbug:]] <source lang=""></source> <pre></pre> <!-- -->.
Определения: {{man|}} {{lists|}} {{cmd|}} {{path|}} {{prg|}} {{pkg|}} {{term|}} {{span||}} {{altbug|}}
Выделение: ''italics'', '''bold''', <tt>моноширинный</tt>, <code>код</code>.
Списки: * ненумерованный список, ** вложенный список, # нумерованный список, ## вложенный нумерованный список, *# вложенный смешанный список, ;список :определений.
Verbatim: Пробел в начале строки или <pre>Явный тэг</pre>
Ссылки: [http://www.altlinux.ru/ внешние], [[Main Page|внутренние]], [http://altlinux.ru], [[Main Page]]
Шаблоны: {{Crap}} {{D}} {{Policy}} {{DraftPolicy}} {{Merge|}} {{Улучшение}} {{Тимовец|}}