GitHub peut-il afficher l'historique des modifications apportées à un fichier sous forme de correctif?

89

Si vous le faites git log --patch -- path/to/file, vous obtiendrez l'historique du fichier avec une différence de toutes les modifications apportées à chaque commit, comme ceci:

$ 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

Je veux pouvoir obtenir le même type de format en utilisant l'interface Web de GitHub (pas la ligne de commande) , et je veux un lien à envoyer à quelqu'un d'autre sans le code.

ma11hew28
la source
Compare View vous donne quelque chose de proche de ce que vous recherchez, mais ce n'est malheureusement pas pour un fichier individuel.
2
Si vous faites une demande de fonctionnalité pour cela, peut-être que l'équipe de développement GitHub l'ajoutera.

Réponses:

84

L'URL suivante affichera tous les commits pour un seul fichier dans un format similaire à git log -p:

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

...où:

  • <username> est le nom d'utilisateur de la personne qui possède le repo
  • <project> est le nom du repo
  • <branch> peut être 'master' ou toute autre branche
  • <path/to/file> est, espérons-le, explicite

En choisissant au hasard (un peu), voici un exemple du repo vim-fugitive .

Tim Henigan
la source
+1. Plus de ces API Commits : develop.github.com/p/commits.html (dans la section API GitHub develop.github.com )
VonC
17
C'est git log path / to / file. Je veux git log -p chemin / vers / fichier.
ma11hew28
1
Tout ce que cela fait est d'afficher la dernière mise à jour, pas un historique des mises à jour.
Gerry
4
Je ne sais pas pourquoi cela est voté. Je suppose que les gens ne lisent pas la question attentivement. Cette réponse ne vous donne pas une liste de différences comme git log --patch -- path/to/filece que l'OP a demandé.
jcoffland
1
@jcoffland, il est voté pour parce que la plupart des gens comme moi trouvent cela utile et c'est exactement ce que nous recherchons, sans tenir compte de la question de l'op.
mr5
49

Sur la base des réponses ci-dessus et de mes propres tentatives pour trouver cette fonctionnalité exacte, il semble que la bonne réponse à cette question soit non .

Edit: avant de voter, essayez peut-être de me prouver le contraire. Parfois, la bonne réponse n'est pas ce que vous voulez entendre.

jhk
la source
1
Cela ne répond pas à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son message - vous pouvez toujours commenter vos propres messages, et une fois que vous avez une réputation suffisante, vous pourrez commenter n'importe quel article .
indubitablee
18
Cette réponse est à la fois spécifique et exacte, contrairement aux deux autres réponses qui ne reconnaissent même pas ce que la question posait.
jhk
5
C'est la bonne réponse. Github n'a pas de moyen d'afficher les résultats des correctifs avec les journaux d'un seul fichier comme le fait git log -p - file
nohat
4
les 2 autres réponses sont incorrectes. cette réponse m'a fait gagner du temps et de la frustration.
Schien
3
"Cela ne répond pas à la question." Bien sûr, et un qui m'a fait gagner du temps. Merci jhk.
ChrisJJ
34

Une alternative à la réponse URL directe (ce que BTW est parfaitement correct) utilisant l'interface de GitHub est de:

  • Cliquez sur la vue 'Source'
  • Passer à la succursale souhaitée
  • Recherchez le fichier souhaité jusqu'à ce que vous arriviez à la vue source réelle du fichier
  • Cliquez sur "historique" dans le coin supérieur droit
Xubin
la source
12
Cela aussi ne donne pas vraiment ce que l'affiche originale recherche. Il veut une sortie de patch, la même que ce qu'il obtiendrait git log -p -- file. Ce que vous avez montré n'est que le journal d'un fichier particulier, comme git log -- file, sans les correctifs de différence.
-3

Si vous êtes sous Linux, installez TIG en tant que:

sudo apt-get install tig

puis,

chemin tig / vers / fichier /

Il vous montrera tous les commits et leurs modifications respectives

Talat Parwez

Talat Parwez
la source