Merge branch 'release-1.3.1'

master v1.3.1
Kolan Sh 2014-09-01 12:05:46 +04:00
commit 1b5c4a3c15
1 changed files with 371 additions and 17 deletions

View File

@ -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
@ -118,7 +127,7 @@ February 27, 2013
\end_layout
\begin_layout Date
Версия 1.3.0
Версия 1.3.1
\end_layout
\begin_layout Standard
@ -264,7 +273,7 @@ lease/
.
Полученный приватный ключ id_rsa следует хранить в безопасном от чужих
глаз месте (в случае получения доступа к нему 3-их лиц следует сгенерировать
новый, а старый - удалить с Git-сервера).
новый, а старый публичный ключ (.pub) - удалить с Git-сервера).
\end_layout
\begin_layout Standard
@ -381,6 +390,13 @@ Initial commit.
.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Индексом в Git называется промежуточное хранилище изменений, попадающих
в ближайший коммит.
@ -458,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 указывает на то, что следующим аргументом команды
следует описание коммита, что удобно, когда нужно коммит сделать быстро.
@ -616,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
@ -700,7 +730,7 @@ status collapsed
\end_inset
\begin_inset Caption
\begin_inset Caption Standard
\begin_layout Plain Layout
\begin_inset CommandInset label
@ -824,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)
по завершении работы с ветвью имеет смысл добавлять в сообщение коммита
@ -858,6 +895,13 @@ Bug B fixed.
\end_inset
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
@ -870,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) остаются несуществующие
ссылки в результате того, что кто-то удалил эту ветвь или несколько веток
@ -910,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
@ -1039,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
Если требуется отфильтровать слишком старую историю, можно это сделать следующим
образом:
@ -1054,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
Вот пример, как можно посчитать общий вклад разработчиков в конкретный файл
проекта:
@ -1099,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) необходимо их инициализиро
вать и синхронизировать:
@ -1162,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-клие
нта.
@ -1173,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
@ -1213,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
@ -1264,6 +1360,13 @@ git log --graph --decorate --stat
-stat -- печатать статистику по изменениям в каждом файле.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Если нужно вывести лог на определённом временном промежутке, через две точки
вводится начало и конец:
@ -1277,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, не вошедшие
@ -1287,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
@ -1421,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
@ -1439,6 +1563,13 @@ git checkout .
# получить из головы (HEAD) содержимое текущей директории
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Можно отменить изменения, попавшие в индекс для следующего коммита:
\end_layout
@ -1451,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
@ -1645,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):
@ -1692,6 +1837,13 @@ git commit -m
# во второй коммит.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Объединение нескольких коммитов в один можно выполнить ещё проще:
\end_layout
@ -1708,6 +1860,13 @@ git rebase -i -p HEAD~5
# которые хотим объединить, сохранить.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Разбить произвольный коммит на два последовательных коммита можно следующими
командами:
@ -1831,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
@ -1874,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
@ -1901,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
@ -1929,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
@ -2132,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 нашёл источник ошибки - ревизию, в которой она была внесена,
для нахождения ошибки остаётся проанализировать изменения в одном текущем
@ -2163,6 +2357,61 @@ git bisect reset # закончить двоичный поиск
выпуском новой версии и слиянием исправлений в master и develop.
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\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
@ -2276,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
@ -2350,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
@ -2358,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
В отличие от субмодулей данные поддерева хранятся физически в репозитории.
Субмодули же, по своей сути, лишь ссылаются на данные в другом репозитории.
@ -2388,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
можно при помощи
@ -2506,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
@ -2589,7 +2873,7 @@ status collapsed
\end_inset
\begin_inset Caption
\begin_inset Caption Standard
\begin_layout Plain Layout
\begin_inset CommandInset label
@ -2751,7 +3035,7 @@ status collapsed
\end_inset
\begin_inset Caption
\begin_inset Caption Standard
\begin_layout Plain Layout
Децентрализованный, но централизованный
@ -2809,7 +3093,7 @@ status collapsed
\end_inset
\begin_inset Caption
\begin_inset Caption Standard
\begin_layout Plain Layout
Главные ветви
@ -2834,6 +3118,13 @@ master
develop
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Ветвь master создаётся при инициализации репозитория, что должно быть знакомо
каждому пользователю Git.
@ -2907,6 +3198,13 @@ production-ready
Ветви исправлений (Hotfix branches)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
У каждого типа ветвей есть своё специфическое назначение и строгий набор
правил, от каких ветвей они могут порождаться, и в какие должны вливаться.
@ -2942,7 +3240,7 @@ status collapsed
\end_inset
\begin_inset Caption
\begin_inset Caption Standard
\begin_layout Plain Layout
Ветви функциональностей (feature branches)
@ -3052,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.
@ -3080,7 +3385,7 @@ status collapsed
\end_inset
\begin_inset Caption
\begin_inset Caption Standard
\begin_layout Plain Layout
no-fast-forward VS fast-forward
@ -3211,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).
@ -3282,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
@ -3321,6 +3640,13 @@ Merge made by recursive.
(Отчёт об изменениях)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
Этот шаг, в принципе, может привести к конфликту слияния (нередко бывает,
что к причиной конфликта является изменение номера версии проекта).
@ -3361,7 +3687,7 @@ status collapsed
\end_inset
\begin_inset Caption
\begin_inset Caption Standard
\begin_layout Plain Layout
Ветви исправлений (hotfix branches)
@ -3448,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
@ -3509,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
@ -3542,6 +3882,13 @@ Merge made by recursive.
(Отчёт об изменениях)
\end_layout
\begin_layout Standard
\begin_inset space ~
\end_inset
\end_layout
\begin_layout Standard
У этого правила есть одно исключение:
\series bold
@ -3672,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 указывает, что настройки должны быть применены глобально,
а не только к текущему репозиторию.