git: Comment ignorer tous les fichiers non suivis présents?

Existe-t-il un moyen pratique d’ignorer tous les fichiers et dossiers non répertoriés dans un repository git?
(Je connais le .gitignore .)

Le git status fournirait donc un nouveau résultat.

Comme déjà dit, pour exclure du statut, utilisez simplement:

 git status -uno # must be "-uno" , not "-u no" 

Si, à la place, vous souhaitez ignorer de manière permanente les fichiers actuellement non suivis, vous pouvez, à partir de la racine de votre projet, lancer:

 git status --porcelain | grep '^??' | cut -c4- >> .gitignore 

Chaque appel ultérieur à l’ git status ignorera explicitement ces fichiers.

UPDATE : la commande ci-dessus présente un inconvénient mineur: si vous ne possédez pas de fichier .gitignore , votre gitignore s’ignorera lui-même! Cela se produit car le fichier .gitignore est créé avant l’ git status --porcelain . Donc, si vous n’avez pas encore de fichier .gitignore , je vous recommande d’utiliser:

 echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore 

Cela crée un sous-shell qui se termine avant la .gitignore fichier .gitignore .

EXPLICATION DE COMMANDE car je reçois beaucoup de votes (merci!) Je pense que je ferais un peu mieux expliquer la commande:

  • git status --porcelain est utilisé à la place de git status --short parce que manual indique “Donne la sortie dans un format facile à parsingr pour les scripts. Ceci est similaire à la sortie courte, mais restra stable sur les versions de git et indépendamment de configuration utilisateur. ” Nous avons donc à la fois la parsabilité et la stabilité;
  • grep '^??' filtre uniquement les lignes commençant par ?? , qui, selon le manuel d’état git , correspondent aux fichiers non suivis;
  • cut -c4- supprime les 3 premiers caractères de chaque ligne, ce qui ne nous donne que le chemin relatif du fichier non suivi;
  • le | les symboles sont des tubes , qui transmettent la sortie de la commande précédente à l’entrée de la commande suivante;
  • les symboles >> et > sont des opérateurs de redirection , qui ajoutent la sortie de la commande précédente à un fichier ou écrasent / créent respectivement un nouveau fichier.

Une autre variante pour ceux qui préfèrent utiliser sed au lieu de grep et cut , voici un autre moyen:

 git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore 

Si vous voulez ignorer ces fichiers de manière permanente, une manière simple de les append à .gitignore est

 git ls-files --others --exclude-standard >> .gitignore 

Trouvé dans le manuel

git status -uno

-u no ne montre pas non plus les fichiers non -uno fonctionne comme vous le souhaitez et ne montre pas de scènes, mais rest caché.

Deux façons:

utilisez l’argument “-uno” pour git-status. Voici un exemple:

 [jenny@jenny_vmware:ft]$ git status # On branch ft # Untracked files: # (use "git add ..." to include in what will be committed) # # foo nothing added to commit but untracked files present (use "git add" to track) [jenny@jenny_vmware:ft]$ git status -uno # On branch ft nothing to commit (working directory clean) 

Ou vous pouvez append les fichiers et les diriger vers .gitignore, auquel cas ils ne seront jamais affichés.

Au cas où vous ne seriez pas sur Unix comme le système d’ exploitation, cela fonctionnerait sous Windows en utilisant PowerShell

git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore

Cependant, le fichier .gitignore doit avoir une nouvelle ligne vide, sinon il appenda du texte à la dernière ligne, peu importe si elle contient du contenu.

Cela pourrait être une meilleure alternative:

$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore

Si vous avez beaucoup de fichiers non suivis, et que vous ne voulez pas les ” gitignore ” tous, notez que depuis git 1.8.3 (22 avril 2013) , git status mentionnera les --untracked-files=no even si vous n’avez pas ajouté cette option en premier lieu!

git status ” suggère aux utilisateurs de chercher à utiliser --untracked=no option quand cela prend trop de temps.