Ajouter une liste spécifique de fichiers modifiés avec git add

Je veux append uniquement des fichiers modifiés. J’ai essayé:

git status | grep "modified" | cut -d " " -f4 | git add 

ou

 git status | grep "modified" | cut -d " " -f4 | xargs git add 

mais ça ne marche pas. Que dois-je utiliser?

Le premier ne fonctionnera pas car vous n’utilisez pas xargs . La seconde ne fonctionne pas car la cut ne fonctionne pas – regardez la sortie.

Il y a la commande git ls-files --modified qui vous donne une liste de fichiers modifiés, un par ligne. Si vous n’avez pas d’espaces dans vos noms de fichiers, utilisez simplement:

 git ls-files --modified | xargs git add 

Si vous avez des espaces dans vos noms de fichiers, utilisez les options -z et -0 (en vous assurant que votre variante de xargs supporte l’option -0 , elle n’est pas universelle, mais est standard avec GNU xargs ):

 git ls-files --modified -z | xargs -0 git add 

git status utilisez git status sans indicateur, vous devez être certain qu’il n’ya pas d’espace dans vos noms de fichiers et que vous pouvez ensuite utiliser:

 git status | awk '/[[:space:]]modified:[[:space:]]/{print $2}' | xargs git add 

De plus, git status -s donne un meilleur format de sortie, plus facilement analysable. Vous pourriez utiliser:

 git status -s | sed -n '/^ M / s///p' | xargs git add 

Cela fonctionne pour le cas simple (vous avez modifié le fichier localement, il n’est pas encore dans l’index, et c’est le seul changement pertinent). Vous devriez lire le spiel de git status --help sur le format court pour savoir comment gérer les (nombreux) autres cas.

Notez également que git commit -a va valider tous les fichiers modifiés.


J’essaie: git ls-files -o | grep "tests/" | xargs -0 git add git ls-files -o | grep "tests/" | xargs -0 git add git ls-files -o | grep "tests/" | xargs -0 git add , mais j’obtiens la xargs: argument line too long .

L’option -0 de xargs nécessite des ‘lignes’ se terminant par des octets nuls. Votre commande git ne les génère pas car vous avez omis l’option -z . Vous avez probablement omis cela parce que vous êtes inquiet au sujet du grep au milieu (qui ne fonctionnera qu’avec des lignes se terminant par des nouvelles lignes), mais votre ligne de commande doit être cohérente de bout en bout, soit avec newlines ou null. délimiteurs de noms de fichiers. Heureusement, grep a une option --null (fonctionne sur GNU et BSD grep ; GNU permet également d’utiliser -z , mais cela signifie quelque chose de différent sur BSD) pour travailler avec de telles données. Par conséquent, vous devriez essayer soit:

 git ls-files -o -z | grep --null "tests/" | xargs -0 git add 

ou, si vous n’avez pas à vous soucier des espaces dans les noms de fichiers:

 git ls-files -o | grep "tests/" | xargs git add 

Vous pouvez simplement utiliser git add -u . Il ne mettra en scène que des fichiers modifiés .