"git add" utiliser le Joker ne fonctionne pas comme je l'espérais - dois-je cd dans des répertoires spécifiques?

Quand j'essaie de faire une base git add *.erb (ou n'importe quelle simple expression de Joker) git ne la reconnaît pas. Comme une petite note, je n'ai jamais fait cela avant donc je suis sûr que c'est une erreur de débutant, mais je n'ai trouvé aucune aide dans d'autres postes de SO ou de liste des anciens de mon école donc j'ai pensé que ce poste pourrait être approprié.

Pour (un), par exemple, statut git me donne:

#   modified:   config/routes.rb
#   modified:   spec/models/question_spec.rb

je voulais seulement mettre en scène le fichier des routes, donc j'ai essayé git add *s.rb et pas de dés. Je suis dans la racine de l'application...je dois être dans le répertoire qui contient le fichier(s) je suis en train d'appliquer l'expression générique? Ce serait douloureux, mais...en fait...ça a fonctionné.

espérons que ce ne doit pas être un post séparé, mais y a-t-il une façon plus facile d'utiliser des caractères génériques où vous n'avez pas à cd dans le répertoire spécifique?

42
demandé sur RudyOnRails 2012-08-22 08:07:55

3 réponses

mettez-le autour des guillemets simples. Cela devrait fonctionner.

git add '*s.rb'

UPDATE

Après plusieurs essais, je trouve que je peux même le faire git add *s.rb sans les guillemets. Cela pourrait juste fonctionner pour moi avec ma version git 1.7.10.4 (Mac OSX Lion, homebrew). Mon explication est que si l'extension shell wildcards ne correspond à aucun fichier, elle fournira l'argument original non agrandi 's*.rb ' to git add.

sh-3.2$ git status
#
#   modified:   config/routes.rb
#   modified:   spec/models/products_spec.rb
#

Maintenant, je ne git add sans citation.

sh-3.2$ git add *s.rb

étonnamment ça marche!

sh-3.2$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   config/routes.rb
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   spec/models/products_spec.rb
#

si wildcard pattern ne correspond à aucun fichier, git affichera cette erreur.

sh-3.2$ git add *x.rb
fatal: pathspec '*x.rb' did not match any files
66
répondu user673207 2012-08-22 05:35:49

Je n'arrive pas à faire fonctionner les globs récursifs pour moi car ma version de bash est trop ancienne. Donc ce que je fais est

find . -name "*.rb" | xargs git add

fonctionne un treat et je peux y ajouter d'autres filtres si j'en ai besoin - donc si je veux ajouter tous les fichiers sauf un je peux le faire.

find . -name "*.rb" | grep -v "not_me.rb" | xargs git add

il y a quelques autres cas qui peuvent être utiles.

Si vous souhaitez simplement ajouter des fichiers qui existent déjà dans votre pension, vous pouvez

git add -u .

Si vous souhaitez ajouter chaque chose, puis

git add .
4
répondu Michael Anderson 2012-08-22 04:25:48

D'après mon expérience (il se peut que je manque une option ou quelque chose), git add ne regarde que les fichiers du répertoire courant et du sous-répertoire. Donc si vous voulez tout ajouter, allez dans le répertoire racine du repo. Bien que si le repo est vraiment grand, cela pourrait prendre un certain temps, surtout si vous ne passez pas le drapeau-U.

0
répondu Antimony 2012-08-22 04:13:49