2017-07-14 6 views
1

Il fonctionne de cette façon:Comment afficher les chemins relatifs dans la commande git diff?

MYPC /d/home/project/some/path (master) 
$ git diff --name-only --cached 
root.txt 
some/path/relative.txt 

à savoir il montre le chemin de la racine GIT, mais j'ai besoin de chemins relatifs du répertoire courant.

Résultat escompté:

$ git diff --name-only --cached --AND_SOME_OPTION 
../../root.txt 
relative.txt 

En bon sens, il devrait fonctionner comme git status.

P.S. L'option --relative ne fonctionne pas car elle affiche les fichiers de ce répertoire. Dans notre exemple il montrera seulement relative.txt.

P.P.S

En utilisant --git-dir ne fonctionne pas aussi bien:

$ git --git-dir=$(git rev-parse --show-toplevel)/.git diff --cached --name-only 
root.txt 
some/path/relative.txt 
+0

double possible de [Comment faire des chemins de fichiers montrent journal git par rapport au répertoire courant?] (Https://stackoverflow.com/questions/43750693/how-to-make-git-log-show-file-paths-relative-to-current-directory) – pyx

+0

@pyx, non, la solution de la question ne fonctionne pas pour moi . – Kirby

Répondre

2

git status -s produit déjà des chemins relatifs qui peuvent être facilement isolés.

Si vous devez utiliser git diff, vous pouvez diriger la sortie vers realpath, le cas échéant:

$ git diff --name-only | \ 
    xargs -I '{}' realpath --relative-to=. $(git rev-parse --show-toplevel)/'{}' 
../../root.txt 
relative.txt 
+0

Oui, j'ai vraiment besoin de 'git-diff' car il y a l'option' --cached' qui fonctionne pour moi. Merci pour le post! – Kirby

0

Jusqu'à présent, je ne trouve pas un moyen d'utiliser en utilisant git-diff des chemins relatifs.

La seule façon de travailler pour moi:

$ git status -s | awk '{print $2}' 
../../root.txt 
relative.txt 

Ou

$ git status -s | cut -c4- 

La dernière approche expliquée How can I run "git status" and just get the filenames. . Le premier assez similaire. :)

Mais ce serait bien de trouver un moyen non-pipeline. Semble, il n'y a aucun moyen d'éviter d'utiliser --cached. Donc, la plupart du temps ce n'est pas une réponse.