web-dev-qa-db-fra.com

Comment obtenir git diff avec le contexte complet?

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

git diff branch master --no-prefix > patch

Cela ne génère que 3 lignes de contexte. Alors 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 pour le correctif sans avoir à spécifier le nombre maximum de lignes?

100
balki

Je sais que c'est vieux, mais comme je n'aime pas les solutions codées en dur, j'ai donc 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 que cela fonctionnera même pour un petit changement dans un très gros fichier.

45
Ezra

This semble fonctionner assez bien:

git diff --no-prefix -U1000

Avec l'avertissement:

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

82
c24w

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

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

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

9
VonC

Cela a fonctionné pour moi sur Mac OS:

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

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

2
Nakilon

Vous avez de l'inspiration et j'ai donc ajouté un alias de 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 trouver "git df" ne fonctionne pas parfois, à cause d'un changement de répertoire lors de l'exécution de git alias. (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
2
Yun Wu