Почти все системы контроля версий имеют варианты ветвления. Но Git известен своими возможностями быстрого перехода. Ветви Git легкие. Таким образом, потери производительности за ветвление минимальны, и командам разработчиков рекомендуется как можно больше разветвлять и объединять. Но когда вы работаете с несколькими ветвями, важно иметь возможность сравнивать и противопоставлять различия. В этом руководстве мы рассмотрим рабочий процесс, чтобы увидеть, как мы можем сравнивать различные ветки и коммиты. Давайте сначала настроим следующую ситуацию:
C00 => C01 => C03 => C06 (главный)
C02 => C04 => C05 (разработка)
Были предприняты следующие шаги:
- C00: Добавлен hello_world.py (основная ветка)
- - Создал ветку разработки
- C01: изменен hello_world.py для добавления второго приветствия (главная ветка)
- C02: изменен hello_world.py, чтобы добавить ветку разработки с надписью Hello (ветка разработки)
- C03: Добавлен readme.txt (основная ветка)
- C04: изменен hello_world.py, чтобы добавить ветку разработки, снова приветствую (ветвь разработки)
- C05: Добавлен info.txt (ветка разработки)
- C06: Изменен readme.txt для добавления второй строки (основная ветка)
После всех коммитов в «главной» ветке будут следующие файлы:
hello_world.py
readme.txt
А в ветке «разработка» есть следующие файлы:
hello_world.py
info.txt
Сравнение голов двух веток
Вы можете использовать названия веток для сравнения голов двух ветвей:
$git diffмастер .. разработкаразница --идтик/hello_world.py б/hello_world.py
индекс e27f806..3899ed3100644
---к/hello_world.py
+++ б/hello_world.py
@@-2,7+2,7 @@
def main():
Распечатать(«Первый привет!»)
- Распечатать(«Второй привет!»)
-
+ печать('Ветка разработки передает привет')
+ печать('Ветка разработки снова здоровается')
если__name__ =='__главный__':
главный()
разница --идтик/info.txt b/info.txt
новыйфайлРежим100644
индекс 0000000..0ab52fd
--- /разработчик/нулевой
+++ б/info.txt
@@-0,0+1 @@
+ Новая информация
разница --идтик/readme.txt b/readme.txt
удаленофайлРежим100644
индекс e29c296..0000000
---к/readme.txt
+++/разработчик/нулевой
@@-1,2+0,0 @@
-1Первая строка readme.txt
-2Вторая строка readme.txt
Команда diff рекурсивно просматривает изменения. Он выполнил следующие различия:
diff –git a / hello_world.py b / hello_world.py
diff –git a / info.txt b / info.txt
diff –git a / readme.txt b / readme.txt
Здесь «a» обозначает ветвь «master», а «b» обозначает ветвь разработки. «A» всегда присваивается первому параметру, а «b» - второму параметру. / Dev / null означает, что в ветке нет файла.
Сравнение коммитов
В нашем примере ветка master имеет следующие коммиты:
$git статусО мастере филиала
ничего не фиксировать, рабочий каталог чист
$git журнал --одна линия
caa0ddd C06: Изменен readme.txt для добавления второй строки(главная ветка)
efaba94 C03: Добавлен readme.txt(главная ветка)
ee60eac C01: изменен hello_world.py для добавления второго приветствия(главная ветка)
22b4bf9 C00: Добавлен hello_world.py(главная ветка)
В ветке разработки есть следующие коммиты:
$git статусО развитии отрасли
ничего не фиксировать, рабочий каталог чист
$git журнал --одна линия
df3a4ee C05: Добавлен info.txt(ветвь разработки)
0f0abb8 C04: изменен hello_world.py, чтобы добавить ветку разработки, которая снова приветствует(ветвь разработки)
3f611a0 C02: изменен hello_world.py, чтобы добавить ветку разработки с надписью Hello(ветвь разработки)
22b4bf9 C00: Добавлен hello_world.py(главная ветка)
Предположим, мы хотим сравнить hello_world.py для коммитов C01 и C02. Вы можете использовать хеши для сравнения:
$git diffee60eac: hello_world.py 3f611a0: hello_world.pyразница --идтик/ee60eac: hello_world.py b/3f611a0: hello_world.py
индекс e27f806..72a178d100644
---к/ee60eac: hello_world.py
+++ б/3f611a0: hello_world.py
@@-2,7+2,7 @@
def main():
Распечатать(«Первый привет!»)
- Распечатать(«Второй привет!»)
+ печать('Ветка разработки передает привет')
если__name__ =='__главный__':
главный()
Вы можете использовать тот же принцип для сравнения коммитов в одной и той же ветке.
Инструменты визуального слияния
Глядя на текстовые сравнения, бывает сложно. Если вы настроили Git difftool с приложением визуального слияния, например DiffMerge или Вне всякого сравнения , вы сможете лучше увидеть различия.
Дальнейшее изучение:
- Документация Git Diff
- Документация Git DiffTool
- Настройка DiffMerge с помощью DiffTool
- Настройка BeyondCompare с помощью DiffTool
Использованная литература:
- Учебное пособие по Git: инструменты различения и слияния , YouTube
- http://coding4streetcred.com/blog/post/configure-diffmerge-for-your-git-difftool
- http://gitbaby.com/how-to-diff-one-file-to-an-arbitrary-version-in-git.html
- https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
- https://git-scm.com/book/id/v2/Git-Branching-Branches-in-a-Nutshell
- https://git-scm.com/docs/git-diff
- https://git-scm.com/docs/git-difftool
- https://sourcegear.com/diffmerge/
- https://sourcegear.com/diffmerge/webhelp/sec__git__linux.html
- https://stackoverflow.com/questions/9834689/comparing-two-branches-in-git
- https://veerasundar.com/blog/2011/06/git-tutorial-comparing-files-with-diff/
- https://www.scootersoftware.com/features.php
- https://www.scootersoftware.com/support.php?zz=kb_vcs