From 90b2b49476f6e958d5a5242669b437db1060c490 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Tue, 10 Jun 2014 16:28:49 +0400 Subject: [PATCH 1/5] Semantic error (Kostya helped). --- git-tutorial.lyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 6331912..73bfbf7 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -264,7 +264,7 @@ lease/ . Полученный приватный ключ id_rsa следует хранить в безопасном от чужих глаз месте (в случае получения доступа к нему 3-их лиц следует сгенерировать - новый, а старый - удалить с Git-сервера). + новый, а старый публичный ключ (.pub) - удалить с Git-сервера). \end_layout \begin_layout Standard From 493115373f5385fe6d1af7fa2785e4104dcc15bf Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Mon, 1 Sep 2014 11:36:20 +0400 Subject: [PATCH 2/5] git bisect to find 'good'-commit (git bisect bad <-> git bisect good). Closes #604. --- git-tutorial.lyx | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 73bfbf7..e6e061a 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -2163,6 +2163,54 @@ git bisect reset # закончить двоичный поиск выпуском новой версии и слиянием исправлений в master и develop. \end_layout +\begin_layout Standard +Случаются ситуации, когда в дереве истории Git нужно найти коммит, где ошибка + была исправлена, например, чтобы сообщить мэнтайнеру проекта для отметки + в баг-трекере или бэкпортирования (cherry-pick) в другие долгие +\begin_inset Quotes eld +\end_inset + +longtime +\begin_inset Quotes erd +\end_inset + + ветки проекта. + Для этого используются все те же самые команды, только вместо git bisect + bad нужно вводить git bisect good и наоборот, так как вместо +\begin_inset Quotes eld +\end_inset + +плохого +\begin_inset Quotes erd +\end_inset + + ( +\begin_inset Quotes eld +\end_inset + +bad +\begin_inset Quotes erd +\end_inset + +) коммита с ошибкой мы ищем +\begin_inset Quotes eld +\end_inset + +хороший +\begin_inset Quotes erd +\end_inset + + ( +\begin_inset Quotes eld +\end_inset + +good +\begin_inset Quotes erd +\end_inset + +) коммит с нужным исправлением. +\end_layout + \begin_layout Subsection cherry-pick - обмен коммитами между ветками \end_layout From 4fe59f9f23d8aff1bcd86b5101487ae82efa5f25 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Mon, 1 Sep 2014 11:38:01 +0400 Subject: [PATCH 3/5] LyX format updated to 474 (>=LyX-2.0.8). --- git-tutorial.lyx | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index e6e061a..cb20a61 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -1,5 +1,5 @@ -#LyX 2.0 created this file. For more info see http://www.lyx.org/ -\lyxformat 413 +#LyX 2.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 474 \begin_document \begin_header \textclass article @@ -36,13 +36,13 @@ foottoend \font_roman default \font_sans default \font_typewriter default +\font_math auto \font_default_family default \use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 - \graphics default \default_output_format default \output_sync 0 @@ -66,15 +66,24 @@ foottoend \pdf_pdfusetitle true \papersize default \use_geometry true -\use_amsmath 1 -\use_esint 1 -\use_mhchem 1 -\use_mathdots 1 +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 \cite_engine basic +\cite_engine_type default +\biblio_style plain \use_bibtopic false \use_indices false \paperorientation portrait \suppress_date false +\justification true \use_refstyle 1 \index Index \shortcut idx @@ -700,7 +709,7 @@ status collapsed \end_inset -\begin_inset Caption +\begin_inset Caption Standard \begin_layout Plain Layout \begin_inset CommandInset label @@ -2637,7 +2646,7 @@ status collapsed \end_inset -\begin_inset Caption +\begin_inset Caption Standard \begin_layout Plain Layout \begin_inset CommandInset label @@ -2799,7 +2808,7 @@ status collapsed \end_inset -\begin_inset Caption +\begin_inset Caption Standard \begin_layout Plain Layout Децентрализованный, но централизованный @@ -2857,7 +2866,7 @@ status collapsed \end_inset -\begin_inset Caption +\begin_inset Caption Standard \begin_layout Plain Layout Главные ветви @@ -2990,7 +2999,7 @@ status collapsed \end_inset -\begin_inset Caption +\begin_inset Caption Standard \begin_layout Plain Layout Ветви функциональностей (feature branches) @@ -3128,7 +3137,7 @@ status collapsed \end_inset -\begin_inset Caption +\begin_inset Caption Standard \begin_layout Plain Layout no-fast-forward VS fast-forward @@ -3409,7 +3418,7 @@ status collapsed \end_inset -\begin_inset Caption +\begin_inset Caption Standard \begin_layout Plain Layout Ветви исправлений (hotfix branches) From c5f03afc597f82d7157067df966b9ecbc28f4fb8 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Mon, 1 Sep 2014 12:05:12 +0400 Subject: [PATCH 4/5] Add empty string after the lists and code blocks. Closes #623. --- git-tutorial.lyx | 299 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 298 insertions(+), 1 deletion(-) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index cb20a61..676e1cb 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -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 указывает, что настройки должны быть применены глобально, а не только к текущему репозиторию. From 8c440f9c1ce8eec68b803ba1cf170648bcaa509a Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Mon, 1 Sep 2014 12:05:37 +0400 Subject: [PATCH 5/5] Bumped version number to 1.3.1 --- git-tutorial.lyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 676e1cb..efda856 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -127,7 +127,7 @@ February 27, 2013 \end_layout \begin_layout Date -Версия 1.3.0 +Версия 1.3.1 \end_layout \begin_layout Standard