Kann GitHub den Verlauf von Änderungen an einer Datei in Patch-Form anzeigen?

88

Wenn Sie dies tun git log --patch -- path/to/file, erhalten Sie den Verlauf der Datei zusammen mit einem Unterschied aller Änderungen, die bei jedem Commit daran vorgenommen wurden, wie folgt:

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

commit 20351bb06bf4d32ef3d1a6849d01636f6593339f
Author: Ramkumar Ramachandra <[email protected]>
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 <[email protected]>
    Signed-off-by: Junio C Hamano <[email protected]>

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 <[email protected]>
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 <[email protected]>
    Signed-off-by: Junio C Hamano <[email protected]>

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

Ich möchte in der Lage sein, dasselbe Format über die GitHub-Weboberfläche (nicht über die Befehlszeile) zu erhalten , und ich möchte, dass ein Link ohne den Code an eine andere Person gesendet wird.

ma11hew28
quelle
Mit der Vergleichsansicht erhalten Sie etwas, das dem nahe kommt, wonach Sie suchen, aber leider nicht für eine einzelne Datei.
2
Wenn Sie eine Funktionsanforderung dafür stellen, wird diese möglicherweise vom GitHub-Entwicklerteam hinzugefügt.

Antworten:

83

Die folgende URL zeigt alle Commits für eine einzelne Datei in einem ähnlichen Format an git log -p:

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

...wo:

  • <username> ist der Benutzername der Person, die das Repo besitzt
  • <project> ist der Repo-Name
  • <branch> kann 'Master' oder ein anderer Zweig sein
  • <path/to/file> ist hoffentlich selbsterklärend

Hier ist ein Beispiel aus dem vim-flüchtigen Repo, das (etwas) zufällig ausgewählt wird .

Tim Henigan
quelle
+1. Weitere dieser Commits-APIs: Develop.github.com/p/commits.html (im Abschnitt GitHub-API Develop.github.com )
VonC
17
Das ist Git-Protokollpfad / zu / Datei. Ich möchte Git-Protokoll -p Pfad / zu / Datei.
ma11hew28
1
Es wird lediglich das neueste Update angezeigt, nicht der Verlauf der Updates.
Gerry
4
Ich weiß nicht, warum dies abgestimmt wird. Ich denke, die Leute lesen die Frage nicht sorgfältig. Diese Antwort gibt Ihnen keine Liste von Unterschieden, nach git log --patch -- path/to/filedenen das OP gefragt hat.
Jcoffland
1
@jcoffland es wird positiv bewertet, weil die meisten Leute wie ich dies hilfreich finden und genau das ist, wonach wir suchen, ohne die Frage der Operation zu berücksichtigen.
Mr5 5.
49

Basierend auf den obigen Antworten und meinen eigenen Versuchen, genau diese Funktion zu finden, scheint die richtige Antwort auf diese Frage Nein zu sein .

Bearbeiten: Bevor Sie abstimmen, versuchen Sie vielleicht, mir das Gegenteil zu beweisen. Manchmal ist die richtige Antwort nicht das, was Sie hören möchten.

jhk
quelle
1
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren .
Indubitablee
18
Diese Antwort ist sowohl spezifisch als auch genau, im Gegensatz zu den beiden anderen Antworten, bei denen nicht einmal anerkannt wird, was die Frage gestellt hat.
JHK
5
Dies ist die richtige Antwort. Github hat keine Möglichkeit, Patch-Ergebnisse zusammen mit den Protokollen für eine einzelne Datei
anzuzeigen,
4
Die anderen 2 Antworten sind falsch. Diese Antwort ersparte mir Zeit und Frust.
Schien
3
"Dies gibt keine Antwort auf die Frage." Sicher, und eine, die mir Zeit gespart hat. Danke jhk.
ChrisJJ
34

Eine Alternative zur direkten URL-Antwort (die übrigens vollkommen korrekt ist) über die GitHub-Oberfläche ist:

  • Klicken Sie auf die Ansicht 'Quelle'
  • Wechseln Sie zu einem gewünschten Zweig
  • Suchen Sie nach der gewünschten Datei, bis Sie zur eigentlichen Quellansicht der Datei gelangen
  • Klicken Sie oben rechts auf "Verlauf"
Xubin
quelle
12
Dies gibt auch nicht wirklich das, wonach das Originalplakat sucht. Er möchte eine Patch-Ausgabe, genau wie das, was er bekommen würde git log -p -- file. Was Sie gezeigt haben, ist nur das Protokoll für eine bestimmte Datei git log -- file, beispielsweise ohne die Diff-Patches.
-3

Wenn Sie unter Linux arbeiten, installieren Sie TIG wie folgt :

sudo apt-get install tig

und dann,

WIG-Pfad / zu / Datei /

Es zeigt Ihnen alle Commits und ihre jeweiligen Änderungen

Talat Parwez

Talat Parwez
quelle