140 votes

Comment puis-je générer un diff pour un seul fichier entre deux branches dans github ?

J'ai besoin de générer un diff pour un seul fichier qui montrera les différences entre deux versions, qui sont en fait des tags dans github. Je veux ensuite envoyer cette différence à quelqu'un par e-mail, l'idéal serait donc de disposer d'une URL github pour la différence. La vue de comparaison de github me permet de faire cela pour tous les fichiers modifiés, mais ce n'est pas bon car il y a des milliers de fichiers dans mon repo.

Je peux le faire en ligne de commande comme suit, mais cela ne m'aide pas car je dois envoyer la différence à quelqu'un par courriel :

git diff tag1 tag2 -- path/to/file

J'ai trouvé la version en ligne de commande discutée ici : comment puis-je voir les différences dans un fichier désigné entre une branche locale et une branche distante ?

123voto

nulltoken Points 15605

GitHub n'expose que le moyen d'afficher la différence entre deux commits.

Pour autant que ces balises pointent effectivement vers des commits, le format de l'Url serait quelque chose comme

https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}

A titre d'exemple, https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 montre la différence entre deux versions du projet LibGit2Sharp. Cette différence inclut tous les fichiers modifiés.

Si vous voulez récupérer une URL qui cible un fichier spécifique :

  • Passez à la Fichiers modifiés onglet

changed-tab

  • Cliquez sur le Afficher les statistiques de diffusion (Ceci affichera la liste des fichiers modifiés sous forme de liens)

show-diff

  • Copiez dans le presse-papiers le lien du fichier spécifique que vous recherchez... et Tada ! Vous avez terminé.

Par exemple, étant donné la différence ci-dessus, le lien https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 pointera vers le LazyFixtures.cs les changements intervenus entre les versions v0.9.0 et v0.9.5.

Mise à jour

Suite à votre commentaire qui indique que votre diff est trop gros pour être rendu par l'interface Web, pourquoi ne pas revenir au bon vieil outil de ligne de commande ? Vous pourriez rediriger la sortie du diff vers un fichier, puis envoyer ce fichier en tant que pièce jointe à un courriel.

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff

14voto

f01 Points 21

Voici ma solution de rechange lorsque le problème suivant s'applique.

Cette comparaison est importante ! Nous ne montrons que les 250 commits les plus récents.

Copier la vue brute du fichier que vous voulez comparer à https://gist.github.com/ . Utilisez les deux points d'engagement spécifiques que vous souhaitez comparer. Commencez par le commit le plus ancien.

https://gist.github.com/ dispose d'un bel affichage des différences côte à côte lorsque vous cliquez sur "Révisions".

4voto

Kanagavelu Sugumar Points 1206

La réponse est pour les personnes qui veulent seulement voir (et non pas télécharger) l'historique/révolution des changements de code d'un fichier dans la page WEB du GITHUB pour une vérification antérieure.

Allez sur ce fichier dans le github, puis sélectionnez HISTOIRE . Cela ouvrira la page avec la liste des commentaires de contrôle comme ci-dessous.

enter image description here En cliquant dessus, vous verrez les modifications apportées au code. Après avoir cliqué sur l'historique, vous pouvez cliquer sur les paquets pour voir les vérifications de tous les fichiers au niveau du paquet.

Dans eclipse, vous pouvez comparer l'historique en utilisant EGit et "Clic droit ->Comparer avec" sur le fichier. Comment comparer deux révisions dans git dans Eclipse ?

0voto

chrisf Points 312

J'ai utilisé Réponse de nulltoken pour mettre en place un simple script pour obtenir une différence entre deux commits sur GitHub depuis la ligne de commande.

Vous pouvez trouver le script complet sur gist mais voici les bonnes choses :

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# git@github.com:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"

if [[ "$#" -eq 1 ]]; then
  if [[ "$1" =~ .*\.\..* ]]; then
    # Handle "git hubdiff fromcommit..tocommit"
    open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
  else
    # Handle "git hubdiff fromcommit"
    open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
  fi
elif [[ "$#" -eq 2 ]]; then
  # Handle "git hubdiff fromcommit tocommit"
  open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi

Elle accepte comme arguments les branches, les commits, et tout ce qui peut être résolu par git rev-parse . J'ai utilisé open qui ne fonctionne que sur macOS pour l'ouverture des pages Web. Si vous êtes sur un environnement différent, vous devrez modifier ce paramètre.

Comme pour la réponse de nulltoken, afin de pointer vers un seul fichier dans le diff, vous devrez cliquer sur le titre du fichier pour faire apparaître la chaîne d'ancrage dans la barre d'URL, que vous pourrez ensuite copier.

0voto

kayleeFrye_onDeck Points 3244

Puisque cela n'est toujours pas possible, voici une méthode de diff-tool basée sur le navigateur. Elle n'utilise pas l'automatisation mais nécessite seulement la possibilité d'installer des extensions Chrome :

  1. Installez Diff Tools pour les navigateurs Chrome : https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Ouvrez Diff Tools ( http://iblogbox.com/devtools/diff/ )
  3. Depuis GitHub, allez sur le commit, le tag ou la branche BEFORE, ouvrez le fichier, puis cliquez sur l'icône Raw pour obtenir la vue du fichier brut, sélectionnez tout et copiez, puis mettez dans la zone de texte de gauche dans Outils de diffusion
  4. Répétez l'étape 3 mais pour le fichier AFTER et collez dans la case de droite dans Diff Tools.
  5. Cliquez sur Compare Now et effectuer votre diff ad-hoc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X