web-dev-qa-db-fra.com

Ajout de fichiers non suivis

Une des commandes que je trouve incroyablement utile dans Git est git add -u pour tout jeter, 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 trouvé dans une position dans laquelle j'ai interactivement ajouté des mises à jour à l'index et je voulais ajouter tous les fichiers non suivis à cet index avant de valider.

Existe-t-il un moyen d’ajouter seulement les fichiers non suivis à l’index sans les identifier individuellement? Je ne vois rien d’évident dans les documents d’aide, mais peut-être que je le manque?

Merci.

129
Rob Wilkerson

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

192
Mat

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

git add $(git ls-files -o --exclude-standard)
28
manojlds

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

git add -AN

Va ajouter tous les fichiers à l'index, mais sans leur contenu. Les fichiers non suivis se comportent maintenant comme s'ils avaient été suivis. Leur contenu sera affiché dans git diff, et vous pouvez ensuite ajouter de manière interactive avec git add -p.

10
hasen

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

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

Ensuite, depuis la ligne de commande, lancez simplement:

git add-untracked
9
joshuadavey

Des personnes ont suggéré de détourner la sortie de git ls-files vers git add, mais cela échouera s'il existe des noms de fichiers contenant des espaces ou des caractères globaux tels que *.

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

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

-z dit à git d'utiliser \0 les terminateurs de ligne et -0 dit le même chose à xargs. Le seul inconvénient de cette approche est que l'option -0 est non standard, de sorte que seules certaines versions de xargs la prennent en charge.

8
Tom Fenech

git ls-files liste les fichiers du répertoire en cours. Si vous voulez lister les fichiers non suivis de n'importe où dans l'arborescence, cela pourrait mieux fonctionner:

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
3
pborenstein

Je l'ai essayé et ça marche :

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

git stash mettra uniquement tous les fichiers suivis modifiés dans une pile séparée, les fichiers restants étant des fichiers non suivis. Ensuite, en faisant git add ., tous les fichiers non suivis seront stockés, selon les besoins. Finalement, pour obtenir l'ensemble de tous les fichiers modifiés de la pile par git stash pop

2
Rohan Khude

git add. (ajouter tous les fichiers dans ce répertoire)

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

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

0
atreyHazelHispanic

Si vous avez des milliers de fichiers non suivis (ne demandez pas), alors git add -i ne fonctionnera pas si vous ajoutez *. Vous obtiendrez une erreur indiquant Argument list too long.

Si vous êtes é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 $_ }
0
Simeon

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

Je suis un développeur .NET et nous utilisons toujours principalement le système d’exploitation Windows, car nous n’avons pas beaucoup utilisé .Net et la plate-forme multipliée; mon utilisation quotidienne avec Git se fait donc dans un environnement Windows, où le shell utilisé est plus souvent utilisé par Powershell. et pas Git bash.

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

Dans votre fichier $ profile de Powershell (s'il est manquant, vous pouvez exécuter: New-Item $ Profile)

bloc-notes $ Profile

Ajoutez maintenant cette méthode Powershell:

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

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

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

Ainsi, la prochaine fois que vous, développeur, utilisez Powershell dans Windows contre le dépôt Git et que vous souhaitez uniquement inclure des fichiers non suivis, vous pouvez exécuter:

AjouterUntracked-Git

Cela suit la convention Powershell où vous avez des noms de verbe.

0
Tore Aurstad