"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?
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
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 .
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.