Czy GitHub może pokazać historię zmian dokonanych w jednym pliku w postaci łatki?


89

Jeśli to zrobisz git log --patch -- path/to/file, otrzymasz historię pliku wraz z różnicą wszystkich zmian wprowadzonych w nim z każdym zatwierdzeniem, na przykład:

$ 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

Chcę mieć możliwość uzyskania tego samego rodzaju formatu za pomocą interfejsu internetowego GitHub (nie wiersza poleceń) i chcę, aby link został wysłany do kogoś innego bez kodu.


Widok porównania daje coś zbliżonego do tego, czego szukasz, ale niestety nie jest to pojedynczy plik.

2
Jeśli zgłosisz żądanie funkcji, być może zespół programistów GitHub to doda.

Odpowiedzi:


84

Poniższy adres URL pokaże wszystkie zatwierdzenia pojedynczego pliku w formacie podobnym do git log -p:

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

...gdzie:

  • <username> to nazwa użytkownika osoby, która jest właścicielem repozytorium
  • <project> to nazwa repozytorium
  • <branch> może być „mistrzem” lub inną gałęzią
  • <path/to/file> mam nadzieję, że nie wymaga wyjaśnień

Wybierając (nieco) losowo, oto przykład z repozytorium vim-fugitive .


+1. Więcej tych Commits API: develop.github.com/p/commits.html (w sekcji API GitHub develop.github.com )
VonC

17
To jest ścieżka / do / pliku dziennika git. Chcę git log -p ścieżka / do / pliku.
ma11hew28

1
Pokazuje tylko najnowszą aktualizację, a nie historię aktualizacji.
Gerry

4
Nie wiem, dlaczego głosowano w ten sposób. Myślę, że ludzie nie czytają dokładnie pytania. Ta odpowiedź nie zawiera listy różnic, o git log --patch -- path/to/filektóre prosił OP.
jcoffland

1
@jcoffland jest pozytywnie oceniana, ponieważ większość ludzi takich jak ja uważa to za pomocne i właśnie tego szukamy, pomijając jednak pytanie operatora.
mr5,

49

Na podstawie powyższych odpowiedzi i moich własnych prób znalezienia dokładnie tej funkcji wydaje się, że poprawna odpowiedź na to pytanie brzmi: nie .

Edycja: zanim oddasz głos, może spróbuj udowodnić, że się mylę. Czasami prawidłowa odpowiedź nie jest tym, co chcesz usłyszeć.


1
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienie, zostaw komentarz pod jego postem - zawsze możesz komentować własne posty, a gdy zdobędziesz wystarczającą reputację , będziesz mógł komentować każdy post .
indubitablee

18
Ta odpowiedź jest zarówno konkretna, jak i dokładna, w przeciwieństwie do pozostałych dwóch odpowiedzi, które nawet nie uwzględniają tego, o co chodziło w pytaniu.
jhk

5
To jest poprawna odpowiedź. Github nie ma możliwości pokazania wyników łatki razem z logami dla pojedynczego pliku, tak jak robi to git log -p - file
nohat

4
pozostałe 2 odpowiedzi są nieprawidłowe. ta odpowiedź zaoszczędziła mi czasu i frustracji.
Schien

3
„To nie daje odpowiedzi na pytanie”. Jasne, i taki, który zaoszczędził mi czas. Dzięki jhk.
ChrisJJ

34

Alternatywą dla bezpośredniej odpowiedzi URL (która przy okazji jest całkowicie poprawna) przy użyciu interfejsu GitHub jest:

  • Kliknij widok „Źródło”
  • Przełącz się na wybraną gałąź
  • Szukaj żądanego pliku, aż dojdziesz do rzeczywistego widoku źródła pliku
  • Kliknij „historię” w prawym górnym rogu

12
To również nie daje w rzeczywistości tego, czego szukał oryginalny plakat. Chce wyjścia łatki, takiej samej, jaką dostałby git log -p -- file. To, co pokazałeś, to tylko dziennik konkretnego pliku, na przykład git log -- filebez łatek różnicowych.

-3

Jeśli używasz Linuksa, zainstaluj TIG jako:

sudo apt-get install tig

i wtedy,

ścieżka tig / do / pliku /

Pokaże ci wszystkie zatwierdzenia i ich zmiany

Talat Parwez

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.