Merge branch 'release-1.3.0'

master v1.3.0
Kolan Sh 2014-04-04 17:06:45 +04:00
commit 36346b62a8
1 changed files with 361 additions and 1 deletions

View File

@ -118,7 +118,7 @@ February 27, 2013
\end_layout
\begin_layout Date
Версия 1.2.0
Версия 1.3.0
\end_layout
\begin_layout Standard
@ -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
@ -1849,6 +1905,105 @@ 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 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 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
@ -2079,6 +2234,10 @@ git cherry-pick --ff ..next # если история линейная и
Субрепозитории
\end_layout
\begin_layout Subsubsection
Субмодули
\end_layout
\begin_layout Standard
Или так называемые Git submodules.
Применяются для включения одних проектов в другие или для создания суперпроекто
@ -2163,6 +2322,97 @@ 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
\begin_layout Subsection
Свободное место на диске
\end_layout
@ -2185,6 +2435,116 @@ 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 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