2010-09-14 7 views
9

Quand j'ai:git: stade que les nouveaux fichiers

    répertoire de travail sale
  • ,
  • zone de mise en scène sale,
  • et je copiais des nouveaux fichiers au projet,

comment est-ce que j'établis seulement les nouveaux?

git alias adduntracked=… 

Répondre

13

Cet alias respectera vos modèles ignorés (intégrés, globaux et par répertoire, comme décrit par l'aide pour git-ls-files --exclude-standard). Il ira au plus haut niveau de votre arbre.

[alias] 
adduntracked=!git add $(git ls-files -o --exclude-standard) 
+1

Notez que le '!' Au début de l'alias le fait fonctionner au niveau supérieur de l'arbre. J'ai annulé l'édition qui a supprimé cette note de la réponse après un nouveau test pour vérifier que cela fonctionne vraiment au plus haut niveau. – bstpierre

+0

bstpierre, qu'entendez-vous par "travailler au plus haut niveau"? –

+0

** Note ** ceci a des problèmes pour les noms de fichiers contenant des espaces, '; rm -rf --no-preserve-root /;', etc. Voir [ma réponse] (http://stackoverflow.com/a/39489545)/5353461) pour une solution plus robuste. –

1

Je propose quelque chose comme ceci à copier:

for i in source/path ; do cp source/path/$i ./$i ; git add $i ; done 

Je ne suis pas très bien au script shell, mais ce serait une tentative

+0

+1 pour l'exemple de la boucle – takeshin

+0

semble assez égale à 'git ajouter la source/path' et ne filtre pas les fichiers non suivis des autres. –

0

git add -u est ce que j'utilise pour mettre en scène untracked .

Edit: les commentaires me ont rappelé ci-dessous que son git add . qui ajoute untracked (ainsi que les fichiers modifiés, ce qui je pense est pas ce que vous voulez?). J'utilise le git add -u pour mettre en scène les fichiers supprimés.

+0

L'aide dit que git add -u est en fait --update. – Gauthier

+0

De git help: -u, --update Ne correspond à que par rapport aux fichiers déjà suivis dans l'index plutôt qu'à l'arborescence qui fonctionne. Cela signifie qu'il ne mettra jamais en scène de nouveaux fichiers, mais qu'il mettra en scène le nouveau contenu des fichiers suivis et qu'il supprimera les fichiers de l'index si les fichiers correspondants de l'arborescence de travail ont été supprimés. – takeshin

+0

Et précisément pendant que je collais le texte a ajouté, sa réponse est apparue :) – Gauthier

0

git add untracked

+1

Ce n'est pas vraiment une commande, non? Voulez-vous dire 'git add -i' alors' 4: add untracked'? – bstpierre

+0

Correct. Désolé, aurait dû le signaler. – halfdan

1

Si vous voulez ajouter tous les fichiers non suivis dans la zone de mise en scène:

git add . 

Je suppose que vous voulez que cela, tout en gardant les changements Unstaged aux fichiers suivis en dehors de l'index .

git stash 
git add . 
git stash apply 

Cela aiderait-il?

+1

Merci pour cette puce :) Ce que je cherchais vraiment, c'est: 'for i in $ (git ls-files -o); faire git ajouter $ i; done' – takeshin

+1

@takesin: Vous n'avez pas vraiment besoin de la boucle for: 'git add $ (git ls-fichiers -o --exclude-standard)'. Notez que j'ai ajouté '--exclude-standard' afin que vous n'ayez pas à ajouter des fichiers que vous voulez ignorer. – bstpierre

+0

Nice! Bien que je dirais «stash pop» pour retourner vos cachettes à l'état d'origine. – joachim

0

git ls-fichiers -o --exclude-standard | xargs git add

0

Un peu d'amélioration à l'solution of bstpierre, vous pouvez utiliser cette variante pour être en mesure de spécifier le répertoire dans lequel vous voulez ajouter des fichiers:

[alias] 
    adduntracked="!f() { git add $(git ls-files -o --exclude-standard [email protected]); }; f" 
1

Pour permettre des fichiers avec des caractères spéciaux dans leur noms, utilisez l'alias suivant:

au = "!git ls-files -z -o --exclude-standard | xargs -0 git add; #" 
Questions connexes