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.


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


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)

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.


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

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.


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

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


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 $_ }

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.


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.