¿Puede GitHub mostrar el historial de cambios realizados en un archivo en forma de parche?

89

Si lo hace git log --patch -- path/to/file, obtendrá el historial del archivo junto con una diferencia de todos los cambios realizados con cada confirmación, como este:

$ 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

Quiero poder obtener el mismo tipo de formato usando la interfaz web de GitHub (no la línea de comando) , y quiero un enlace para enviar a otra persona sin el código.

ma11hew28
fuente
La vista de comparación le ofrece algo parecido a lo que está buscando, pero desafortunadamente no es para un archivo individual.
2
Si realiza una solicitud de función, tal vez el equipo de desarrollo de GitHub la agregue.

Respuestas:

84

La siguiente URL mostrará todas las confirmaciones de un solo archivo en un formato similar a git log -p:

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

...dónde:

  • <username> es el nombre de usuario de la persona propietaria del repositorio
  • <project> es el nombre del repositorio
  • <branch> puede ser 'maestro' o cualquier otra rama
  • <path/to/file> es de esperar que se explique por sí mismo

Escogiendo (algo) al azar, aquí hay un ejemplo del repositorio vim-fugitive .

Tim Henigan
fuente
+1. Más de los Commits API: develop.github.com/p/commits.html (en la sección GitHub API develop.github.com )
VonC
17
Esa es la ruta de registro de git / a / archivo. Quiero git log -p path / to / file.
ma11hew28
1
Todo lo que hace es mostrar la última actualización, no un historial de actualizaciones.
Gerry
4
No sé por qué se está votando esto. Supongo que la gente no está leyendo la pregunta con atención. Esta respuesta no le da una lista de diferencias como git log --patch -- path/to/filecuál es lo que pidió el OP.
jcoffland
1
@jcoffland está siendo votado porque la mayoría de las personas como yo lo encuentran útil y esto es exactamente lo que estamos buscando, sin tener en cuenta la pregunta de la operación.
5 de
49

Según las respuestas anteriores y mis propios intentos de encontrar esta característica exacta, parece que la respuesta correcta a esta pregunta es no .

Editar: antes de votar en contra, tal vez intente demostrar que estoy equivocado. A veces, la respuesta correcta no es la que desea escuchar.

jhk
fuente
1
Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones y, una vez que tenga suficiente reputación , podrá comentar cualquier publicación .
indubitablee
18
Esta respuesta es específica y precisa, a diferencia de las otras dos respuestas que ni siquiera reconocen lo que estaba preguntando.
jhk
5
Esta es la respuesta correcta. Github no tiene una forma de mostrar los resultados del parche junto con los registros para un solo archivo de la forma en que git log -p - file lo hace
nohat
4
las otras 2 respuestas son incorrectas. esta respuesta me ahorró tiempo y frustración.
Schien
3
"Esto no proporciona una respuesta a la pregunta". Claro que sí, y uno que me ahorró tiempo. Gracias jhk.
ChrisJJ
34

Una alternativa a la respuesta de URL directa (que por cierto es perfectamente correcta) usando la interfaz de GitHub es:

  • Haga clic en la vista 'Fuente'
  • Cambiar a la rama deseada
  • Busque el archivo que desee hasta llegar a la vista de origen real del archivo
  • Haga clic en 'historial' en la esquina superior derecha
Xubin
fuente
12
Esto también en realidad no dan lo que el cartel original está buscando. Quiere salida de parche, lo mismo que obtendría con él git log -p -- file. Lo que ha mostrado es solo el registro de un archivo en particular git log -- file, sin los parches de diferencias.
-3

Si está en Linux, instale TIG como:

sudo apt-get install tig

y entonces,

tig ruta / a / archivo /

Te mostrará todas las confirmaciones y sus respectivos cambios.

Talat Parwez

Talat Parwez
fuente