168 votes

Comment obtenir git diff avec le contexte complet ?

Comment créer un patch adapté à la révision dans le creuset ?

git diff branch master --no-prefix > patch

Cela ne génère que 3 lignes de contexte. Je fais donc ce qui suit

git diff --unified=2000 branch master --no-prefix > patch

J'espère que tous les fichiers auront moins de 2000 lignes. Existe-t-il un moyen de dire à git d'inclure toutes les lignes du fichier pour le patch sans avoir à spécifier le nombre maximum de lignes ?

138voto

c24w Points 1254

Ce site semble bien fonctionner :

git diff --no-prefix -U1000

Avec une mise en garde :

Le site -U Le drapeau spécifie les lignes du contexte. Vous devrez peut-être augmenter cette valeur s'il y a plus de 1000 lignes entre vos modifications.

83voto

Ezra Points 812

Je sais que c'est vieux, mais je n'aime pas non plus les solutions codées en dur, alors j'ai testé ceci :

git diff -U$(wc -l MYFILE)

L'utilisation de -U semble être la seule façon d'aborder le problème, mais l'utilisation d'un compte de lignes promet que cela fonctionnera même pour une petite modification dans un très grand fichier.

11voto

VonC Points 414372

Note : Annonce de git1.8.1rc1 (8 décembre 2012) comprend :

Une nouvelle variable de configuration " diff.context "peut être utilisé pour donner le nombre par défaut de lignes de contexte dans la sortie du patch, afin de remplacer le code dur par défaut de 3 lignes.

donc cela pourrait aider, ici, à générer un contexte plus complet.

5voto

Yun Wu Points 61

J'ai eu de l'inspiration et j'ai donc ajouté un alias git.

$ cat ~/.gitconfig | fgrep diff
        df = "!git diff -U$(wc -l \"$1\" | cut -d ' ' -f 1) \"$1\""
$ git df <file>

Mise à jour :

Je viens de découvrir que "git df" ne fonctionne pas parfois, en raison d'un changement de répertoire lors de l'exécution de l'alias git. (Voir les alias git fonctionnent dans le mauvais répertoire ). Voici donc la version mise à jour :

$ cat ~/.gitconfig | fgrep df
        df = "! [ \"$GIT_PREFIX\" != \"\" ] && cd \"$GIT_PREFIX\"; ~/bin/git_df.sh"
$ 
$ cat ~/bin/git_df.sh
#!/bin/bash
for FILE in $@; do
    git diff -U$(wc -l "${FILE}" | cut -d ' ' -f 1) "${FILE}"
done
exit 0

2voto

Nakilon Points 11635

Cela a fonctionné pour moi sur macOS :

git diff -U$(wc -l main.htm | xargs)

voir "Comment couper les espaces blancs d'une variable Bash ?"

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