Ajouter uniquement des fichiers non suivis

168

L'une des commandes que je trouve incroyablement utiles dans Git est git add -ude jeter tout sauf les fichiers non suivis dans l'index. Y a-t-il un inverse de cela? Au cours des derniers mois, je me suis souvent retrouvé dans une position où j'ai ajouté de manière interactive des mises à jour à l'index et je souhaite ajouter tous les fichiers non suivis à cet index avant de m'engager.

Existe-t-il un moyen d'ajouter uniquement les fichiers non suivis à l'index sans les identifier individuellement? Je ne vois rien d'évident dans la documentation d'aide, mais il me manque peut-être?

Merci.

Rob Wilkerson
la source
1
En ce qui concerne "jeter tout sauf les fichiers non suivis dans l'index", .gitignoreest spécifiquement conçu à cette fin, non git add -u.
Pacerier
En outre, demandez-vous d'ajouter les fichiers non suivis tout en supprimant tous les fichiers actuellement suivis, ou demandez-vous d'ajouter les fichiers non suivis au-dessus de ceux actuellement suivis (en faisant tout suivi)?
Pacerier

Réponses:

237

C'est facile avec git add -i. Tapez a(pour "ajouter non suivi"), puis *(pour "tout"), puis q(pour quitter) et vous avez terminé.

Pour le faire avec une seule commande: echo -e "a\n*\nq\n"|git add -i

Tapis
la source
4
J'espérais qu'il y avait quelque chose de moins, enfin, interactif, mais c'est certainement mieux que fichier par fichier. :-)
Rob Wilkerson
34
echo -e "a\n*\nq\n"|git add -i
Mat
@Mat merci aussi la commande complète ----> git add -ia * q ??
BKSpurgeon
Argument list too long... si proche!
Simeon
1
Pour moi, avec git 2.21.0, c'était git add -ialors 4d'ajouter un suivi, puis *pour tout, puis qde quitter
Harry B
36

git ls-files -o --exclude-standard donne des fichiers non suivis, vous pouvez donc faire quelque chose comme ci-dessous (ou y ajouter un alias):

git add $(git ls-files -o --exclude-standard)
manojlds
la source
1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" fonctionne pour moi
Stephan
git ls-files --help est une lecture assez utile: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann
15

Ce n'est pas exactement ce que vous recherchez, mais j'ai trouvé cela très utile:

git add -AN

Ajoutera tous les fichiers à l'index, mais sans leur contenu. Les fichiers qui n'étaient pas suivis se comportent désormais comme s'ils étaient suivis. Leur contenu sera affiché dans git diff, et vous pourrez ensuite l'ajouter de manière interactive avec git add -p.

hasen
la source
C'est exactement ce que je recherchais - permet également git commit -pde parcourir de nouveaux fichiers.
nitsujri
11

Vous pouvez ajouter ceci à votre fichier ~ / .gitconfig:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Ensuite, à partir de la ligne de commande, exécutez simplement:

git add-untracked
Joshuadavey
la source
J'aime cette approche, mais elle ne gère pas les espaces dans les noms de fichiers.
Paul Coccoli
9

Les gens ont suggéré de rediriger la sortie de git ls-filesto, git addmais cela échouera dans les cas où il y a des noms de fichiers contenant des espaces blancs ou des caractères glob tels que *.

Le moyen le plus sûr serait d'utiliser:

git ls-files -o --exclude-standard -z | xargs -0 git add

-zdit à git d'utiliser des \0terminateurs de ligne et -0dit la même chose à xargs. Le seul inconvénient de cette approche est que l' -0option n'est pas standard, donc seules certaines versions de la xargsprennent en charge.

Tom Fenech
la source
6

git ls-filesrépertorie les fichiers dans le répertoire courant. Si vous souhaitez répertorier les fichiers non suivis de n'importe où dans l'arborescence, cela peut fonctionner mieux:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

Pour ajouter tous les fichiers non suivis dans l'arborescence:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
Pborenstein
la source
6

Je l'ai essayé et ça marche :

git stash && git add . && git stash pop

git stashmettra uniquement tous les fichiers suivis modifiés dans une pile distincte, puis les fichiers restants sont des fichiers non suivis. Ensuite, en faisant, git add .mettra en scène tous les fichiers non suivis, selon les besoins. Finalement, pour récupérer tous les fichiers modifiés de la pile en faisantgit stash pop

Rohan Khude
la source
0

Si vous avez des milliers de fichiers non suivis (euh, ne demandez pas), git add -icela ne fonctionnera pas lors de l'ajout *. Vous obtiendrez une erreur indiquant Argument list too long.

Si vous êtes alors également sous Windows (ne demandez pas # 2 :-) et devez utiliser PowerShell pour ajouter tous les fichiers non suivis, vous pouvez utiliser cette commande:

git ls-files -o --exclude-standard | select | foreach { git add $_ }
Siméon
la source
Une version plus condensée:git ls-files -o --exclude-standard | % { git add $_ }
marckassay
0

Beaucoup de bons conseils ici, mais à l'intérieur de Powershell, je n'ai pas pu le faire fonctionner.

Je suis un développeur .NET et nous utilisons toujours principalement Windows OS car nous n'avons pas tellement utilisé le noyau .Net et les plates-formes croisées, donc mon utilisation quotidienne avec Git se fait dans un environnement Windows, où le shell utilisé est plus souvent Powershell et pas Git bash.

La procédure suivante peut être suivie pour créer une fonction aliasée pour ajouter des fichiers non suivis dans un référentiel Git.

Dans votre fichier de profil $ de Powershell (au cas où il manquerait, vous pouvez exécuter: New-Item $ Profile)

notepad $ Profile

Maintenant, ajoutez cette méthode Powershell:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Enregistrez le fichier de profil $ et rechargez-le dans Powershell. Rechargez ensuite votre fichier de profil $ avec:. $ profil

Ceci est similaire à la commande source dans les environnements * nix IMHO.

Donc, la prochaine fois que vous, si vous êtes développeur en utilisant Powershell dans Windows contre le dépôt Git et que vous souhaitez simplement inclure des fichiers non suivis, vous pouvez exécuter:

AddUntracked-Git

Cela suit la convention Powershell où vous avez des verbes-noms.

Tore Aurstad
la source
0

git add. (ajoutez tous les fichiers de ce répertoire)

git add -all (ajoute tous les fichiers dans tous les répertoires)

git add -N peut être utile pour lister lesquels pour plus tard ....

atreyHazelHispanique
la source
git add -uajoutera des fichiers modifiés non non suivis
Tarasovych
-3

Pour ajouter tous les fichiers non suivis, la commande git est

git add -A

De plus, si vous souhaitez obtenir plus de détails sur les différentes options disponibles, vous pouvez taper commande

git add -i

au lieu de la première commande, vous obtiendrez plus d'options, y compris l'option d'ajouter tous les fichiers non suivis comme indiqué ci-dessous:

$ git add -i avertissement: LF sera remplacé par CRLF dans README.txt. Le fichier aura ses fins de ligne d'origine dans votre répertoire de travail. avertissement: LF sera remplacé par CRLF dans package.json.

* Commandes * 1: état 2: mise à jour 3: retour 4: ajout non suivi 5: patch 6: diff 7: quitter 8: aide Et maintenant> a

L. Sidhu
la source