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 .gitignore
ing. Que dois-je faire?
Réponses
Trop de publicités? 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/
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.
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.
.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 .
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.