Quasi tutti i sistemi di controllo della versione hanno opzioni di ramificazione. Ma Git è noto per le sue capacità di ramificazione rapida. I rami di Git sono leggeri. Quindi le penalizzazioni 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 hello (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 che dice di nuovo Hello (ramo di sviluppo)
- C05: Aggiunto info.txt (ramo sviluppo)
- C06: modificato readme.txt per aggiungere la seconda riga (ramo principale)
Dopo tutti i commit, il ramo 'master' ha i seguenti file:
ciao_mondo.py
leggimi.txt
E il ramo 'sviluppo' ha i seguenti file:
ciao_mondo.py
info.txt
Confrontando le teste di due rami
Puoi usare il nome dei rami per confrontare i capi di due rami:
$git diffmaestro..sviluppodifferenza --andarea/ciao_mondo.py b/ciao_mondo.py
indice e27f806..3899ed3100644
---a/ciao_mondo.py
+++ b/ciao_mondo.py
@@-2,7+2,7 @@
def principale():
Stampa('Primo ciao!')
- Stampa('Secondo Ciao!')
-
+ stampa('Il ramo di sviluppo saluta')
+ stampa('Il ramo di sviluppo saluta di nuovo')
Se__nome__ =='__principale__':
principale()
differenza --andarea/info.txt b/info.txt
nuovofilemodalità100644
indice 0000000..0ab52fd
--- /sviluppo/nullo
+++ b/info.txt
@@-0,0+1 @@
+Nuove informazioni
differenza --andarea/leggimi.txt b/leggimi.txt
cancellatofilemodalità100644
indice e29c296..0000000
---a/leggimi.txt
+++/sviluppo/nullo
@@-1,2+0,0 @@
-1Prima riga di readme.txt
-2Seconda riga di readme.txt
Il comando diff sta esaminando ricorsivamente le modifiche. Ha eseguito le seguenti differenze:
diff –git a/ciao_mondo.py b/ciao_mondo.py
diff –git a/info.txt b/info.txt
diff –git a/readme.txt b/readme.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:
$stato gitSul maestro di filiale
niente da eseguire, pulizia della directory di lavoro
$git log --una linea
caa0ddd C06: readme.txt modificato 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:
$stato gitSullo sviluppo del ramo
niente da eseguire, pulizia della directory di lavoro
$git log --una linea
df3a4ee C05: Aggiunto info.txt(ramo di sviluppo)
0f0abb8 C04: modificato hello_world.py per aggiungere il ramo di sviluppo che 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 i commit C01 e C02. Puoi usare gli hash per confrontare:
$git diffee60eac:ciao_mondo.py 3f611a0:ciao_mondo.pydifferenza --andarea/ee60eac:hello_world.py b/3f611a0:ciao_mondo.py
indice e27f806..72a178d100644
---a/ee60eac:ciao_mondo.py
+++ b/3f611a0:ciao_mondo.py
@@-2,7+2,7 @@
def principale():
Stampa('Primo ciao!')
- Stampa('Secondo Ciao!')
+ stampa('Il ramo di sviluppo saluta')
Se__nome__ =='__principale__':
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 configuri Git difftool con un'applicazione di unione visiva come DiffUnisci o Al di là del confronto , 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 Unisci , 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/9836489/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