Почти всички системи за контрол на версиите имат опции за разклоняване. Но 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: Добавена информация.txt (клон за развитие)
- C06: Модифициран readme.txt за добавяне на втори ред (главен клон)
След всички фиксирания клонът „master“ има следните файлове:
Здравей свят.py
Прочети ме.текст
И клонът "развитие" има следните файлове:
Здравей свят.py
информация.текст
Сравняване на главите на два клона
Можете да използвате името на клоните, за да сравните главите на два клона:
$ git diff master ... разработкаdiff --git a / hello_world.py b / hello_world.py
индекс e27f806… 3899ed3 100644
--- a / hello_world.py
+++ б / здравей_свят.py
@@ -2,7 +2,7 @@
def main ():
print ("Първо Здравей!")
- print ("Второ Здравейте!")
-
+ print ("Клонът за развитие казва Hello")
+ print ("Клонът за развитие казва Hello Hello отново")
ако __name__ == "__main__":
главен ()
diff --git a / info.txt b / информация.текст
нов файлов режим 100644
индекс 0000000 ... 0ab52fd
--- / dev / null
+++ б / информация.текст
@@ -0,0 +1 @@
+Нова информация
diff --git a / readme.txt b / readme.текст
изтрит файлов режим 100644
индекс e29c296 ... 0000000
--- а / readme.текст
+++ / dev / null
@@ -1,2 +0,0 @@
-1 Първи ред на readme.текст
-2 Втори ред на readme.текст
Командата diff рекурсивно разглежда промените. Той е изпълнил следните разлики:
diff -git a / hello_world.py b / hello_world.py
diff -git a / info.txt b / информация.текст
diff -git a / readme.txt b / readme.текст
Тук „a“ означава „master“ клон, а „b“ означава клон за развитие. 'A' винаги се присвоява на първия параметър, а 'b' на втория параметър. / Dev / null означава, че клонът няма файла.
Сравнение между комитите
В нашия пример клонът „master“ има следните фиксирания:
$ git статусНа клона майстор
няма нищо за ангажиране, работната директория е чиста
$ git log --oneline
caa0ddd C06: Модифицирано четене.txt за добавяне на втори ред (главен клон)
efaba94 C03: Добавена е readme.txt (главен клон)
ee60eac C01: Модифициран hello_world.py за добавяне на втори здравей (главен клон)
22b4bf9 C00: Добавен hello_world.py (главен клон)
Клонът за развитие има следните ангажименти:
$ git статусОтносно развитието на клоновете
няма нищо за ангажиране, работната директория е чиста
$ git log --oneline
df3a4ee C05: Добавена информация.txt (клон за развитие)
0f0abb8 C04: Модифициран hello_world.py за добавяне на клон за развитие казва отново Здравейте (клон за развитие)
3f611a0 C02: Модифициран hello_world.py за добавяне на клон за развитие казва Hello (клон за развитие)
22b4bf9 C00: Добавен hello_world.py (главен клон)
Да предположим, че искаме да сравним hello_world.py за C01 и C02 ангажименти. Можете да използвате хешовете за сравнение:
$ git diff ee60eac: hello_world.py 3f611a0: здравей_свят.pydiff --git a / ee60eac: hello_world.py b / 3f611a0: здравей_свят.py
индекс e27f806… 72a178d 100644
--- a / ee60eac: здравей_свят.py
+++ b / 3f611a0: здравей_свят.py
@@ -2,7 +2,7 @@
def main ():
print ("Първо Здравей!")
- print ("Второ Здравейте!")
+ print ("Клонът за развитие казва Hello")
ако __name__ == "__main__":
главен ()
Можете да използвате същия принцип и за сравняване на ангажименти в същия клон.
Инструменти за визуално обединяване
Разглеждането на текстови сравнения може да бъде трудно. Ако настроите Git difftool с приложение за визуално обединяване като DiffMerge или BeyondCompare, ще можете да видите разликите по-добре.
Допълнително проучване:
- Git Diff документация
- Документация на Git DiffTool
- Настройка на DiffMerge с DiffTool
- BeyondCompare Setup с DiffTool
Препратки:
- Git Tutorial: Diff and Merge Tools, YouTube
- http: // coding4streetcred.com / blog / post / configure-diffmerge-for-your-git-difftool
- http: // gitbaby.com / how-to-diff-one-file-to-an-arbitrar-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 / сравнение-два клона-в-git
- https: // veerasundar.com / blog / 2011/06 / git-tutorial-comparing-files-with-diff /
- https: // www.софтуер за скутери.com / функции.php
- https: // www.софтуер за скутери.com / поддръжка.php?zz = kb_vcs