2009-11-29 4 views
22

Est-il possible d'obtenir une liste des fichiers qui seront validés lorsque je tape ce qui suit?Comment lister uniquement les fichiers qui seraient validés?

git commit -m "my changes" 

Les statuts d'état git sont trop nombreux. Je pourrais effacer tous les mots, mais je préfère ne pas. Et je ne veux pas qu'on me parle de fichiers non-suivis.

J'ai essayé

git ls-files -md 

mais qui ne montre pas les fichiers qui ont été ajoutés récemment, mais non encore engagés.

Je suis à la recherche de la même sortie que vous obtiendrez de

svn status -q 

Par exemple d'état -q
$ svn A file.py
M dir/database.py
M start .PY

Répondre

4

Vous pouvez essayer:

git diff --name-status 

Je reçois ce qui suit:

$ git diff --name-status 
M  README.markdown 

Sans les fichiers non suivis.

+2

Ce n'est pas correct. La question est: "que va-t-on commettre quand je dis" git commit -m message "". Cela donne les différences entre l'arbre de travail et le cache qui est plus proche de ce qui * ne sera pas * commis. –

26

Voici ce que je cherchais. Merci à notnoop pour le plomb dont j'avais besoin. Je voulais poster ma solution au cas où cela aiderait les autres.

git diff HEAD --name-only 

Depuis que je comptais faire

git commit -s -F mesage.txt 

avec les fichiers trouvés dans la première ligne.

Mon intention est de créer un petit système qui ignore totalement l'index, c'est-à-dire que je n'ai jamais besoin d'ajouter git. (D'après ce que je comprends, l'index est utile lors de la création de correctifs, ce qui n'est pas la norme dans mon flux de travail.)

+2

vous ne voulez pas dire 'git diff --cached --name-only'? le 'diff HEAD' montrera les derniers fichiers engagés et non poussés. le '--cached' montrera les fichiers qui seront validés quand vous lancerez' git commit' – gcb

+0

'git diff --staged --name-only' fonctionne également. En fonction de ce que vous pensez de git, vous pouvez utiliser --staged [synonyme] (https://stackoverflow.com/a/39877896) au lieu de --cached. – SpeedCoder5

8

Cette commande vous indique quels fichiers de votre index/cache/zone de transfert diffèrent de la current HEAD (et s'il s'agit d'ajouts, de modifications ou de suppressions) qui sont les changements qui seront validés si vous utilisez git commit sans chemins explicites ou l'option -a. Son format est raisonnablement similaire à la sortie svn status que vous montrez.

git diff --cached --name-status 
3

Je sais d'origine OP a demandé d'éviter git status, mais je sentais que ce serait agréable de laisser pour la postérité (i.e. d'autres personnes qui ne partagent pas les réserves de OP).

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//' 

Mon raisonnement est que git status --porcelain semble avoir été construit pour exactement ce type de situation embarrassante ...

source: http://git-scm.com/docs/git-status.html

EDIT: Vous pouvez choisir de ne pas utiliser sed -e 's/[A-Z] *//' si vous souhaitez conserver les balises de modification de git en face de chaque nom de fichier.

+0

+1. Je suis d'accord que 'git status --porcelain' peut être utilisé dans un script. Je l'ai documenté autant dans http://stackoverflow.com/a/6978402/6309, en disant que "La nouvelle option \ [' --porcelain' \] rend le format de sortie natif de la commande pour émettre une sortie qui est plus facile à gérer par Porcelaine." – VonC

+0

Cela ne semble pas répertorier les fichiers réels qui seraient poussés lors d'un push git (et qui ont été mis en scène par un git add/commmit) – Paul

Questions connexes