Tutorial Git - diff per confrontare le differenze

  1. Controllare le differenze tra la copia di lavoro e il repository
  2. Strumenti esterni di git diff
  3. Controllare le differenze tra l’area di staging e il repository

Vi mostreremo come visualizzare le modifiche o le differenze tra la vostra copia di lavoro, ovvero i file su cui state lavorando nei file principali, e il repository. Nella seconda parte, vi mostreremo come fare un confronto tra l’area di staging e il repository.

Controllare le differenze tra la copia di lavoro e il repository

Una volta salvato un file, questo file su una copia di lavoro è diverso da quello del nostro repository. Ma come vediamo esattamente questi cambiamenti? Perché a volte abbiamo fatto alcune modifiche ad un file e vogliamo visualizzare quello nel repository e questo accade spesso quando si lavora con il codice, perché si vuole sapere esattamente le modifiche che si stanno facendo e come questo influirà sul progetto principale.

Quindi la prima cosa che possiamo fare è controllare lo git status e si trova un file modificato, il che significa che è diverso da quello del progetto principale o del repository principale. Se si digita git diff e si preme invio, si vedranno le differenze.

$ git diff
diff --git a/test1.txt b/test1.txt
index e1dd8e3..448ad04 100644
--- a/test1.txt
+++ b/test1.txt
@@ -1,2 +1,2 @@
-This is my first Git repository.
-New added text.
\ No newline at end of file
+This was my first Git repository.
+This line is updated.
\ No newline at end of file

Il testo rosso nella bash git mostra cosa c’è nel repository e quello verde indica come il testo è stato modificato.

Se hai più file aggiornati dopo l’ultimo commit, git elencherà le differenze dei file uno per uno.

Strumenti esterni di git diff

Se non ti sei abituato ad usare lo strumento diff predefinito, puoi configurare lo difftool su quello che preferisci.

Ti mostreremo come configurare kdiff3 come strumento diff, merge di git.

Cambiare la directory dei file .gitconfig

Nel sistema operativo Windows, aprire il file .gitconfig nella directory C:\Users\username e aggiungere il testo al file,

[diff]
    tool = kdiff3
[difftool "kdiff3"]
    path = "C:/Program Files/KDiff3/kdiff3.exe"
    trustExitCode = false
[difftool]
    prompt = false
[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = "C:/Program Files/KDiff3/kdiff3.exe"
    trustExitCode = false
[mergetool]
    keepBackup = false

Qui, path è il percorso installato di kdiff3, e potrebbe essere diverso dalla vostra parte.

Configurare difftool tramite git bash

Si può configurare il difftool o mergetool usando anche il comando in git bash.

git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false

Ha fatto fondamentalmente la stessa cosa che si fa modificando il contenuto del file .gitconfig.

Controllare le differenze tra l’area di staging e il repository

Si potrebbe usare il comando git difftool per rivedere la differenza di file tra quello nella copia di lavoro e quello nel repository.

Git Difftool-kdiff3

git diff mostra la differenza tra la copia di lavoro e il repository, e dopo che il file è già stato aggiunto all’area di staging, git diff non mostrerà alcuna differenza di questo file perché non confronta l’area di staging con il repository, ecco perché sembra che tutto sia aggiornato, anche se questo file è ancora diverso da quello nel vostro repository.

Il comando giusto per confrontare lo staging sono e il repository è quello di aggiungere l’opzione --staged dietro git diff.

$ git diff --staged
diff --git a/test1.txt b/test1.txt
index e1dd8e3..448ad04 100644
--- a/test1.txt
+++ b/test1.txt
@@ -1,2 +1,2 @@
-This is my first Git repository.
-New added text.
\ No newline at end of file
+This was my first Git repository.
+This line is updated.
\ No newline at end of file