Bijna alle versiebeheersystemen hebben vertakkingsopties. Maar Git staat bekend om zijn snelle vertakkingsmogelijkheden. Git-takken zijn lichtgewicht. Dus de prestatiestraffen voor vertakking zijn minimaal en ontwikkelteams worden aangemoedigd om zoveel mogelijk te vertakken en samen te voegen. Maar als je met meerdere vestigingen werkt, is het belangrijk om de verschillen te kunnen vergelijken en contrasteren. In deze tutorial zullen we een workflow doorlopen om te zien hoe we verschillende branches en commits kunnen vergelijken.Laten we eerst de volgende situatie instellen:
C00 => C01 => C03 => C06 (master)
\
C02 => C04 => C05 (ontwikkeling)
De volgende stappen zijn genomen:
- C00: Hallo_wereld toegevoegd Added.py (hoofdtak)
- - De ontwikkelingstak gemaakt
- C01: Gewijzigd hello_world.py om tweede hallo toe te voegen (master branch)
- C02: Gewijzigd hello_world.py om Ontwikkelingstak toe te voegen zegt Hallo (ontwikkelingstak)
- C03: Leesmij toegevoegd.txt (hoofdtak)
- C04: Gewijzigd hello_world.py om Ontwikkelingstak toe te voegen zegt Hallo opnieuw (ontwikkelingstak)
- C05: Info toegevoegd.txt (ontwikkelingstak)
- C06: Gewijzigd leesmij-bestand.txt om tweede regel toe te voegen (master branch)
Na alle commits heeft de 'master' branch de volgende bestanden:
Hallo Wereld.py
Leesmij.tekst
En de tak 'ontwikkeling' heeft de volgende bestanden:
Hallo Wereld.py
info.tekst
De hoofden van twee takken vergelijken
Je kunt de naam van de takken gebruiken om de koppen van twee takken te vergelijken:
$ git diff master… ontwikkelingdiff --git a/hello_world.py b/hello_world.py
index e27f806… 3899ed3 100644
--- a/hallo_wereld.py
+++ b/hallo_wereld.py
@@ -2,7 +2,7 @@
def hoofd():
print("Eerste Hallo!")
- print("Tweede Hallo!")
-
+ print ("Ontwikkelingstak zegt hallo")
+ print("Ontwikkelingstak zegt weer hallo")
if __name__ == "__main__":
hoofd()
diff --git a/info.txt b/info.tekst
nieuwe bestandsmodus 100644
index 0000000… 0ab52fd
--- /dev/null
+++ b/info.tekst
@@ -0,0 +1 @@
+Nieuwe informatie
diff --git a/readme.txt b/leesmij.tekst
verwijderde bestandsmodus 100644
index e29c296… 0000000
--- een/leesmij.tekst
+++ /dev/null
@@ -1,2 +0,0 @@
-1 Eerste regel van readme.tekst
-2 Tweede regel van readme.tekst
Het diff-commando kijkt recursief naar de wijzigingen. Het heeft de volgende diffs uitgevoerd:
diff -git a/hello_world.py b/hello_world.py
diff -git a/info.txt b/info.tekst
diff -git a/readme.txt b/leesmij.tekst
Hier staat 'a' voor de 'master'-tak en 'b' staat voor de ontwikkelingstak. De 'a' wordt altijd toegewezen aan de eerste parameter en 'b' aan de tweede parameter. De /dev/null betekent dat de branch het bestand niet heeft.
Vergelijken tussen commits
In ons voorbeeld heeft de 'master' branch de volgende commits:
$ git-statusOp branch master
niets te committen, werkmap opschonen
$ git log --oneline
caa0ddd C06: Gewijzigd leesmij.txt om tweede regel toe te voegen (master branch)
efaba94 C03: Leesmij toegevoegd.txt (hoofdtak)
ee60eac C01: Gewijzigd hello_world.py om tweede hallo toe te voegen (master branch)
22b4bf9 C00: Hallo_world toegevoegd Added.py (hoofdtak)
De ontwikkelingstak heeft de volgende commits:
$ git-statusOver brancheontwikkeling
niets te committen, werkmap opschonen
$ git log --oneline
df3a4ee C05: Info toegevoegd.txt (ontwikkelingstak)
0f0abb8 C04: Gewijzigd hello_world.py om Ontwikkelingstak toe te voegen zegt Hallo opnieuw (ontwikkelingstak)
3f611a0 C02: Gewijzigd hello_world.py om Ontwikkelingstak toe te voegen zegt Hallo (ontwikkelingstak)
22b4bf9 C00: Hallo_world toegevoegd Added.py (hoofdtak)
Stel dat we de hello_world willen vergelijken.py voor C01 en C02 commits. U kunt de hashes gebruiken om te vergelijken:
$ git diff ee60eac:hello_world.py 3f611a0:hallo_wereld.pydiff --git a/ee60eac:hello_world.py b/3f611a0:hallo_wereld.py
index e27f806… 72a178d 100644
--- a/ee60eac:hallo_wereld.py
+++ b/3f611a0:hallo_wereld.py
@@ -2,7 +2,7 @@
def hoofd():
print("Eerste Hallo!")
- print("Tweede Hallo!")
+ print ("Ontwikkelingstak zegt hallo")
if __name__ == "__main__":
hoofd()
Je kunt hetzelfde principe ook gebruiken om commits binnen dezelfde branch te vergelijken.
Hulpmiddelen voor visuele samenvoeging
Kijken naar op tekst gebaseerde vergelijkingen kan moeilijk zijn. Als je de Git difftool instelt met een visuele samenvoegtoepassing zoals DiffMerge of BeyondCompare, zul je de verschillen beter kunnen zien.
Verdere studie:
- Git Diff-documentatie
- Git DiffTool-documentatie
- DiffMerge-configuratie met DiffTool
- BeyondCompare instellen met DiffTool
Referenties:
- Git-zelfstudie: Hulpmiddelen voor diff en samenvoegen, YouTube
- http://coding4streetcred.com/blog/post/configure-diffmerge-for-your-git-difftool
- http://gitbaby.com/how-to-diff-one-file-naar-een-willekeurige-versie-in-git.html
- https://git-scm.com/book/nl/v2/Git-Branching-Basic-Branching-and-Merging
- https://git-scm.com/book/id/v2/Git-Branching-Branches-in-een-notendop
- 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-bestanden-met-diff-vergelijken/
- https://www.scootersoftware.com/functies.php
- https://www.scootersoftware.com/support.php?zz=kb_vcs