65 votes

git : liste les nouveaux fichiers seulement

Quand je fais un git status Je reçois une liste de fichiers préfixés par new file: . Comment puis-je obtenir uniquement cette liste ? Je veux traiter ces fichiers dans une simple boucle dans un petit shell script.

1 votes

Avez-vous essayé 'grep' ? git status | grep new file .

0 votes

Oui, mais cela ne me permet pas d'obtenir les noms de fichiers ordinaires.

6 votes

Je préfère utiliser git ls-files --others --exclude-standard ( stackoverflow.com/a/2299448/6309 )

109voto

andsens Points 910

Les commandes ci-dessous ne donnent plus les résultats escomptés, il se peut qu'à l'origine j'ai aussi fait quelques erreurs. Veuillez vérifier votre résultat et les options que vous utilisez. Néanmoins : Le principe de base de l'utilisation de diff-filter devrait rester vrai.

N'utilisez pas grep pour analyser la sortie de git. Git a presque certainement les choses que vous recherchez intégrées (sauf si vous cherchez des choses vraiment avancées).
Vous pouvez utiliser git diff pour montrer les changements. --name-only ne montre que les noms de fichiers. --diff-filter=A ne liste que les fichiers ajoutés.
Si vous voulez voir les nouveaux fichiers que vous avez déjà ajoutés à l'index, utilisez --cached sinon, ne le faites pas. Pour voir les deux diff à HEAD .
Les commandes se présentent comme suit :

git diff --name-only --diff-filter=A --cached # All new files in the index  
git diff --name-only --diff-filter=A          # All files that are not staged  
git diff --name-only --diff-filter=A HEAD     # All new files not yet committed

6 votes

Diff-filter est en fait la solution :)

6 votes

Il est tout à fait regrettable que le PO n'accepte pas cette réponse, car à mon humble avis, vous avez tout à fait raison. :)

0 votes

Existe-t-il quelque chose de similaire pour "Tous les fichiers depuis la création de la branche" ?

43voto

vpatil Points 1210

Vous pouvez utiliser git status --short pour obtenir la liste des fichiers.

13 votes

Ce point ne doit pas être négligé.

0 votes

L'OP a demandé comment obtenir la liste pure de la new file: de la git status sortie, juste le prendre "les noms de fichiers simples" mais celui-ci a un caractère de tête de statut supplémentaire.

1 votes

Fantastique ! Juste ce que je voulais ! git ls-files --others ne fonctionnait pas pour moi. Avec git status --short, je pouvais juste rechercher "^ ??". Merci !

34voto

Keith Hanlan Points 379

Au lieu d'analyser la sortie de "git status", il est probablement plus élégant d'utiliser

git ls-files -o  --exclude-standard

Comme avec git status , ls-files produira une sortie relative à votre répertoire de travail actuel.

Vous pouvez souhaiter inclure le --full-name option :

git ls-files -o  --exclude-standard --full-name

1 votes

L'OP a demandé de lister les nouveaux fichiers et cette réponse ne nécessite aucun autre programme vers lequel diriger la sortie. J'ai constaté que sur mac, git diff ne fonctionnait pas avec les filtres comme prévu alors que cette réponse le faisait :)

0 votes

C'est clairement le gagnant. Elle fonctionne sur les nouveaux répertoires contenant tous les nouveaux fichiers.

0 votes

Cependant, notez que cela ne fonctionne pas à partir de sous-répertoires. J'ai fini par utiliser git diff pour que mon script fonctionne depuis chaque répertoire du dépôt : $ git diff --name-only --diff-filter=A HEAD

31voto

Rom1 Points 1612

J'utiliserais quelque chose comme git status --porcelain | grep "^A" | cut -c 4-

0 votes

C'est des années plus tard, mais cela ne fonctionne plus pour moi (la sortie de git status a probablement changé). EDIT : Bah. Je ne l'avais pas ajouté/commandé. Il résiste à l'épreuve du temps !

1voto

Trying2Learn Points 11

La liste des nouveaux fichiers ou les fichiers à ajouter à git peuvent être obtenus en utilisant la commande git status et grep comme suit git status -s | grep ??

root@user-ubuntu:~/project-repo-directory# git status -s | grep ??
 ?? src/.../file1.js
 ?? src/.../file2.js
 ?? src/.../file3.js
 ....

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