263 votes

difftool git, ouvrir tous les fichiers de différences immédiatement, pas en série

Le comportement par défaut de diff git consiste à ouvrir chaque fichier diff en série (fichier précédent à fermer avant d’ouvrir le fichier suivant d’attendre).

Je suis à la recherche d’un moyen d’ouvrir tous les fichiers à la fois - en BeyondCompare cela ouvrirait par exemple tous les fichiers dans des onglets dans la même fenêtre de BC.

Cela permettrait de rendre plus facile d’examiner un ensemble complexe de changements ; Mettez en avant et en arrière entre les fichiers diff et ignorer les fichiers sans importance.

235voto

Tim Henigan Points 19948

En commençant par git v1.7.11, vous pouvez utiliser git difftool --dir-diff pour effectuer un répertoire diff.

La réponse qui suit s'applique à l' git des installations de plus que v1.7.11.


Cette même question a été posée sur le git de la liste de courrier.

J'ai mis en place un script shell basé sur cette e-mail thread qui effectue un répertoire diff entre l'arbitraire s'engage.

Départ avec git v1.7.10, git-diffall script est inclus dans l' contrib de la norme git de l'installation.

Pour les versions avant v1.7.10, vous pouvez l'installer à partir de l' git-diffall projet sur GitHub.

Ici est la description du projet:

Git-diffall script fournit un répertoire de base de diff mécanisme pour git. Le script s'appuie sur l' diff.l'outil de configuration de l'option de déterminer ce visualisateur est utilisé.

Ce script est compatible avec tous les les formulaires utilisés pour spécifier une plage de les révisions de diff:

1) git diffall: montre diff entre arbre de travail et mise en scène de changements
2) git diffall --cached [<commit>]: affiche diff entre en scène changements et HEAD (ou autre nom commettre)
3) git diffall <commit>: montre diff entre arbre de travail et nommé commettre
4) git diffall <commit> <commit>: montrer les diff entre les deux s'engage
5) git diffall <commit>..<commit>: le même que ci-dessus
6) git diffall <commit>...<commit>: afficher les modifications sur la branche contenant et jusqu'à la deuxièmement , en commençant à une commune ancêtre des deux <commit>

Note: toutes les formes de prendre un chemin supplémentaire limiteur [--] [<path>]

Ce script est basé sur un exemple fournies par Thomas Rast sur le Git liste.

64voto

Seba Illingworth Points 1536

Edit: j'ai emballé cette histoire dans un billet de blog ici, cela semblait être une bonne excuse pour un premier blog :)


Voici ce que j'ai installé sur:

for name in $(git diff --name-only $1); do git difftool $1 $name & done

Cette fonction retourne la liste des fichiers modifiés et les appels externes outil de comparaison sur chaque fichier séparé.

La clé, c'est l' & commande param qui raconte l'externe diff commande à exécuter en tâche de fond, permettant ainsi successives de diff pour exécuter immédiatement. Dans le cas de BeyondCompare ainsi, tous les fichiers à ouvrir dans des onglets au sein de la même BC fenêtre, qui est ce que je veux.

Pour le rendre facile à utiliser, j'ai enregistré le script dans un fichier appelé diffall.sh et copiés que /mon-git-install-dir/cmd/ dossier de sorte qu'il est dans mon chemin, puis il a créé un alias git pour elle appelle diffall :

git config --global alias.diffall '!sh diffall.sh'

Maintenant, je peux l'exécuter en tapant (accepte facultatif params, par exemple, de la TÊTE ou --mise en scène):

git diffall

et revenir à la normale externe diff etc:

git difftool


Edit: mise à jour (détails sur le blog) pour gérer les chemins d'accès avec des espaces, d'autres pas d'invite de paramètre, et plusieurs d'entrée params.

git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename" &
done

23voto

Tom Points 8420

meld a une fonction propre que si vous lui donnez un répertoire sous contrôle de code source (Git, Mercurial, Subversion, Bazar et probablement d'autres), il va automatiquement la liste de tous les fichiers modifiés et vous pouvez double-cliquez pour afficher les différences individuelles.

IMO c'est beaucoup plus facile de taper meld . et ont, figure le VCS de configurer votre CV pour le lancement meld. De Plus, vous pouvez utiliser la même commande, peu importe ce VCS votre projet se passe à utiliser, ce qui est excellent si vous passez beaucoup.

Le seul inconvénient est qu'il est plus lent pour les fusionner pour détecter les changements que d'être adopté les modifications à partir de git/hg/svn, mais si c'est suffisamment lente pour être un problème dépendra de la façon dont vous l'utilisez, j'en suis sûr.

3voto

Khaja Minhajuddin Points 2797

``= > https://github.com/wmanley/git-meld est un script génial qui ouvrira un diff soigné de tous les fichiers dans une seule fenêtre.

3voto

Seba Illingworth Points 1536

J'ai trouvé cette méthode (GitDiff.chauve-souris et GitDiff.rb) qui copie les fichiers à l'ancienne et de la nouvelle temp dirs et fait ensuite un dossier de comparaison.

Mais je préfère afficher les fichiers de travail directement (à partir du travail dir), comme BeyondCompare a la fonction pratique de pouvoir modifier le fichier dans le diff de la fenêtre qui est idéal pour le nettoyage rapide.

Edit: une méthode similaire ici en réponse à ma question sur le git liste de diffusion.

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