diff --git a/git-tutorial.lyx b/git-tutorial.lyx index aeaad14..376cfd1 100644 --- a/git-tutorial.lyx +++ b/git-tutorial.lyx @@ -118,7 +118,7 @@ February 27, 2013 \end_layout \begin_layout Date -Версия 1.1.0 +Версия 1.2.0 \end_layout \begin_layout Standard @@ -1043,6 +1043,15 @@ Add collaborators и установить для добавленных поль git clone git@git.insysltd.ru:~user1/test_project/user1-test_repo.git \end_layout +\begin_layout Standard +Если репозиторий содержит субрепозитории (submodules) необходимо их инициализиро +вать и синхронизировать: +\end_layout + +\begin_layout LyX-Code +git submodule update --init --recursive +\end_layout + \begin_layout Subsubsection pull-request - запрос на слияние \end_layout @@ -1627,6 +1636,67 @@ git commit -m # во второй коммит. \end_layout +\begin_layout Standard +Объединение нескольких коммитов в один можно выполнить ещё проще: +\end_layout + +\begin_layout LyX-Code +git rebase -i -p HEAD~5 +\end_layout + +\begin_layout LyX-Code +# редактирование: заменить 'pick' на 'squash' для коммитов, +\end_layout + +\begin_layout LyX-Code +# которые хотим объединить, сохранить. +\end_layout + +\begin_layout Standard +Разбить произвольный коммит на два последовательных коммита можно следующими + командами: +\end_layout + +\begin_layout LyX-Code +git rebase -i ^ branch_name +\end_layout + +\begin_layout LyX-Code +git rebase HEAD^ +\end_layout + +\begin_layout LyX-Code +git add -p # add changes for the 1th commit +\end_layout + +\begin_layout LyX-Code +git commit -m +\begin_inset Quotes eld +\end_inset + +1st commit +\begin_inset Quotes erd +\end_inset + + # make 1st commit +\end_layout + +\begin_layout LyX-Code +git commit -am +\begin_inset Quotes eld +\end_inset + +2nd commit +\begin_inset Quotes erd +\end_inset + + # make 2nd commit +\end_layout + +\begin_layout LyX-Code +git rebase --continue # complete rebase operation +\end_layout + \begin_layout Subsubsection Выделение поддиректории в отдельный репозиторий \end_layout @@ -2005,16 +2075,114 @@ git cherry-pick --ff ..next # если история линейная и к текущей ветви \end_layout +\begin_layout Subsection +Субрепозитории +\end_layout + +\begin_layout Standard +Или так называемые Git submodules. + Применяются для включения одних проектов в другие или для создания суперпроекто +в. + При этом обновления в подпроектах не затрагивают основной проект до тех + пор, пока владелец проекта не захочет это сделать явно, убедившись, что + эти изменения оставляют проект в рабочем состоянии. +\end_layout + +\begin_layout Standard +Создать Git submodule очень просто, например добавим в некоторый проект + my-project библиотеку my-lib: +\end_layout + \begin_layout LyX-Code +cd my-project +\end_layout + +\begin_layout LyX-Code +git submodule add git@git.github.com:mynickname/my-lib.git +\end_layout + +\begin_layout LyX-Code +git commit -m +\begin_inset Quotes eld +\end_inset + +Added my-lib submodule. +\begin_inset Quotes erd +\end_inset + \end_layout \begin_layout LyX-Code - +git push +\end_layout + +\begin_layout Standard +Команда \end_layout \begin_layout LyX-Code + git submodule update --init --recursive +\end_layout +\begin_layout Standard +рекурсивно обновляет всем субмодули, которые в свою очередь могут содержать + другие субмодули из origin remote. + Следует отметить, что после выполнения данной команды сурепозитории могут + оказаться в +\begin_inset Quotes eld +\end_inset + +detached state +\begin_inset Quotes erd +\end_inset + +, то есть не привязанными к какой-либо ветке. +\end_layout + +\begin_layout Standard +Если требуется внести изменения в субрепозиторий, то это делается как и + с обычным проектом (edit, commit, push). + Важно отметить, что изменения в субрепозитории не влияют на главный репозиторий + до тех пор, пока в нём это явно не будет указано: +\end_layout + +\begin_layout LyX-Code +git add my-lib +\end_layout + +\begin_layout LyX-Code +git commit -m +\begin_inset Quotes eld +\end_inset + +my-lib submodule updated. +\begin_inset Quotes erd +\end_inset + + +\end_layout + +\begin_layout Subsection +Свободное место на диске +\end_layout + +\begin_layout Standard +Для удаления временных файлов и сжатия истории можно использовать следующие + команды: +\end_layout + +\begin_layout LyX-Code +git clean # удалить неотслеживаемые файлы в репозитории +\end_layout + +\begin_layout LyX-Code +git prune # удалить все недостижимые объекты/коммиты из базы данных +\end_layout + +\begin_layout LyX-Code +git gc --aggressive --prune # удалить все бесполезные объекты и оптимизировать + локальный репозиторий \end_layout \begin_layout Section