2009-03-17 11 views
152

Puis-je dire à git d'ignorer les fichiers modifiés (supprimés) mais qui ne doivent pas être validés? La situation est que j'ai un sous-répertoire dans le repo qui contient des choses qui ne m'intéressent pas du tout, donc je l'ai supprimé pour l'empêcher d'apparaître dans les auto-complétions et autres (dans l'EDI). Mais maintenant, si j'ajoute ce dossier à .gitignore, rien ne change, tout est montré comme supprimé par git status.Ignorer les fichiers modifiés (mais non validés) dans git?

Existe-t-il un moyen de faire en sorte que git ne l'ignore pas?

(Sinon, comme je suis en utilisant git-svn, pourrais-je valider les modifications au git local et veiller à ce qu'ils ne sont pas répercutés sur le repo svn?)

+0

au lieu de les marquer comme non modifiée de l'indice des prises en pension, vous pouvez les supprimer de l'index complètement. Ainsi, alors que vous aurez toujours le fichier dans votre répertoire de travail, l'index repo peut être entièrement supprimé, et git ne le verra même pas du tout exister. S'il vous plaît voir le lien dans ma réponse ci-dessous. – MaurerPower

Répondre

231

vérifier la git-update-index man page et le --assume-inchangé b et lié.

quand j'ai votre problème, je le faire

git update-index --assume-unchanged dir-im-removing/ 

ou un fichier spécifique

git update-index --assume-unchanged config/database.yml 
+0

Cela fonctionne très bien pour les fichiers modifiés. Cependant quand je supprime le dir (soit avec 'rm' ou 'git rm') les fichiers sont listés comme manquant/effacé dans 'git status'. Je pense que je vais accepter cela comme une réponse et reformuler la question explicitement poser des questions sur les fichiers supprimés. (Au début, je ne savais pas qu'il y avait une telle grande différence;) Merci! –

+3

Pouvez-vous lister tous vos fichiers ignorés en quelque sorte? – Zitrax

+4

Zitrax, oui, voir http://stackoverflow.com/questions/2363197/ –

6

fichiers chenillés ne peuvent pas être ignorés, Vous devrez donc d'abord les supprimer de votre index. Ajoutez un .gitignore qui ignore les répertoires que vous ne voulez pas, puis supprimez-les et supprimez tous les retardataires avec git rm --cached.

+0

Hm, j'essaie ça, mais j'ai tous les fichiers listés comme effacés. Est-ce que je devrais commettre cela et le --cached fera que ce ne sera pas poussé aux télécommandes? Ou ai-je eu sth. faux? Le plus important pour moi n'est pas de corrompre le repo distant (svn). –

+1

Vous ne pouvez pas valider quoi que ce soit qui ne commence pas dans votre index. git rm --cache tout ce que vous ne voulez pas valider, puis ajoute un fichier .gitignore localement qui contient "*". Maintenant, peu importe combien vous ajoutez, vous ne verrez plus jamais ces fichiers dans votre index. –

+0

Ah, je pense que je comprends --cache maintenant ..Il ne fait que supprimer les données de l'index, et laisse l'arbre de travail seul. Je ne suis pas sûr de savoir s'il me manque quelque chose, mais AFAIS je cherche le contraire, le retirant de l'arbre de travail sans toucher à l'index. Ou puis-je l'utiliser pour ça? –

4

Ce que je fais habituellement est

git stash

git

tout-autre

appliquent git stash

git stash clair

+9

fwiw vous pouvez aussi 'git stash pop' pour faire ces deux derniers à la fois (bien que 'git stash clear' effacera TOUTES les entrées de cachette, si vous le voulez). – Groxx

36

Une nouvelle option et mieux est git update-index --skip-worktree qui ne sera pas perdu sur un disque ou une remise à zéro nouveau changement d'une traction.

Voir la page de manuel à http://schacon.github.com/git/git-update-index.html

Et une comparaison à http://fallengamer.livejournal.com/93321.html

+8

Un inconvénient à noter est qu'une fois les modifications d'un fichier ont été cachées avec 'skip-worktree', trouver ces fichiers est un peu lourd. Le seul moyen que je connaisse est 'git ls-files -v | grep -v '^ H''. En outre, de nombreux outils GUI ne sont pas au courant de cette fonctionnalité et peuvent produire des erreurs amusantes si, par ex. un 'checkout' échoue à cause de fichiers modifiés" cachés ". – sleske

+0

+1 sleske, car cette commande m'a sauvé après avoir "sauté" accidentellement un fichier! –

3

Utilisez ce code

git update-index --assume-unchanged file-name 
+0

Vraiment intéressant. Je dois utiliser un mot de passe dans mon projet maven mais je ne veux pas le publier sur un dépôt git, donc je le place sans valeur dans local, propriétés, je le commets, puis j'insère le mot de passe, mais marque le fichier inchangé avec votre commande suggérée. Donc le mot de passe n'est pas publié. –

Questions connexes