web-dev-qa-db-fra.com

Comment configurer git pour ignorer certains fichiers localement?

Puis-je ignorer les fichiers localement sans polluer la configuration globale git pour tous les autres? J'ai des fichiers non suivis qui sont du spam dans mon statut de git mais je ne veux pas valider les modifications apportées à la configuration de git pour chaque petit fichier aléatoire non traqué que j'ai dans mes branches locales.

1184
Bjorn Tipling

De la documentation Git appropriée :

Les modèles qui sont spécifiques à un référentiel particulier mais qui n'ont pas besoin d'être partagés avec d'autres référentiels associés (par exemple, des fichiers auxiliaires résidant dans le référentiel mais spécifiques au flux de travail d'un utilisateur) doivent être placés dans le fichier $GIT_DIR/info/exclude.

Le fichier .git/info/exclude a le même format que n’importe quel fichier .gitignore. Une autre option consiste à définir core.excludesFile sur le nom d'un fichier contenant des modèles globaux.

Notez que si vous avez déjà des modifications non mises en scène, vous devez exécuter les opérations suivantes après la modification de vos modèles ignorés:

git update-index --assume-unchanged [<file>...]

Note sur $GIT_DIR: Ceci est une notation utilisée partout le manuel git simplement pour indiquer le chemin d'accès au référentiel git. Si la variable d'environnement est définie, elle remplacera l'emplacement du référentiel dans lequel vous vous trouvez, ce qui n'est probablement pas ce que vous voulez.

1620
Josh Lee

Mise à jour : envisagez d'utiliser git update-index --skip-worktree [<file>...] à la place, merci @danShumway! Voir explication de Borealid sur la différence des deux options .


Ancienne réponse:

Si vous devez ignorer les modifications locales apportées aux fichiers suivis (nous en avons pour les modifications locales des fichiers de configuration), utilisez git update-index --assume-unchanged [<file>...].

413
Florian Sesser

Ajoutez les lignes suivantes à la section [alias] de votre fichier .gitconfig

ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"

Vous pouvez maintenant utiliser git ignore my_file pour ignorer les modifications apportées au fichier local et git unignore my_file pour ne plus ignorer les modifications. git ignored liste les fichiers ignorés.

Cette réponse a été obtenue à partir de http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html .

146
phatmann

Vous avez plusieurs options:

  • Laissez un fichier sale [ou non signé) .gitignore dans votre répertoire de travail (ou appliquez-le automatiquement à l'aide de topgit ou d'un autre outil de type correctif).
  • Placez les exclus dans votre fichier $GIT_DIR/info/exclude, si cela est spécifique à un arbre.
  • Exécutez git config --global core.excludesfile ~/.gitignore et ajoutez des motifs à votre ~/.gitignore. Cette option s'applique si vous souhaitez ignorer certains modèles dans tous les arbres . J'utilise ceci pour les fichiers .pyc et .pyo, par exemple.

Assurez-vous également que vous utilisez des modèles et ne pas énumérer explicitement les fichiers, le cas échéant.

104
Emil Sit

Je pense que vous recherchez:

git update-index --skip-worktree FILENAME

qui ignorent les changements faits localement

Voici http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ plus d'explications sur ces solutions!

50
Piotr Korlaga

Vous pouvez installer des git aliases pour simplifier ce processus. Ceci édite le noeud _[alias]_ de votre fichier _.gitconfig_.

_git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep "^S"'
_

Les raccourcis installés par vous sont les suivants:

  • _git ignore config.xml_
    • git prétendra qu'il ne voit aucun changement sur _config.xml_ - vous empêchant de valider ces changements par inadvertance.
  • _git unignore config.xml_
    • git continuera à accuser réception de vos modifications apportées à _config.xml_ - vous permettant ainsi de valider à nouveau ces modifications.
  • _git ignored_
    • git listera tous les fichiers que vous "ignorez" de la manière décrite ci-dessus.

J'ai construit ceux-ci en faisant référence à réponse de phatmann - qui présente une version _--assume-unchanged_ de la même chose.

La version que je présente utilise _--skip-worktree_ pour ignorer les modifications locales. Voir réponse de Borealid pour une explication complète de la différence, mais le but principal de _--skip-worktree_ est de permettre aux développeurs de modifier des fichiers sans risquer de les valider .

La commande _git ignored_ présentée ici utilise _git ls-files -v_ et filtre la liste pour afficher uniquement les entrées commençant par la balise S. La balise S indique un fichier dont le statut est "ignorer la structure de travail". Pour obtenir la liste complète des statuts de fichier affichés par _git ls-files_: voir la documentation de l'option _-t_ sur git ls-files .

45
Birchlabs

Vous pouvez simplement ajouter un fichier .gitignore à votre répertoire personnel, à savoir $HOME/.gitignore ou ~/.gitignore. Puis dites à git d’utiliser ce fichier avec la commande:

git config --global core.excludesfile ~/.gitignore

C'est un fichier .gitignore normal qui référence git pour décider quoi ignorer. Comme il se trouve dans votre répertoire personnel, il s’applique uniquement à vous et ne pollue aucun fichier .gitignore du projet.

J'utilise cette approche depuis des années avec d'excellents résultats.

33
JESii

Si votre référentiel ne dispose pas déjà d'un fichier .gitignore, une solution simple consiste à créer un fichier .gitignore et à y ajouter .gitignore à la liste des fichiers à ignorer.

0
g.rocket