Quasi tutti i sistemi di controllo della versione hanno opzioni di ramificazione. Ma Git è noto per le sue capacità di ramificazione veloce. I rami di Git sono leggeri. Quindi le penalità in termini di prestazioni per il branching sono minime e i team di sviluppo sono incoraggiati a branch e unire il più possibile. Ma quando lavori con più rami, è importante essere in grado di confrontare e contrastare le differenze. In questo tutorial, esamineremo un flusso di lavoro per vedere come possiamo confrontare vari rami e commit.Per prima cosa impostiamo la seguente situazione:
C00 => C01 => C03 => C06 (principale)
\
C02 => C04 => C05 (sviluppo)
Sono stati effettuati i seguenti passaggi:
- C00: Aggiunto hello_world.py (ramo principale)
- - Creato il ramo di sviluppo
- C01: Modificato hello_world.py per aggiungere un secondo ciao (ramo principale)
- C02: Modificato hello_world.py per aggiungere il ramo di sviluppo dice Hello (ramo di sviluppo)
- C03: Aggiunto readme.txt (ramo principale)
- C04: Modificato hello_world.py per aggiungere il ramo di sviluppo dice di nuovo Hello (ramo di sviluppo)
- C05: Aggiunte informazioni.txt (ramo di sviluppo)
- C06: Leggimi modificato.txt per aggiungere la seconda riga (ramo principale)
Dopo tutti i commit, il ramo 'master' ha i seguenti file:
Ciao mondo.pi
leggimi.TXT
E il ramo "sviluppo" ha i seguenti file:
Ciao mondo.pi
Informazioni.TXT
Confrontando le teste di due rami
Puoi usare il nome dei rami per confrontare le teste di due rami:
$ git diff master… sviluppodiff --git a/hello_world.py b/ciao_mondo.pi
indice e27f806… 3899ed3 100644
--- a/ciao_mondo.pi
+++ b/ciao_mondo.pi
@@ -2,7 +2,7 @@
def principale():
print("Primo ciao!")
- print("Secondo ciao!")
-
+ print("Il ramo di sviluppo saluta")
+ print("Il ramo di sviluppo saluta di nuovo")
if __name__ == "__main__":
principale()
diff --git a/info.txt b/informazioni.TXT
nuova modalità file 100644
indice 0000000… 0ab52fd
--- /dev/null
+++ b/informazioni.TXT
@@ -0,0 +1 @@
+Nuova informazione
diff --git a/readme.txt b/leggimi.TXT
modalità file cancellato 100644
indice e29c296… 0000000
--- a/leggimi.TXT
+++ /dev/null
@@ -1,2 +0,0 @@
-1 Prima riga del file readme.TXT
-2 Seconda riga del readme.TXT
Il comando diff sta esaminando ricorsivamente le modifiche. Ha eseguito le seguenti differenze:
diff -git a/hello_world.py b/ciao_mondo.pi
diff -git a/info.txt b/informazioni.TXT
diff -git a/readme.txt b/leggimi.TXT
Qui 'a' sta per il ramo 'master' e 'b' sta per il ramo di sviluppo. La 'a' è sempre assegnata al primo parametro e la 'b' al secondo parametro. Il /dev/null significa che il ramo non ha il file.
Confronto tra commit
Nel nostro esempio, il ramo 'master' ha i seguenti commit:
$ git statoSul maestro di filiale
niente da eseguire, pulizia della directory di lavoro
$ git log --oneline
caa0ddd C06: Readme modificato.txt per aggiungere la seconda riga (ramo principale)
efaba94 C03: Aggiunto readme.txt (ramo principale)
ee60eac C01: modificato hello_world.py per aggiungere un secondo ciao (ramo principale)
22b4bf9 C00: Aggiunto hello_world.py (ramo principale)
Il ramo di sviluppo ha i seguenti commit:
$ git statoSullo sviluppo del ramo
niente da eseguire, pulizia della directory di lavoro
$ git log --oneline
df3a4ee C05: Aggiunte informazioni.txt (ramo di sviluppo)
0f0abb8 C04: modificato hello_world.py per aggiungere il ramo di sviluppo dice di nuovo Hello (ramo di sviluppo)
3f611a0 C02: modificato hello_world.py per aggiungere il ramo di sviluppo dice Hello (ramo di sviluppo)
22b4bf9 C00: Aggiunto hello_world.py (ramo principale)
Supponiamo di voler confrontare hello_world.py per commit C01 e C02. Puoi usare gli hash per confrontare:
$ git diff ee60eac:hello_world.py 3f611a0:ciao_mondo.pidiff --git a/ee60eac:hello_world.py b/3f611a0:ciao_mondo.pi
indice e27f806… 72a178d 100644
--- a/ee60eac:ciao_mondo.pi
+++ b/3f611a0:ciao_mondo.pi
@@ -2,7 +2,7 @@
def principale():
print("Primo ciao!")
- print("Secondo ciao!")
+ print("Il ramo di sviluppo saluta")
if __name__ == "__main__":
principale()
Puoi usare lo stesso principio anche per confrontare i commit all'interno dello stesso ramo.
Strumenti di unione visiva
Guardare i confronti basati sul testo può essere difficile. Se imposti Git difftool con un'applicazione di unione visiva come DiffMerge o BeyondCompare, sarai in grado di vedere meglio le differenze.
Ulteriori studi:
- Documentazione Git Diff
- Documentazione di Git DiffTool
- Configurazione DiffMerge con DiffTool
- Configurazione BeyondCompare con DiffTool
Riferimenti:
- Esercitazione su Git: strumenti Diff e Merge, 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/it/v2/Git-Branching-Basic-Branching-and-Merging
- https://git-scm.com/book/id/v2/Git-Branches-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/9836489/confronto-due-rami-in-git
- https://veerasundar.com/blog/2011/06/git-tutorial-comparing-files-with-diff/
- https://www.software scooter.com/caratteristiche.php
- https://www.software scooter.com/support.php?zz=kb_vcs