web-dev-qa-db-fra.com

git: Comment ajouter récursivement tous les fichiers d'un sous-arbre de répertoire qui correspondent à un modèle global?

J'ai plusieurs fichiers .screen dans /xxx/documentation et ses sous-répertoires qui sont déjà suivis par Git.

Après avoir modifié bon nombre de ces fichiers d'écran, j'exécute git add documentation/\\*.screen— comme indiqué par le premier exemple dans git-add documentation - pour mettre en scène ces fichiers, mais la commande échoue:

fatal: pathspec 'documentation/\ *. screen' ne correspond à aucun fichier

Ma commande est-elle mauvaise ou git a-t-il un bug?

56
Phương Nguyễn

C'est un bug dans la documentation. Citez l'astérisque avec

Écran $ git add documentation/\ *.

ou

$ git add 'documentation/*. screen'

pour obtenir le comportement que vous souhaitez.

Si, à la place, vous souhaitez ajouter des fichiers dans le répertoire en cours uniquement, utilisez

$ git add * .screen

MISE À JOUR: J'ai soumis un patch qui corrige le problème, maintenant corrigé à partir de la version 1.6. 6.2.

59
Greg Bacon

J'ai essayé la réponse acceptée, mais cela n'a pas fonctionné pour moi .. alors voici la mienne juste au cas où quelqu'un voudrait faire son travail sans passer du temps à disséquer divers aspects qui pourraient causer le problème:

find documentation -name "*.screen" | xargs git add -u

// l'option -u de git-add ajoute pour indexer uniquement les fichiers qui ont été précédemment suivis et modifiés

17
Flueras Bogdan

Vous avez dit au Shell de rechercher *.screen (c'est-à-dire exactement cette chaîne - qui n'existe pas - au lieu de ce que vous voulez "tous les fichiers se terminant par .screen). Omettez le \\ pour que Shell puisse faire l'extension du nom de fichier pour vous.

4
Aaron Digulla

C'est ce que je viens d'utiliser pour un problème similaire de git en ajoutant tous les fichiers dans un répertoire:

find . | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Pour la question d'origine, la commande serait:

find -name "*.screen" | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Notez que j'ai affaire au cas où un nom de fichier entièrement spécifié contient des espaces. C'est pourquoi ma réponse. Modifiez la portion avant le premier | afin de sélectionner différents fichiers à ajouter.

4
Barnaby Dawson

git add * .Java fonctionne pour moi pour ajouter récursivement tous les fichiers Java

2
Jackie

essayer

git add ./documentation/*.screen
1
kubi