Nästan alla versionskontrollsystem har förgreningsalternativ. Men Git är känt för sina snabba förgreningsmöjligheter. Git -grenar är lätta. Så prestationspåföljderna för förgreningar är minimala och utvecklingsteam uppmuntras att förgrena sig och slå ihop så mycket som möjligt. Men när du arbetar med flera grenar är det viktigt att kunna jämföra och kontrastera skillnaderna. I denna handledning kommer vi att gå igenom ett arbetsflöde för att se hur vi kan jämföra olika grenar och åtaganden. Låt oss först ställa in följande situation:
C00 => C01 => C03 => C06 (master)
C02 => C04 => C05 (utveckling)
Följande steg togs:
- C00: Lagt till hello_world.py (huvudgren)
- - Skapade utvecklingsgrenen
- C01: Modifierad hello_world.py för att lägga till andra hej (huvudgren)
- C02: Modifierad hello_world.py för att lägga till utvecklingsgren säger Hej (utvecklingsgren)
- C03: Tillagd readme.txt (huvudgren)
- C04: Modifierad hello_world.py för att lägga till Development branch säger Hej igen (utvecklingsgren)
- C05: Lade till info.txt (utvecklingsgren)
- C06: Ändrad readme.txt för att lägga till andra raden (huvudgren)
Efter alla åtaganden har 'master' -grenen följande filer:
hej_värld.py
readme.txt
Och 'utvecklings' -grenen har följande filer:
hej_värld.py
info.txt
Jämför huvudet på två grenar
Du kan använda grenarnas namn för att jämföra huvuden på två grenar:
$git diffmästare..utvecklingdiff --gåtill/hello_world.py b/hej_värld.py
index e27f806..3899ed3100644
---till/hej_värld.py
+++ b/hej_värld.py
@@-2,7+2,7 @@
def main():
skriva ut('Första Hej!')
- skriva ut('Andra Hallå!')
-
+ skriva ut('Utvecklingsgren säger hej')
+ skriva ut('Utvecklingsgren säger hej igen')
om__namn__ =='__huvud__':
huvud()
diff --gåtill/info.txt b/info.txt
nyfilläge100644
index 0000000..0ab52fd
--- /dev/null
+++ b/info.txt
@@-0,0+1 @@
+Ny information
diff --gåtill/readme.txt b/readme.txt
raderadefilläge100644
index e29c296..0000000
---till/readme.txt
+++/dev/null
@@-1,2+0,0 @@
-1Första raden i readme.txt
-2Andra raden i readme.txt
Diff -kommandot tittar rekursivt på ändringarna. Det har kört följande skillnader:
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
Här står 'a' för 'master' -grenen och 'b' står för utvecklingsgrenen. 'A' tilldelas alltid den första parametern och 'b' till den andra parametern. /Dev /null betyder att filialen inte har filen.
Jämförelse mellan åtaganden
I vårt exempel har 'master' -grenen följande åtaganden:
$git -statusPå filialmästare
inget att göra, arbetskatalogen ren
$git -logg --en linje
caa0ddd C06: Ändrad readme.txt för att lägga till andra raden(huvudgren)
efaba94 C03: Tillagd readme.txt(huvudgren)
ee60eac C01: Ändrad hello_world.py för att lägga till andra hej(huvudgren)
22b4bf9 C00: Tillagd hello_world.py(huvudgren)
Utvecklingsgrenen har följande åtaganden:
$git -statusOm filialutveckling
inget att göra, arbetskatalogen ren
$git -logg --en linje
df3a4ee C05: Tillagd info.txt(utvecklingsgren)
0f0abb8 C04: Ändrad hello_world.py för att lägga till Development branch säger Hej igen(utvecklingsgren)
3f611a0 C02: Ändrad hello_world.py för att lägga till Development branch säger Hej(utvecklingsgren)
22b4bf9 C00: Tillagd hello_world.py(huvudgren)
Antag att vi vill jämföra hello_world.py för C01- och C02 -åtaganden. Du kan använda hash för att jämföra:
$git diffee60eac: hello_world.py 3f611a0: hello_world.pydiff --gåtill/ee60eac: hello_world.py b/3f611a0: hello_world.py
index e27f806..72a178d100644
---till/ee60eac: hello_world.py
+++ b/3f611a0: hello_world.py
@@-2,7+2,7 @@
def main():
skriva ut('Första Hej!')
- skriva ut('Andra Hallå!')
+ skriva ut('Utvecklingsgren säger hej')
om__namn__ =='__huvud__':
huvud()
Du kan använda samma princip för att jämföra åtaganden inom samma gren också.
Visual Merge -verktyg
Att titta på textbaserade jämförelser kan vara svårt. Om du ställer in Git difftool med en visuell kopplingsapplikation som DiffMerge eller BeyondCompare , kommer du att kunna se skillnader bättre.
Ytterligare studier:
- Git Diff -dokumentation
- Git DiffTool -dokumentation
- DiffMerge Setup med DiffTool
- BeyondCompare Setup med DiffTool
Referenser:
- Git -självstudier: Diff- och Merge -verktyg , 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