“git add” à l'aide de caractères génériques ne fonctionne pas comme je l'espérais - je dois cd dans des répertoires spécifiques?
Quand j'ai essayer de faire une base git add *.erb (ou tout simple des expressions génériques) git est de ne pas reconnaître le (les). Comme une note, je ne l'ai jamais fait avant, donc je suis sûr que c'est une erreur de débutant, mais j'ai trouvé aucune aide chez d'autres postes ou de mon école des anciens de la liste de diffusion de sorte que je pensais que ce poste peut être approprié.
Pour (un), par exemple, git status me donne:
# modified: config/routes.rb
# modified: spec/models/question_spec.rb
Je voulais seulement en scène le fichier de routes, j'ai donc 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 pour? Ce serait douloureux, mais...en fait...ça a fonctionné.
Espère que ce n'est pas un post, mais est-il un moyen plus facile d'utiliser des caractères génériques où vous n'avez pas de cd dans le répertoire spécifique?
- Lors de l'utilisation de ma coquille (
zsh
), j'git add *.cpp<TAB>
, et le shell se termine le générique pour le nom de fichier complet.git add **/*.cpp<TAB>
n'touscpp
les fichiers sous le répertoire courant. Bash peut avoir quelque chose de similaire. - Bash v4 et plus prend en charge
**
pour récursive d'expansion (wiki.bash-hackers.org/syntax/expansion/globs), donc si vous utilisez une version suffisamment récente version de bash,git add **/*.rb
devrait faire ce que vous voulez. - Merci @simont @Michael. Ces deux aboyaient dans le bon arbre. J'ai utilisé
git add **/*s.rb
et je suis tout bon! - J'ai essayé
git add */*s.rb
ainsi et a été un succès. Le*/
agir comme un remplacement pour un répertoire de plus profond, mais**/
désigner récursive infinie répertoires? Si je devais poser une nouvelle question, laissez-moi savoir! - C'est correct.
*/*s.rb
correspondra tout se terminant par "s.rb" un répertoire de profondeur (et pas dans le répertoire courant et de la profondeur). De même*/*/*s.rb
serait tout se terminant par "s.rb" deux répertoires de profondeur, mais nulle part ailleurs (plus ou moins profond).
Vous devez vous connecter pour publier un commentaire.
Mettre autour de guillemets simples. Cela devrait fonctionner.
git add '*s.rb'
Mise à JOUR
Après plusieurs essais, je trouve que je peux même faire
git add *s.rb
sans les guillemets. Ce pourrait bien fonctionné pour moi avec ma version git 1.7.10.4 (Mac OSX Lion, homebrew). Mon explication est que, si les caractères génériques du shell extension ne correspond pas à un fichier, il faudrait fournir l'original non développé l'argument '*s.rb " pourgit add
.Maintenant, je ne
git add
sans les guillemets.Étonnamment ça marche!!!
Si le modèle générique ne correspond pas à un fichier, git va donner cette erreur.
*s.rb
sans les guillemets fonctionnera à condition qu'il n'y a pas des résultats réels dans le répertoire courant. C'est, si*s.rb
ne correspond à rien, il est passé tel-quel à la demande.Je ne peux pas obtenir récursive des boules de travailler pour moi que ma version de bash est trop vieux. Donc ce que je fais est
Fonctionne un régal et je peux ajouter d'autres filtres-il si j'ai besoin d' - donc, si je veux ajouter tous, mais l'un fichier que je peux faire.
Il ya une couple d'autres cas qui peuvent être utiles.
Si vous souhaitez simplement ajouter des fichiers qui existent déjà dans votre pension, vous pouvez
Si vous souhaitez ajouter chaque chose, puis
Dans mon expérience (j'ai peut-être manque une option ou quelque chose), git add regarde uniquement les fichiers dans le répertoire courant et le répertoire. Donc, si vous voulez ajouter de tout, aller dans le répertoire racine de l'opération. Mais si l'opération est vraiment très grand, cela pourrait prendre un certain temps, surtout si vous ne passez pas l'-u.