Comment obtenir git diff avec le contexte complet?

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

git diff branch master --no-prefix > patch 

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

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

Espérons que tous les fichiers auront moins de 2000 lignes. Y a-t-il un moyen de dire à git d’inclure toutes les lignes du fichier dans le patch sans avoir à spécifier des lignes maximales?

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 le seul moyen d’aborder le problème, mais l’utilisation d’un nombre de lignes promet qu’il fonctionnera même pour un petit changement dans un très gros fichier.

Cela semble fonctionner plutôt bien:

 git diff --no-prefix -U1000 

Avec l’avertissement:

L’indicateur -U spécifie les lignes de contexte. Vous devrez peut-être augmenter ce nombre s’il y a plus de 1000 lignes entre vos modifications.

Remarque: L’annonce de git1.8.1rc1 (8 décembre 2012) comprend:

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

de sorte que cela pourrait aider, ici, à générer un contexte plus complet.

J’ai trouvé 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  

Mettre à jour:

Juste trouvé “git df” ne fonctionne pas parfois, en raison du changement de répertoire lors de l’exécution de l’alias git. (Voir alias git fonctionnent dans le mauvais répertoire ). Donc, c’est 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 

Cela a fonctionné pour moi sur Mac OS:

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

voir “Comment découper des espaces à partir d’une variable Bash?”