web-dev-qa-db-fra.com

Git: liste uniquement les fichiers "non suivis" (ainsi que les commandes personnalisées)

Est-il possible d’utiliser une commande telle que git ls-files pour n’afficher que les fichiers non suivis?

Je pose la question parce que j'utilise la commande suivante pour traiter tous les fichiers supprimés:

git ls-files -d | xargs git rm

Je voudrais quelque chose de similaire pour les fichiers non suivis:

git some-command --some-options | xargs git add

J'ai pu trouver l'option -o sur git ls-files, mais ce n'est pas ce que je veux, car elle affiche également les fichiers ignorés. J'ai également pu trouver la commande longue et laide suivante:

git status --porcelain | grep '^??' | cut -c4- | xargs git add

Il semble qu'il y ait une meilleure commande que je puisse utiliser ici. Et s'il n'y en a pas, comment créer des commandes git personnalisées?

311
jnylen

Pour lister les fichiers non suivis, essayez:

git ls-files --others --exclude-standard

Si vous devez rediriger la sortie vers xargs, il est judicieux de tenir compte des espaces en utilisant git ls-files -z et xargs -0:

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

Bel alias pour l'ajout de fichiers non suivis:

au = !git add $(git ls-files -o --exclude-standard)

Edit: Pour référence: git-ls-files

487
takeshin

Si vous souhaitez simplement supprimer les fichiers non suivis, procédez comme suit:

git clean -df

ajoutez x à cela si vous souhaitez également inclure des fichiers spécifiquement ignorés. J'utilise git clean -dfx a beaucoup tout au long de la journée.

Vous pouvez créer un git personnalisé en écrivant simplement un script appelé git-whatever et en le gardant sur votre chemin.

68
Dustin

git add -A -n fera ce que vous voulez. -A ajoute tous les fichiers non suivis au référentiel, -n en fait un dry-run où l'ajout n'est pas effectué, mais la sortie de statut est donnée, répertoriant chaque fichier voudrais = ont été ajoutés.

45
Mike Lococo

La réponse acceptée se bloque sur les noms de fichiers avec de l'espace. Je ne sais pas trop comment mettre à jour la commande alias, je vais donc mettre la version améliorée ici:

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

Tout est très simple

Pour obtenir la liste de tous les fichiers non suivis tilisez la commande ) le statut git avec option ) -u (--untracked-files)

git status -u
23
Valentyna

Lorsque vous recherchez des fichiers à ajouter potentiellement. La sortie de git show le fait, mais elle inclut également beaucoup d'autres choses. La commande suivante est utile pour obtenir la même liste de fichiers mais sans tous les autres éléments.

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

Ceci est utile lorsqu'il est combiné dans un pipeline pour trouver des fichiers correspondant à un modèle spécifique, puis canaliser celui-ci vers git add.

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add
5
cmac

Je sais que c’est une vieille question, mais en ce qui concerne la liste des fichiers non suivis, j’envisage d’en ajouter un autre qui répertorie également les dossiers non suivis:

Vous pouvez utiliser l'opération git clean avec -n (exécution à sec) pour vous indiquer les fichiers à supprimer (y compris les fichiers .gitignore) en:

git clean -xdn

Cela présente l'avantage de montrer tous les fichiers et tous les dossiers qui ne font pas l'objet d'un suivi. Paramètres:

  • x - Affiche tous les fichiers non suivis (y compris ceux ignorés par git et autres, comme la sortie de la compilation, etc ...)
  • d - affiche les répertoires non suivis
  • n - et la plupart surtout! - dryrun, c’est-à-dire ne supprimez rien, utilisez le mécanisme de nettoyage pour afficher les résultats.
4
code_fodder

Toutes les réponses précédentes que j'ai vérifiées listeraient également les fichiers à valider. Voici une solution simple et facile qui ne répertorie que les fichiers qui ne sont pas encore dans le référentiel et qui ne sont pas soumis à .gitignore.

git status --porcelain | awk '/^\?\?/ { print $2; }'
1

Je pense que cela aura donc la même chose que l’affiche originale:

git add .

0
Tim Fulmer