web-dev-qa-db-fra.com

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

Je dois 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 afin qu'un URL github pour le diff soit idéal. La vue de comparaison de github me permettra de le faire pour tous les fichiers modifiés, mais cela n’est pas bon car il y a des milliers de fichiers dans mon référentiel.

Je peux le faire en ligne de commande comme suit, mais cela n’aide en rien car je dois envoyer le diff à quelqu'un par courrier électronique:

git diff tag1 tag2 -- path/to/file

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

94
plainflavour

GitHub expose uniquement le moyen d'afficher diff entre deux commits.

Si ces balises indiquent réellement des commits, le format de l’URL ressemblerait à quelque chose comme:

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

Par 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:

  • Basculer vers l'onglet Fichiers modifiés

changed-tab

  • Cliquez sur le bouton Afficher les statistiques différentes (la liste des fichiers modifiés sera affichée sous forme de liens).

show-diff

  • Copiez dans le presse-papiers le lien du fichier spécifique que vous êtes après ... et Tada! Vous avez terminé.

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

Mise à jour

Après votre commentaire indiquant que votre diff est trop volumineux pour pouvoir être restitué via l'interface Web, pourquoi ne pas revenir à un bon vieil outil 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 courrier électronique.

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

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

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

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 avec l'ancien commit.

https://Gist.github.com/ affiche une vue diff de Nice côte à côte lorsque vous cliquez sur "Révisions".

6
f01

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

Allez à ce fichier dans le github, puis sélectionnez [~ # ~] historique [~ # ~] . Cela ouvrira la page avec la liste des commentaires d’archivage comme ci-dessous.

enter image description here En cliquant dessus, les modifications du code seront affichées. Après avoir cliqué sur l'historique; vous pouvez cliquer sur les paquets pour voir tous les fichiers archivés au niveau du paquet.

Dans Eclipse, vous pouvez comparer l'historique à l'aide du plug-in EGit et du bouton "Clic droit -> Comparer avec" du fichier. Comment puis-je comparer deux révisions dans git dans Eclipse?

3

J'ai utilisé réponse de nulltoken pour créer un script de commodité simple permettant de relever un diff entre deux commits sur GitHub à partir de la ligne de commande.

Vous pouvez trouver le script complet sur Gist , mais voici les bons côtés:

# 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, 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 sur un environnement différent, vous voudrez peut-être modifier cela.

Comme pour la réponse de nulltoken, pour pointer sur un seul fichier dans le diff, vous devez cliquer sur le titre du fichier pour que la chaîne d'ancrage apparaisse dans la barre d'adresse, que vous pouvez ensuite copier.

0
Chris