O GitHub pode mostrar o histórico de alterações feitas em um arquivo na forma de patch?

88

Se o fizer git log --patch -- path/to/file, obterá o histórico do arquivo junto com uma comparação de todas as mudanças feitas nele a cada commit, 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

Quero poder obter o mesmo tipo de formato usando a interface da web do GitHub (não a linha de comando) e quero um link para enviar a outra pessoa sem o código.

ma11hew28
fonte
A visualização de comparação oferece algo próximo do que você está procurando, mas não é para um arquivo individual, infelizmente.
2
Se você fizer uma solicitação de recurso para ele, talvez a equipe de desenvolvimento do GitHub o adicione.

Respostas:

83

O seguinte URL mostrará todos os commits para um único arquivo em um formato semelhante a git log -p:

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

...Onde:

  • <username> é o nome de usuário da pessoa que possui o repo
  • <project> é o nome do repo
  • <branch> pode ser 'master' ou qualquer outro ramo
  • <path/to/file> é autoexplicativo esperançosamente

Escolhendo de forma (um pouco) aleatória, aqui está um exemplo do repositório vim-fugitive .

Tim Henigan
fonte
+1. Mais daqueles Compromete API: develop.github.com/p/commits.html (na seção GitHub API develop.github.com )
VonC
17
Esse é o caminho do log git / para / arquivo. Eu quero git log -p path / to / file.
ma11hew28
1
Tudo o que faz é mostrar a atualização mais recente, não um histórico de atualizações.
Gerry,
4
Eu não sei por que isso está sendo votado. Acho que as pessoas não estão lendo a pergunta com cuidado. Esta resposta não fornece uma lista de diferenças, como a git log --patch -- path/to/fileque o OP pediu.
jcoffland
1
@jcoffland está sendo votado positivamente porque a maioria das pessoas como eu acha isso útil e é exatamente o que estamos procurando, desconsiderando a pergunta do op.
mr5
49

Com base nas respostas acima e em minhas próprias tentativas de encontrar esse recurso exato, parece que a resposta correta para essa pergunta é não .

Edit: antes de votar, talvez tente provar que estou errado. Às vezes, a resposta correta não é o que você deseja ouvir.

jhk
fonte
1
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos de um autor, deixe um comentário abaixo de sua postagem - você sempre pode comentar suas próprias postagens e, assim que tiver reputação suficiente , poderá comentar em qualquer postagem .
indubitável
18
Essa resposta é específica e precisa, ao contrário das outras duas respostas que nem mesmo reconhecem o que a pergunta estava perguntando.
jhk
5
Essa é a resposta correta. O Github não tem uma maneira de mostrar os resultados do patch junto com os logs para um único arquivo da forma como git log -p - file
nohat
4
as outras 2 respostas estão incorretas. essa resposta me poupou tempo e frustração.
Schien
3
"Isso não fornece uma resposta para a pergunta." Claro que sim, e isso me economizou tempo. Obrigado jhk.
ChrisJJ
34

Uma alternativa para a resposta de URL direta (que BTW é perfeitamente correta) usando a interface do GitHub é:

  • Clique na visualização 'Fonte'
  • Mudar para um ramo desejado
  • Procure o arquivo que deseja até chegar à visualização da fonte real para o arquivo
  • Clique em 'histórico' no canto superior direito
Xubin
fonte
12
Isso também não dá realmente o que o autor do pôster original está procurando. Ele quer a saída do patch, a mesma que ele obteria git log -p -- file. O que você mostrou é apenas o log de um arquivo específico, como git log -- file, sem os patches diff.
-3

Se você estiver no Linux, instale o TIG como:

sudo apt-get install tig

e depois,

caminho tig / para / arquivo /

Ele irá mostrar a você todos os commits e suas respectivas mudanças

Talat Parwez

Talat Parwez
fonte