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

111

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 balises dans github. Je veux ensuite envoyer ce diff à quelqu'un par e-mail, une URL github pour le diff serait donc idéale. La vue de comparaison de github me permettra de le faire pour tous les fichiers modifiés, mais ce n'est pas bon car il y a des milliers de fichiers dans mon dépôt.

Je peux le faire dans la ligne de commande comme suit, mais cela n'aide pas car j'ai besoin d'envoyer le diff à quelqu'un par e-mail:

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?

saveur nature
la source

Réponses:

90

GitHub expose uniquement la manière d'afficher les différences entre deux validations.

À condition que ces balises pointent réellement vers des commits, le format de l'URL serait quelque chose comme

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

À 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. Ce diff inclut tous les fichiers modifiés.

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

  • Passer à l' onglet Fichiers modifiés

onglet modifié

  • Cliquez sur le bouton Show Diff Stats (Cela 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, compte tenu de la différence ci-dessus, le lien https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 pointera vers les LazyFixtures.cschangements intervenus entre la version v0.9.0 et v0.9.5.

Mettre à jour

Suite à votre commentaire qui déclare que votre diff est trop gros pour être rendu via l'interface Web, que diriez-vous de revenir à de bons vieux outils de ligne de commande? Vous pouvez rediriger la sortie du diff vers un fichier, puis envoyer le fichier sous forme de pièce jointe à un e-mail.

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff
nulltoken
la source
8
Salut, il semble que cela ne fonctionnera pas pour moi car mon diff est trop grand. Je reçois "Cette différence est importante! Nous affichons les informations de statut uniquement pour les 2 500 premiers fichiers." donc je n'obtiens que les statistiques des différences et non les différences complètes, même avec les liens #diff.
plainflavour
1
cependant je pense que vous avez raison - c'est la façon de procéder. Merci
plainflavour
1
Vous pouvez également utiliser cette extension Chrome github.com/danielribeiro/github-diff-highlight-extension pour obtenir la mise en évidence de la syntaxe lors de la comparaison des branches.
Daniel Ribeiro
3
@plainflavour Un autre conseil pratique ici au cas où vous rencontriez à nouveau cela - chaque fois que vous avez une URL de comparaison comme @nulltoken souligné, vous pouvez également simplement ajouter un .diff à la fin de l'URL pour voir le diff complet (bien qu'en texte clair ). Par exemple, la https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff source
dmccabe
1
Je ne vois pas de bouton Afficher les statistiques des différences . Est-ce parti? Ou est-ce que je ne le vois tout simplement pas?
dckc
7

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

Cette comparaison est grande! Nous affichons uniquement les 250 derniers commits

Copiez la vue brute du fichier que vous souhaitez comparer à https://gist.github.com/ . Utilisez les deux points de validation spécifiques que vous souhaitez comparer. Commencez par l'ancien commit.

https://gist.github.com/ a une belle vue des différences côte à côte lorsque vous cliquez sur «Révisions».

f01
la source
3
Merci, c'était exactement la suggestion dont j'avais besoin pour gist.github.com/ncoghlan/1067805fe673b3735ac854e195747493 / ... ! :)
ncoghlan
3

La réponse est destinée aux personnes qui souhaitent uniquement voir (ne pas télécharger) l'historique / la révision des modifications de code d'un fichier dans la page Web GITHUB pour l'enregistrement précédent.

Accédez à ce fichier dans le github, puis sélectionnez HISTORIQUE . Cela ouvrira la page avec la liste des liens de commentaires d'enregistrement comme ci-dessous.

entrez la description de l'image ici En cliquant dessus, vous verrez les changements de code. Après avoir cliqué sur l'historique; vous pouvez cliquer sur les packages pour voir au niveau du package tous les enregistrements de fichiers.

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

Kanagavelu Sugumar
la source
1
Pour être plus explicite, vous cliquez sur le "nom" à 7 chiffres hexadécimaux du commit (il n'y a pas d'étiquette ou d'info-bulle lorsque vous le survolez, il se trouve près du côté droit, juste à côté du "copier dans le presse-papiers" icon), et cela vous mènera à une page qui montre une différence entre la version de ce commit et ce que je suppose est la version précédente.
JonathanZ soutient MonicaC
@Jonathan Ouais; thats true
Kanagavelu Sugumar
Hé, je n'ai pas vu cette capture d'écran la dernière fois que j'ai regardé. Je ne sais pas si cela ne se chargeait pas pour moi à l'époque ou si vous l'avez ajouté depuis, mais de toute façon merci pour votre réponse; c'est bien.
JonathanZ soutient MonicaC
Pour un commit de 5000 fichiers, cela ne m'amène pas à la différence de fichier unique. À partir de cet historique , essayez de trouver le delta de ce fichier à partir de cet énorme commit .
Carl Walsh
0

J'ai utilisé la réponse de nulltoken pour mettre en place un script de commodité simple pour extraire un diff entre deux commits sur GitHub à partir de la ligne de commande.

Vous pouvez trouver le script complet sur l'essentiel , mais voici les bons éléments:

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# [email protected]: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

Il 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 ouvrir des pages Web, donc si vous êtes dans un environnement différent, vous voudrez l'ajuster.

Comme pour la réponse de nulltoken, pour 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.

Chris
la source
un moyen d'obtenir la chaîne d'ancrage pour une comparaison qui ne montre pas le fichier souhaité car il y en a trop?
sgarg
@sgarg L'ancre est "diff- <md5 du nom de fichier>" - non documenté AFAIK - mais cela m'a ennuyé et je l'ai deviné.
Ben Walding le
0

Comme cela n'est toujours pas possible, voici une méthode d'outil de comparaison basée sur un navigateur. Il ne tire pas parti de l'automatisation, mais nécessite uniquement 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 les outils de Diff ( http://iblogbox.com/devtools/diff/ )
  3. À partir de GitHub, accédez à AVANT la validation, la balise ou la branche, ouvrez le fichier, puis cliquez sur le Rawbouton pour obtenir la vue du fichier brut, sélectionnez tout et copiez, puis placez-le dans la zone de texte de gauche dans Diff Tools
  4. Répétez l'étape 3 mais pour le fichier AFTER et collez-le dans la zone de droite dans Diff Tools
  5. Cliquez Compare Nowet effectuez votre diff ad-hoc
kayleeFrye_onDeck
la source