Merge branch '#623_code_lists' into develop

This commit is contained in:
Kolan Sh 2014-09-01 12:05:19 +04:00
commit 5744c8b407
1 changed files with 298 additions and 1 deletions

View File

@ -390,6 +390,13 @@ Initial commit.
.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Индексом в Git называется промежуточное хранилище изменений, попадающих
в ближайший коммит.
@ -467,6 +474,13 @@ begin_layout Subsubsection
Stage this hunk [y,n,q,a,d,/,e,?]? y
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Параметр -m у команды commit указывает на то, что следующим аргументом команды
следует описание коммита, что удобно, когда нужно коммит сделать быстро.
@ -625,6 +639,13 @@ $ git status -s # использовать сокращённую запись
?? git-tutorial.pdf
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Сами изменения можно посмотреть командой diff:
\end_layout
@ -833,6 +854,13 @@ git branch -d featureA # удаление
ветки featureA
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
При работе с системами управления проектами (ChilliProject, Redmine, Trac)
по завершении работы с ветвью имеет смысл добавлять в сообщение коммита
@ -867,6 +895,13 @@ Bug B fixed.
\end_inset
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
@ -879,6 +914,13 @@ Bug B fixed.
git merge --squash
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Иногда в списке удалённых веток (git branch -r) остаются несуществующие
ссылки в результате того, что кто-то удалил эту ветвь или несколько веток
@ -919,6 +961,13 @@ git branch -d -r github/invalid_branch2
git push
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Также возможны более сложные операции, к примеру:
\end_layout
@ -1048,6 +1097,13 @@ git blame -L 40,+21 main.c # вывести информацию о 21-ой с
с 40-ой
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Если требуется отфильтровать слишком старую историю, можно это сделать следующим
образом:
@ -1063,6 +1119,13 @@ git blame --since=3.weeks -- main.c # игнорировать информац
недель
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Вот пример, как можно посчитать общий вклад разработчиков в конкретный файл
проекта:
@ -1108,6 +1171,13 @@ git blame --line-porcelain mainform.cpp | sed -n 's/^author //p' | sort |
git clone git@git.insysltd.ru:~user1/test_project/user1-test_repo.git
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Если репозиторий содержит субрепозитории (submodules) необходимо их инициализиро
вать и синхронизировать:
@ -1171,6 +1241,13 @@ git format-patch master # создать патч, включающий отли
от ветки master
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Далее полученный патч может быть отправлен по email или прямо в окно Jabber-клие
нта.
@ -1182,6 +1259,13 @@ git format-patch master --stdout | mail -s 'Please apply this patch, Leo'
leo@matrix.org
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Применить полученный патч можно командой apply:
\end_layout
@ -1222,7 +1306,10 @@ git branch -r # список удалённых веток
git branch -a # список всех веток, включая удалённые
\end_layout
\begin_layout LyX-Code
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
@ -1273,6 +1360,13 @@ git log --graph --decorate --stat
-stat -- печатать статистику по изменениям в каждом файле.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Если нужно вывести лог на определённом временном промежутке, через две точки
вводится начало и конец:
@ -1286,6 +1380,13 @@ git log master..develop
git log f8a32c..3ab98c
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Можно исключать из выводимого списка коммиты, входящие в какую-либо ветвь,
например следующая команда выведет список коммитов из develop, не вошедшие
@ -1296,6 +1397,13 @@ git log f8a32c..3ab98c
git log develop ^master
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Более полный список опций описан в руководстве (git help log).
\end_layout
@ -1430,6 +1538,13 @@ git stash apply # применить спрятанные измен
их из stash-списка
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Можно получить любую версию файла или директории посредством команды checkout:
\end_layout
@ -1448,6 +1563,13 @@ git checkout .
# получить из головы (HEAD) содержимое текущей директории
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Можно отменить изменения, попавшие в индекс для следующего коммита:
\end_layout
@ -1460,6 +1582,13 @@ git reset # очистить индекс
git reset main.h # убрать из индекса main.h
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Вся история команд работы с Git хранится в локальном списке reflog:
\end_layout
@ -1654,6 +1783,13 @@ git rebase --continue # обновить все последующие комм
git push -f # отправить изменённую ветвь на Git-сервер
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Также, в некоторых случаях бывает необходимо отредактировать самый первый
коммит (root-commit):
@ -1701,6 +1837,13 @@ git commit -m
# во второй коммит.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Объединение нескольких коммитов в один можно выполнить ещё проще:
\end_layout
@ -1717,6 +1860,13 @@ git rebase -i -p HEAD~5
# которые хотим объединить, сохранить.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Разбить произвольный коммит на два последовательных коммита можно следующими
командами:
@ -1840,6 +1990,13 @@ ABC/
\end_layout
\end_deeper
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Для этого воспользуемся командой filter-branch, изменяющей историю.
\end_layout
@ -1883,6 +2040,13 @@ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch
# оставив ABC
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Аналогично создаётся репозиторий для XYZ
\end_layout
@ -1910,6 +2074,13 @@ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch
--prune-empty --tag-name-filter cat -- --all
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
По опциям команды filter-branch смотрите документацию (git help filter-branch).
\end_layout
@ -1938,6 +2109,13 @@ git reset --soft HEAD~1 # удалить последний коммит, сох
\end_inset
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
@ -2141,6 +2319,13 @@ git bisect skip # пропустить текущую ревизию
git bisect reset # закончить двоичный поиск
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Как только bisect нашёл источник ошибки - ревизию, в которой она была внесена,
для нахождения ошибки остаётся проанализировать изменения в одном текущем
@ -2172,6 +2357,13 @@ git bisect reset # закончить двоичный поиск
выпуском новой версии и слиянием исправлений в master и develop.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Случаются ситуации, когда в дереве истории Git нужно найти коммит, где ошибка
была исправлена, например, чтобы сообщить мэнтайнеру проекта для отметки
@ -2333,6 +2525,13 @@ Added my-lib submodule.
git push
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Команда
\end_layout
@ -2407,6 +2606,13 @@ git checkout -b mylib_branch mylib_remote/master
git checkout master
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Допустим, мы хотим поместить проект mylib в подкаталог с тем же именем:
\end_layout
@ -2415,6 +2621,13 @@ git checkout master
git read-tree --prefix=mylib/ -u mylib_branch
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
В отличие от субмодулей данные поддерева хранятся физически в репозитории.
Субмодули же, по своей сути, лишь ссылаются на данные в другом репозитории.
@ -2445,6 +2658,13 @@ git merge --squash -s subtree --no-commit mylib_branch # смержить в myl
git commit # зафиксировать изменения
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Узнать о наличии разницы между подкаталогом mylib/ и кодом в mylib_branch
можно при помощи
@ -2563,6 +2783,13 @@ git fsck
git fsck # выполнить проверку
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Иногда случается, что объект добавлен в индекс
\begin_inset Quotes eld
@ -2891,6 +3118,13 @@ master
develop
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Ветвь master создаётся при инициализации репозитория, что должно быть знакомо
каждому пользователю Git.
@ -2964,6 +3198,13 @@ production-ready
Ветви исправлений (Hotfix branches)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
У каждого типа ветвей есть своё специфическое назначение и строгий набор
правил, от каких ветвей они могут порождаться, и в какие должны вливаться.
@ -3109,6 +3350,13 @@ Deleted branch myfeature (was 05e9557).
$ git push origin develop
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Флаг --no-ff вынуждает Git всегда создавать новый объект коммита при слиянии,
даже если слияние может быть осуществлено алгоритмом fast-forward.
@ -3268,6 +3516,13 @@ $ git commit -a -m "Bumped version number to 1.2"
1 files changed, 1 insertions(+), 1 deletions(-)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Мы создали новую ветку, переключились в неё, а затем выставили номер версии
(bump version number).
@ -3339,6 +3594,13 @@ Merge made by recursive.
$ git tag -a 1.2
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Теперь релиз издан и помечен тегом.
\end_layout
@ -3378,6 +3640,13 @@ Merge made by recursive.
(Отчёт об изменениях)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Этот шаг, в принципе, может привести к конфликту слияния (нередко бывает,
что к причиной конфликта является изменение номера версии проекта).
@ -3505,6 +3774,13 @@ $ git commit -a -m "Bumped version number to 1.2.1"
1 files changed, 1 insertions(+), 1 deletions(-)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Не забывайте обновлять номер версии после создания ветви!
\end_layout
@ -3566,6 +3842,13 @@ Merge made by recursive.
$ git tag -a 1.2.1
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
\series bold
@ -3599,6 +3882,13 @@ Merge made by recursive.
(Отчёт об изменениях)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
У этого правила есть одно исключение:
\series bold
@ -3729,6 +4019,13 @@ git config --global user.email "you@example.com"
git config --global user.name "Your Name"
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Опция --global указывает, что настройки должны быть применены глобально,
а не только к текущему репозиторию.