95 votes

utiliser gitignore pour ignorer (mais pas supprimer) les fichiers

J'ai un répertoire tmp dans mon repo git je voudrais toujours exister, mais être ignoré. Je l'ai ajouté à .gitignore, mais git status encore me parle des changements à des fichiers dans ce répertoire. J'ai essayé d' git rm -r --cached, mais qui enlève de la distance des pensions. Comment puis-je arrêter suivi des modifications apportées à ce répertoire, mais permettent tout de même d'exister? J'ai également besoin de faire cela pour 1 fichier, mais les modifications qui apparaissent également dans git status après .gitignoreing. Que dois-je faire?

177voto

tkoomzaaskz Points 3364

Au lieu de .gitignore , vous pouvez mettre à jour le référentiel git local en exécutant la commande suivante:

 git update-index --assume-unchanged <file>
 

Dans ce cas, un fichier est suivi dans le dépôt d'origine. Vous pouvez le modifier dans votre dépôt local et git ne le marquera jamais comme modifié. En savoir plus sur http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/

11voto

Michaël Witrant Points 4258

En ignorant les modifications apportées aux fichiers, tout en leur permettant d'exister est exactement le but de l' .gitignore. Ainsi, l'ajout de fichiers (ou répertoires) .gitignore est la seule chose que vous avez à faire.

Mais le problème est que git est déjà suivi les fichiers que vous voulez ignorer et .gitignore ne s'applique pas aux dossiers. La seule façon d'arrêter ce suivi est d'indiquer à git pour les supprimer. En utilisant git rm --cached, vous empêcher de git à partir de la suppression de vos fichiers locaux, mais un autre référentiel de l'obtention de vos modifications s'appliqueront à l'enlèvement. Je ne pense pas qu'il y a un moyen d'éviter cela à partir de votre propre référentiel. Vous devez faire quelque chose sur les autres référentiels, ou accepter les fichiers seront supprimés.

Pour empêcher la suppression sur chaque autre référentiel, vous pouvez:

  • (bien évidemment) les fichiers de sauvegarde quelque part, tirer les modifications et restaurer les fichiers,
  • ou aussi git rm --cached les fichiers et de s'engager avant de tirer vos modifications. Git va bien fusionner les deux déménagements sans toucher à la déjà sans traces de fichiers.

7voto

Mat Points 104488

Mettre un / à la fin du nom du répertoire dans votre .gitignore le fichier, c'est à dire

tmp/

Si vous avez suivi les fichiers de ce répertoire, vous devez indiquer à git d'oublier leur premier (avant d'ajouter le dossier à la liste des ignorés). En supposant que vous avez rien de vital (c'est à dire que vous pouvez le rayer):

git rm -rf ./tmp/
git commit -m "untrack tmp dir"
mkdir tmp
echo tmp/ >> .gitignore
git add .gitignore ; git commit -m "add tmp/ to ignore list"

De nouveaux fichiers dans ce répertoire ne seront pas suivis.

L' --cached option d' git rm ne fonctionne que sur l'index (en attente de changements plus ou moins). Il n'a pas d'effet sur l'arbre de travail ou le statut de ce qui a été suivis ou non.

3voto

Gabe Kopley Points 7361

.gitignore n'a aucun effet sur les dossiers.

Ce que vous voulez, c'est de définir le supposer-inchangé peu dans les fichiers tmp/ répertoire. Il y a une bonne explication sur la façon de le faire ici: Git: annuler le suivi d'un fichier en local repo seulement, et conservez-le à distance des pensions de

Aussi, one-liners pour le réglage de l'assumer, il est identique sur tous les fichiers dans un répertoire git update-index --assume-inchangé sur le répertoire .

1voto

Il semble que vous essayez de suivre un fichier (par exemple, index.php), l'ajouter à un dépôt distant, puis arrêter de regarder le suivi, tout en gardant le fichier dans la télécommande (c'est à dire conserver index.php inchangé sur la télécommande repo tout en changeant localement).

Ce que je comprends, git ne peut pas faire cela. Vous pouvez suivre un fichier, ou pas. Si vous suivez un fichier, il existe dans le repo distant, et les changements lorsque vous validez les modifications. Si vous n'avez pas de piste d'un fichier, il n'existe pas dans la distance des pensions.

Parce qu'il n'est pas possible de faire exactement ce que vous voulez avec git, il y a potentiellement d'autres solutions, en fonction de votre situation exacte. Par exemple, pourquoi ne voulez-vous pas index.php de variation sur la télécommande lorsque vous modifier localement? Sont-il des paramètres spécifiques à l'utilisateur dans le fichier? Si c'est le cas, vous pouvez le faire:

cp index.php index_template.php
git rm --cached index.php

Maintenant éditer index_template.php pour être que vous voulez qu'il apparaisse sur la télécommande repo. Ajouter quelque chose à votre fichier README pour dire aux gens à l'aide de votre référentiel, qui, une fois le clone, ils doivent copier index_template.php pour index.php et l'adapter à leurs besoins.

git add index_template.php
git add README
git commit -m 'added template index.php file'
git push

Quand quelqu'un des clones de votre dépôt, ils doivent créer leur propre index.php. Vous avez fait, il est facile pour eux: il suffit de copier index_template.php de index.php et le revoir avec les paramètres spécifiques aux ordinateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X