149 votes

Ajouter récursivement des fichiers par motif

Comment ajouter de manière récursive des fichiers par un motif (ou un glob) situé dans des répertoires différents?

Par exemple, j'aimerais ajouter A/B/C/foo.java et D/E/F/bar.java (et plusieurs autres fichiers java) avec une seule commande:

 git add '*.java'
 

Malheureusement, cela ne fonctionne pas comme prévu.

133voto

Sergey Glotov Points 8390

Vous pouvez utiliser git add [path]/\*.java pour ajouter des fichiers java à partir de sous-répertoires,
par exemple, git add ./\*.java pour le répertoire courant.

D' git add documentation:

Ajoute du contenu à partir de tous *.les fichiers txt en vertu de Documentation du répertoire et de ses sous-répertoires:

$ git add Documentation/\*.txt

Notez que l'astérisque * est cité à partir de l'interpréteur de commandes dans cet exemple; ce qui permet à la commande d'inclure les fichiers de sous-répertoires de Documentation/ répertoire.

77voto

Jefromi Points 127932

La réponse de Sergio Acosta est probablement votre meilleur choix si certains des fichiers à ajouter ne sont peut-être pas déjà suivis. Si vous voulez vous limiter aux fichiers que git connaît déjà, vous pouvez combiner git-ls-files avec un filtre:

 git ls-files [path] | grep '\.java$' | xargs git add
 

Git ne fournit aucun mécanisme sophistiqué pour le faire lui-même, car il s’agit d’un problème de shell: comment obtenir une liste de fichiers à fournir comme arguments d’une commande donnée.

52voto

Sergio Acosta Points 6450

Un peu hors sujet (pas spécifiquement lié à git) mais si vous êtes sur linux / unix, une solution de contournement pourrait être:

 find . -name '*.java' | xargs git add
 

Et si vous attendez des chemins avec des espaces:

 find . -name '*.java' -print0 | xargs -0 git add
 

Mais je sais que ce n’est pas exactement ce que vous avez demandé.

48voto

Olivier Verdier Points 12332

Avec zsh vous pouvez exécuter:

 git add "**/*.java"
 

et tous vos fichiers *.java seront ajoutés de manière récursive.

12voto

Alberto Points 1001

La réponse de Sergey (ne me créditez pas) fonctionne:

 You can use git add [path]/\*.java
 

avec un git récent:

 $git version
git version 1.7.3.4
 

Fichiers pour le test:

 $find -name .git -prune -o -type f -print | sort
./dirA/dirA-1/dirA-1-1/file1.txt
./dirA/dirA-1/dirA-1-2/file2.html
./dirA/dirA-1/dirA-1-2/file3.txt
./dirA/dirA-1/file4.txt
./dirB/dirB-1/dirB-1-1/file5.html
./dirB/dirB-1/dirB-1-1/file6.txt
./file7.txt
 

Statut Git:

 $git status -s
?? dirA/
?? dirB/
?? file7.txt
 

Ajout de * .txt:

 $git add \*.txt
 

Statut mis à jour:

 $git status -s
A  dirA/dirA-1/dirA-1-1/file1.txt
A  dirA/dirA-1/dirA-1-2/file3.txt
A  dirA/dirA-1/file4.txt
A  dirB/dirB-1/dirB-1-1/file6.txt
A  file7.txt
?? dirA/dirA-1/dirA-1-2/file2.html
?? dirB/dirB-1/dirB-1-1/file5.html
 

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: