Petit problème gitignore
J'ai un problème sur un projet sur lequel je bosse avec des potes.
On est en train de monter un petit framework php et dans le projet on a un dossier avec des fichiers de config yml (relatifs à la bdd entre autres, pour simplifier je ne vais parler que d'un fichier).
Comment faire pour que ce fichier yml existe toujours sur le repo en ligne mais ne soit plus suivi localement?
C'est à dire sur nos repos locaux on puisse modifier ce fichier sans que les modifications soient prises en compte une fois que l'on push nos commits sur notre serveur gitlab (raspberry <3).
Mon gitignore (dans le dossier principal) contient:
src/config/yaml/database.yml
Pour que le fichier gitignore soit pris en compte et fonctionne j'ai fait:
git rm --cached src/config/yaml/database.yml (sans cette commande la modification de database.yml n'est pas ignorée)
http://fr.gitready.com/beginner/2009/03/06/ignoring-doesnt-remove-a-file.html
Là le gitignore fonctionne bien mais si je push, database.yml aura disparu sur le repo en ligne(ce qui est logique vu la dernière commande exécutée) et ce n'est pas ce que je souhaite. Je veux garder une version de database.yml sur le repo en ligne.
Bisous
TL:DR Je souhaite qu'un fichier continue d'exister sur un repository en ligne mais que les modifications de ce dernier soit ignorées localement (pas prises en compte par Git)
Si tu ne fait pas le git rm ca règle pas le souci ? Ou alors revert le commit qui contient la suppression du fichier
@Gigowatt:
git add lefichier
tu le met à l'état que tu le veut sur le repo
git commit & push
tu le rajoute dans le gitignore
git rm lefichier
Pas sûr mais ça devrait le faire
@Appineos: Justement non j'ai essayé, c'est pour ça que ce problème m'agasse. Pour que ça fonctionne git rm --cached obligatoire :S (ou alors j'ai fait une fausse manip quelque-part mais je ne la vois pas)
@Gigowatt: Essaye ce qui est proposé là http://stackoverflow.com/questions/21756531/git-ignore-local-changes-to-tracked-files
@Appineos: Je testerai demain (enfin tt à l'heure) et donnerai des nouvelles, ça a l'air prometteur en tout cas
@Appineos:
git update-index --assume-unchanged nomfichier.truc
git update-index --no-assume-unchanged nomfichier.truc
Le duo gagnant ! Merci bro'
Tu ne vois pas le problème sous le bon angle.
Je te conseille de faire en sorte que le fichier ne soit justement pas sur le repo, et de le créer directement sur le serveur de production (par exemple).
Inspirez vous du parameter.yml de symfony qui est ignoré par git de base, et est créé lors du deploiement de l'application.
@rekted: Merci de ta réponse mais qu'est ce que tu entends par crée lors du déploiement de l'application (j'ai juste quelques notions de symfony)? Quand tu télécharge symfony, parameter.yml est bien dans gitignore mais pour autant le fichier parameter.yml existe bien de base dans app/config (ce que je souhaite accomplir en fait).
Ou alors j'ai mal compris, ce que tu me dis c'est que lors de l’installation de symfony ce fichier parameter.yml est généré par php et n'est pas présent de base dans les dépots en ligne c'est ça ? Merci et désolé si la question est idiote
@Gigowatt: en gros le parameter.yml de symfony n'est pas versionné car il est propre à chaque déploiement. Tu le configure au début de la mise en place, ce qui te permet de ne changer que ce fichier là pour changer de configuration, sans créer de conflit inutile sur le git.
Tu mets le fichier dans ton grignote et après tu fais une fois un git add -f doublefaciale.yml
@Offerzo: Nope avec git add -f doublefaciale.yml, les modifs du fichiers sont de nouveau trackées. Je vais test la soluce d'Appineos
EDIT:
la soluce
git update-index --assume-unchanged nomfichier.truc
git update-index --no-assume-unchanged nomfichier.truc
La meilleurs solution est de faire un fichier ce config type : si ton fichier de conf est "database.yml", alors tu vas versionner un fichier "database.yml-dist". Ainsi, tu pourras faire évoluer le niveau de configuration en concervant le versionning. Ça sera de la responsabilité du développeur d'alimenter le fichier "database.yml".
@Simmstein: database.yml-dist c'est un fichier d'exemple versionné et c'est localement qu'on adapte ce fichier en créant database.yml qui lui sera ignoré (si j'ai bien compris). Pas con, j'aime l'idée.
Regarde plutôt côté utilisateur, chaque utilisateur peut avoir un gitignore global sur sa machine :
http://www.geekyboy.com/archives/980
Après j'ai pas cherché si c'est possible de ne l'attribuer qu'à un seul repo mais j'imagine qu'en fouillant c'est possible
Tu ne dois accéder à ce site que si tu as au moins 18 ans ou si tu as l'âge légal pour visionner ce type de matériel dans ta juridiction locale, l’âge le plus élevé étant retenu. En outre, tu déclares et garantis que tu ne permettras aucun mineur à d'accéder à ce site ou à ces services.
En accédant à ce site, tu acceptes nos conditions d'utilisation.