From 2eea7cc7ecbfaacfcc139c7818e22953b47e2f07 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 27 Mar 2014 12:51:12 +0400 Subject: [PATCH 1/8] Remove commit from the history. Closes #492. --- git-tutorial.lyx | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 376cfd1..901f73e 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -1849,6 +1849,67 @@ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch По опциям команды filter-branch смотрите документацию (git help filter-branch). \end_layout +\begin_layout Subsubsection +Удаление коммита из истории +\end_layout + +\begin_layout Standard +Удаление последнего созданного коммита осуществляется одной командой и всегда + завершается успехом. +\end_layout + +\begin_layout LyX-Code +git reset --hard HEAD~1 # удалить последний коммит +\end_layout + +\begin_layout LyX-Code +git reset --soft HEAD~1 # удалить последний коммит, сохранив изменения в + +\begin_inset Quotes eld +\end_inset + +незакомиченными +\begin_inset Quotes erd +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\begin_layout Standard +Удаление коммита из глубин истории не всегда может быть выполнено успешно, + может потребоваться разрешение конфликтов. +\end_layout + +\begin_layout LyX-Code +git rebase -i --preserve-merges HEAD~10 # редактировать последние 10 коммитов, + сохраняя слияния +\end_layout + +\begin_layout LyX-Code +# В редакторе отметить удаляемый коммит для редактирования +\begin_inset Quotes eld +\end_inset + +edit +\begin_inset Quotes erd +\end_inset + + +\end_layout + +\begin_layout LyX-Code +git reset --hard HEAD~1 # удалить требуемый коммит +\end_layout + +\begin_layout LyX-Code +git rebase --continue # продолжить перепостроение истории, начиная с удалённого + коммита +\end_layout + \begin_layout Subsection Пример использования gitflow \end_layout From 85c68805173d0918cecaa45ee75f9b004ce94bd8 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 27 Mar 2014 13:36:54 +0400 Subject: [PATCH 2/8] Git rebase branchname. Closes #491. --- git-tutorial.lyx | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 901f73e..294262e 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -1873,10 +1873,6 @@ git reset --soft HEAD~1 # удалить последний коммит, сох \end_inset -\end_layout - -\begin_layout Standard - \end_layout \begin_layout Standard @@ -1910,6 +1906,48 @@ git rebase --continue # продолжить перепостроение ист коммита \end_layout +\begin_layout Subsubsection +Синхронизация веток +\end_layout + +\begin_layout Standard +По аналогии с командой git pull --rebase для принятия удалённых изменений + с перемещением локальных коммитов на вершину истории синхронизация веток + может осуществляться и локально. +\end_layout + +\begin_layout LyX-Code +# Синхронизировать текущую ветку с веткой branch1, переместив коммиты, +\end_layout + +\begin_layout LyX-Code +# отсутствующие в branch1 на вершину истории +\end_layout + +\begin_layout LyX-Code +git rebase branch1 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +# Синхронизировать текущую ветку с удалённой, переместив коммиты, +\end_layout + +\begin_layout LyX-Code +# отсутствующие в origin/master на вершину истории +\end_layout + +\begin_layout LyX-Code +git fetch origin master +\end_layout + +\begin_layout LyX-Code +git rebase origin/master +\end_layout + \begin_layout Subsection Пример использования gitflow \end_layout From 9d9fefc3ebaefbe2b1b130e8ed06fe952a1f0b54 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 3 Apr 2014 15:33:36 +0400 Subject: [PATCH 3/8] Describe 'git blame' command. Closes #406. --- git-tutorial.lyx | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 294262e..90324b5 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -1020,6 +1020,62 @@ Add collaborators и установить для добавленных поль и т.п. \end_layout +\begin_layout Subsubsection +Авторство и время редактирования строк +\end_layout + +\begin_layout Standard +Следующий пример покажет авторство, ревизии последних правок и время для + нескольких строк в файле исходного кода main.c: +\end_layout + +\begin_layout LyX-Code +git blame -L 40,60 main.c # вывести информацию о строках с 40 по 60 включительн +о +\end_layout + +\begin_layout LyX-Code +git blame -L 40,+21 main.c # вывести информацию о 21-ой строке, начиная + с 40-ой +\end_layout + +\begin_layout Standard +Если требуется отфильтровать слишком старую историю, можно это сделать следующим + образом: +\end_layout + +\begin_layout LyX-Code +git blame v2.6.18.. + -- main.c # игнорировать информацию, старше версии 2.6.18 +\end_layout + +\begin_layout LyX-Code +git blame --since=3.weeks -- main.c # игнорировать информацию, старше 3-х + недель +\end_layout + +\begin_layout Standard +Вот пример, как можно посчитать общий вклад разработчиков в конкретный файл + проекта: +\end_layout + +\begin_layout LyX-Code +git blame --line-porcelain mainform.cpp | sed -n 's/^author //p' | sort | + uniq -c | sort -rn +\end_layout + +\begin_layout LyX-Code + 1526 Kolan Sh +\end_layout + +\begin_layout LyX-Code + 691 egor_i@egor-837.insysltd.ru +\end_layout + +\begin_layout LyX-Code + 167 egor_i@EGOR-837 +\end_layout + \begin_layout Subsubsection Клонирование \end_layout From 2150651482a0b7ddb9190288362e530ae6a1cb47 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 3 Apr 2014 17:33:30 +0400 Subject: [PATCH 4/8] Describe git archive command. Closes #405. --- git-tutorial.lyx | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 90324b5..e1924e5 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -2340,6 +2340,45 @@ git gc --aggressive --prune # удалить все бесполезные об локальный репозиторий \end_layout +\begin_layout Subsection +Создание архива +\end_layout + +\begin_layout Standard +Иногда для передачи снимка исходного кода третьим лицам требуется создать + архив, не включая Git-специфичных данных и временных файлов, созданных + в процессе сборки проекта. + Для этой цели существует команда +\begin_inset Quotes eld +\end_inset + +git archive +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout LyX-Code +git archive -o myproject-1.0.0.zip v1.0.0 > # создать Zip-архив 1-ой стабильной + версии проекта +\end_layout + +\begin_layout LyX-Code +git archive --format=tgz --prefix=myproject-master/ master > myproject-master.tgz + # архивировать +\end_layout + +\begin_layout LyX-Code + + # ветку master +\end_layout + +\begin_layout LyX-Code +git archive -o myproject-doc.zip HEAD:Documentation/ # создать архив с документац +ией +\end_layout + \begin_layout Section Удачная модель ветвления \end_layout From cec14e7b5284b6b89e0a0b20db8cd4ef9a776d10 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 3 Apr 2014 18:03:17 +0400 Subject: [PATCH 5/8] New Section: Administration --- git-tutorial.lyx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index e1924e5..e7daba1 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -2318,6 +2318,10 @@ my-lib submodule updated. \end_layout +\begin_layout Section +Администрирование +\end_layout + \begin_layout Subsection Свободное место на диске \end_layout From 78388fdacc136cc80a808f72a207d1bd9986ec27 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 3 Apr 2014 18:05:26 +0400 Subject: [PATCH 6/8] Describe git fsck for hurried users. Closes #393. --- git-tutorial.lyx | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index e7daba1..d25e1ea 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -2383,6 +2383,77 @@ git archive -o myproject-doc.zip HEAD:Documentation/ # создать архив ией \end_layout +\begin_layout Subsection +Проверка целостности репозитория +\end_layout + +\begin_layout Standard +Git являет по своей сути файловую систему, расположенную внутри другой файловой + системы (на диске). + Иногда в работе компьютера случаются сбои и файловая система компьютера + может быть повреждена. + Также существует ненулевая вероятность повреждения системы объектов репозитория + в результате типовой работы (напр., использование нестабильной версии Git), + хотя она крайне мала. +\end_layout + +\begin_layout Standard +Для проверки целостности объектов бд и истории репозитория имеется команда + +\begin_inset Quotes eld +\end_inset + +git fsck +\begin_inset Quotes erd +\end_inset + +. + Примеры использования: +\end_layout + +\begin_layout LyX-Code +git fsck # выполнить проверку +\end_layout + +\begin_layout Standard +Иногда случается, что объект добавлен в индекс +\begin_inset Quotes eld +\end_inset + +git add +\begin_inset Quotes erd +\end_inset + +, а впоследствии удалён по ошибке, например командой +\begin_inset Quotes eld +\end_inset + +git reset --hard +\begin_inset Quotes erd +\end_inset + +. + В Git предусмотрена возможность восстановления данных и на этот случай, + пример: +\end_layout + +\begin_layout LyX-Code +git add main.c # добавили изменения в индекс +\end_layout + +\begin_layout LyX-Code +git reset --hard # случайно откатились к вершине истории +\end_layout + +\begin_layout LyX-Code +git fsck --lost-found # с большой долей вероятности изменённый main.c находится +\end_layout + +\begin_layout LyX-Code + # в .git/lost-found/other, только в место имени хеш + ревизии +\end_layout + \begin_layout Section Удачная модель ветвления \end_layout From 71e177717325e9ffea11e868c54b327dbdbef1ac Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Fri, 4 Apr 2014 14:41:42 +0400 Subject: [PATCH 7/8] Describe git subtree. Closes #404. --- git-tutorial.lyx | 91 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index d25e1ea..4ed724c 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -2234,6 +2234,10 @@ git cherry-pick --ff ..next # если история линейная и Субрепозитории \end_layout +\begin_layout Subsubsection +Субмодули +\end_layout + \begin_layout Standard Или так называемые Git submodules. Применяются для включения одних проектов в другие или для создания суперпроекто @@ -2318,6 +2322,93 @@ my-lib submodule updated. \end_layout +\begin_layout Subsubsection +Поддеревья +\end_layout + +\begin_layout Standard +Или так называемые Git subtrees. +\end_layout + +\begin_layout Standard +Вначале нужно добавить репозиторий, который будет использоваться как subtree: +\end_layout + +\begin_layout LyX-Code +git remote add mylib_remote git@git.insysltd.ru:insys/mylib.git +\end_layout + +\begin_layout LyX-Code +git fetch mylib_remote +\end_layout + +\begin_layout LyX-Code +git checkout -b mylib_branch mylib_remote/master +\end_layout + +\begin_layout LyX-Code +git checkout master +\end_layout + +\begin_layout Standard +Допустим, мы хотим поместить проект mylib в подкаталог с тем же именем: +\end_layout + +\begin_layout LyX-Code +git read-tree --prefix=mylib/ -u mylib_branch +\end_layout + +\begin_layout Standard +В отличие от субмодулей данные поддерева хранятся физически в репозитории. + Субмодули же, по своей сути, лишь ссылаются на данные в другом репозитории. +\end_layout + +\begin_layout Standard +Обновление поддерева происходит довольно легко: +\end_layout + +\begin_layout LyX-Code +git checkout mylib_branch # переключиться на ветку поддерева +\end_layout + +\begin_layout LyX-Code +git pull # принять удалённые изменения +\end_layout + +\begin_layout LyX-Code +git checkout master # переключиться на версию основного проекта +\end_layout + +\begin_layout LyX-Code +git merge --squash -s subtree --no-commit mylib_branch # смержить в mylib/, + не создавая коммита +\end_layout + +\begin_layout LyX-Code +git commit # зафиксировать изменения +\end_layout + +\begin_layout Standard +Узнать о наличии разницы между подкаталогом mylib/ и кодом в mylib_branch + можно при помощи +\begin_inset Quotes eld +\end_inset + +git diff-tree +\begin_inset Quotes erd +\end_inset + +: +\end_layout + +\begin_layout LyX-Code +git diff-tree -p mylib_branch # сравнить с локальной веткой +\end_layout + +\begin_layout LyX-Code +git diff-tree -p mylib_remote/master # сравнить с удалённой веткой +\end_layout + \begin_layout Section Администрирование \end_layout From dacb2eb9618e08bce1fc0b65477e93783f100fc9 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Fri, 4 Apr 2014 17:06:37 +0400 Subject: [PATCH 8/8] Bumped version number to 1.3.0 --- git-tutorial.lyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-tutorial.lyx b/git-tutorial.lyx index 4ed724c..6331912 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -118,7 +118,7 @@ February 27, 2013 \end_layout \begin_layout Date -Версия 1.2.0 +Версия 1.3.0 \end_layout \begin_layout Standard