GitHub può mostrare la cronologia delle modifiche apportate a un file sotto forma di patch?


88

Se lo fai git log --patch -- path/to/file, otterrai la cronologia del file insieme a un diff di tutte le modifiche apportate ad ogni commit, in questo modo:

$ git log --patch -- git-rebase.sh

commit 20351bb06bf4d32ef3d1a6849d01636f6593339f
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Sat Jun 15 18:43:26 2013 +0530

    rebase: use 'git stash store' to simplify logic

    rebase has no reason to know about the implementation of the stash.  In
    the case when applying the autostash results in conflicts, replace the
    relevant code in finish_rebase () to simply call 'git stash store'.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..17be392 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -153,11 +153,8 @@ finish_rebase () {
                then
                        echo "$(gettext 'Applied autostash.')"
                else
-                       ref_stash=refs/stash &&
-                       >>"$GIT_DIR/logs/$ref_stash" &&
-                       git update-ref -m "autostash" $ref_stash $stash_sha1 ||
-                       die "$(eval_gettext 'Cannot store $stash_sha1')"
-
+                       git stash store -m "autostash" -q $stash_sha1 ||
+                       die "$(eval_gettext "Cannot store \$stash_sha1")"
                        gettext 'Applying autostash resulted in conflicts.
 Your changes are safe in the stash.
 You can run "git stash pop" or "git stash drop" it at any time.

commit 2e6e276decde2a9f04fc29bce734a49d3ba8f484
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Fri Jun 14 18:47:52 2013 +0530

    rebase: use peel_committish() where appropriate

    The revisions specified on the command-line as <onto> and <upstream>
    arguments could be of the form :/quuxery; so, use peel_committish() to
    resolve them.  The failing tests in t/rebase and t/rebase-interactive
    now pass.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..6987b9b 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -434,7 +434,7 @@ then
                shift
                ;;
        esac
-       upstream=`git rev-parse --verify "${upstream_name}^0"` ||
+       upstream=$(peel_committish "${upstream_name}") ||
        die "$(eval_gettext "invalid upstream \$upstream_name")"
        upstream_arg="$upstream_name"
 else
@@ -470,7 +470,7 @@ case "$onto_name" in
        fi
        ;;
 *)
-       onto=$(git rev-parse --verify "${onto_name}^0") ||
+       onto=$(peel_committish "$onto_name") ||
        die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
        ;;
 esac

Voglio essere in grado di ottenere lo stesso tipo di formato utilizzando l'interfaccia web di GitHub (non la riga di comando) e voglio un collegamento da inviare a qualcun altro senza il codice.


La visualizzazione Confronta ti offre qualcosa di simile a ciò che stai cercando, ma sfortunatamente non è per un singolo file.

2
Se effettui una richiesta di funzionalità, forse il team di sviluppo di GitHub la aggiungerà.

Risposte:


83

Il seguente URL mostrerà tutti i commit per un singolo file in un formato simile a git log -p:

http://github.com/<username>/<project>/commits/<branch>/<path/to/file>

...dove:

  • <username> è il nome utente della persona che possiede il repository
  • <project> è il nome del repo
  • <branch> può essere "master" o qualsiasi altro ramo
  • <path/to/file> si spera si spieghi da sé

Scegliendo in modo (piuttosto) casuale, ecco un esempio dal repository vim-fugitive .


+1. Altre di queste API commit: Develop.github.com/p/commits.html (nella sezione API GitHub Develop.github.com )
VonC

17
Questo è il percorso del registro git / a / file. Voglio git log -p path / to / file.
ma11hew28

1
Tutto ciò che fa è mostrare l'ultimo aggiornamento, non una cronologia degli aggiornamenti.
Gerry

4
Non so perché questo si alzi votato. Immagino che le persone non leggano attentamente la domanda. Questa risposta non ti dà un elenco di differenze come quello git log --patch -- path/to/fileche è stato chiesto dall'OP.
jcoffland

1
@jcoffland è stato votato verso l'alto perché la maggior parte delle persone come me lo trova utile e questo è esattamente ciò che stiamo cercando, ignorando però la domanda dell'operazione.
mr5

49

Sulla base delle risposte precedenti e dei miei tentativi di trovare questa caratteristica esatta, sembra che la risposta corretta a questa domanda sia no .

Modifica: prima di votare, forse prova a dimostrare che mi sbaglio. A volte la risposta corretta non è quella che vuoi sentire.


1
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post: puoi sempre commentare i tuoi post e, una volta che avrai una reputazione sufficiente, potrai commentare qualsiasi post .
indubitabile

18
Questa risposta è sia specifica che accurata, a differenza delle altre due risposte che non riescono nemmeno a riconoscere ciò che la domanda stava chiedendo.
jhk

5
Questa è la risposta corretta. Github non ha un modo per mostrare i risultati della patch insieme ai log per un singolo file nel modo in cui git log -p - file fa
nohat

4
le altre 2 risposte non sono corrette. questa risposta mi ha fatto risparmiare tempo e frustrazione.
Schien

3
"Questo non fornisce una risposta alla domanda." Certo, e uno che mi ha fatto risparmiare tempo. Grazie jhk.
ChrisJJ

34

Un'alternativa alla risposta URL diretta (che BTW è perfettamente corretta) utilizzando l'interfaccia di GitHub è:

  • Fare clic sulla visualizzazione "Fonte"
  • Passa a un ramo desiderato
  • Cerca il file che desideri finché non arrivi alla visualizzazione sorgente effettiva del file
  • Fai clic su "cronologia" nell'angolo in alto a destra

12
Questo anche in realtà non dà quello che il manifesto originale sta cercando. Vuole l'output della patch, lo stesso che otterrebbe con git log -p -- file. Quello che hai mostrato è solo il log per un particolare file, come git log -- file, senza le patch diff.

-3

Se sei su Linux, installa TIG come:

sudo apt-get install tig

e poi,

tig percorso / a / file /

Ti mostrerà tutti i commit e le rispettive modifiche

Talat Parwez

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.