web-dev-qa-db-fra.com

Git: Exclure un fichier avec git clean

je travaille sur un gros projet python et je suis vraiment malade si les fichiers .pyc et * ~. Je voudrais les enlever. J'ai vu que l'indicateur -X de git clean supprimerait les fichiers non suivis. Comme vous pouvez l’imaginer, je ne suis pas en train de suivre les fichiers .pyc ni *~. Et ça ferait l'affaire. Le problème est que j'ai un fichier local_settings.py que j'aimerais conserver après le nettoyage.

Donc, voici ce que j'ai.

.gitignore:

*.pyc
*~
local_settings.py

Quand j'exécute cette commande:

git clean -X -n -e local_settings.py

Je reçois cette liste de résultats:

Enlèverait local_settings.py
Enlèverait les exigences.txt ~
Supprimerait (autre groupe de) ~ fichiers
Supprime (autre groupe de) fichiers pyc 

Je ne veux pas supprimer le fichier local_settings.py. J'ai essayé de nombreuses façons de le faire, mais je n'arrive pas à comprendre comment le réaliser.

git clean -X -n -e local_settings.py
git clean -X -n -e "local_settings.py"
git clean -X -n --exclude=local_settings.py
git clean -X -n --exclude="local_settings.py"

Et rien ne semble fonctionner.

MODIFIER:

Pour la postérité, la bonne façon de le faire est (Merci @Rifat):

git clean -x -n -e local_settings.py # Shows what would remove (-n flag)
git clean -x -f -e local_settings.py # Removes it (note the -f flag)
30
santiagobasulto

Voulez-vous s'il vous plaît essayer cela avec un petit x au lieu de celui majuscule. J'aime - git clean -x

git clean -x -n -e local_settings.py # Shows what would remove (-n flag)
git clean -x -f -e local_settings.py # Removes it (note the -f flag)

Depuis la documentation git :

   -x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

   -X
       Remove only files ignored by git. This may be useful to rebuild
       everything from scratch, but keep manually created files.
20
Rifat
git clean -X -n --exclude="!local_settings.py"

travaux. J'ai découvert cela quand j'ai googlé et j'ai cette page .

13
forivall

Je mets les fichiers locaux qui entrent dans cette catégorie dans .git/info/exclude (par exemple, mes fichiers de projet IDE). Ils vous pouvez faire un nettoyage comme ça:

git ls-files --others --exclude-from=.git/info/exclude -z | \
    xargs -0 --no-run-if-empty rm --verbose

Où:

  • --others: affiche les fichiers non suivis
  • --exclude-from: fournit un fichier de style git ignore standard à exclure de la liste
  • -z/-0: utilisez\0 au lieu de\n pour séparer les noms
  • --no-run-if-empty: Ne lance pas rm si la liste est vide

Vous pouvez créer un alias, par exemple:

git config --global alias.myclean '!git ls-files --others --exclude-from=.git/info/exclude -z | xargs -0 --no-run-if-empty rm --verbose --interactive'

Le paramètre --interactive signifie que vous devez utiliser git myclean -f pour forcer la suppression.

Référence: http://git-scm.com/docs/git-ls-files (plus la première ligne du fichier .git/info/exclude par défaut)

3
Jonah Graham

Si vous avez déjà commis les pyc et ainsi de suite, procédez comme suit:

Ajoutez * .pyc, * ~ et local_settings.py au .gitignore. Faites ensuite dans votre dépôt git:

find . -name '*.pyc' | xargs rm
find . -name '*~' | xargs rm

alors fais:

git commit -am "get rif of them"

maintenant ils ne devraient plus vous déranger

0

Si vous utilisez Python 2.6+, définissez simplement la variable d'environnement, PYTHONDONTWRITEBYTECODE, sur true. Vous pouvez simplement ajouter ce qui suit à quelque chose comme .profile ou .bashrc pour le désactiver entièrement pour votre profil:

export PYTHONDONTWRITEBYTECODE=true

Ou, si vous souhaitez simplement le faire pour un projet particulier sur lequel vous travaillez, vous devez exécuter ce qui précède dans votre shell à chaque fois (ou dans l'un de vos scripts d'initialisation virtualenv si vous utilisez virtualenv et virtualenvwrapper), ou vous pouvez simplement passer le paramètre -B lorsque vous appelez python, par exemple.

python -B manage.py runserver
0
Chris Pratt