J'ai un référant appelé myrepo
sur le serveur beanstalk
distant.
Je l'ai cloné sur ma machine locale. Création de deux branches supplémentaires: staging
et dev
. Ces branches ont également été déplacées.
À présent:
local remote server
--------------------------------------------------------
master ==> Pushes to `master` ==> deployed to `prod`
staging ==> Pushes to `staging` ==> deployed to `staging`
dev ==> Pushes to `dev` ==> deployed to `dev`
J'ai un fichier appelé config.xml
qui est différent sur chaque branche.
Je veux ignorer ce fichier uniquement pendant les fusions. Mais je veux que cela soit inclus lorsque je passe à la caisse ou que je valide depuis/vers la branche repo.
La raison pour laquelle je le souhaite est que nous avons un script de déploiement qui extrait (extrait) la branche spécifique et le déploie sur les serveurs respectifs. Il faut donc que le fichier config.xml
de cette branche spécifique soit connecté au serveur spécifique, comme indiqué ci-dessus lors du déploiement.
Je suppose que .gitignore
ne fonctionnera pas. Quelles sont les autres options? Notez que le fichier ignoré doit faire partie de checkout et commit, ce qui est important. il ne devrait être ignoré que pendant les fusions.
Merci!
J'ai fini par trouver git attributes
. L'essayer Travailler jusqu'à présent. N'a pas encore vérifié tous les scénarios. Mais cela devrait être la solution.
J'ai surmonté ce problème en utilisant la commande git merge avec l'option --no-commit
, puis j'ai explicitement retiré le fichier intermédiaire et ignoré les modifications apportées au fichier . E.g .: dis que je veux ignorer toutes les modifications apportées à myfile.txt
Je procède comme suit:
git merge --no-ff --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"
Vous pouvez mettre les déclarations 2 et 3 dans une boucle for, si vous avez une liste de fichiers à ignorer.
.gitattributes
- est un fichier de niveau racine de votre référentiel qui définit les attributs d'un sous-répertoire ou d'un sous-ensemble de fichiers.
Vous pouvez spécifier l'attribut pour indiquer à Git d'utiliser différentes stratégies de fusion pour un fichier spécifique. Ici, nous voulons conserver le config.xml
existant pour notre branche. Nous devons définir le merge=ours
sur config.xml
dans le fichier .gitattributes
.
merge=ours
indique à git d'utiliser notre fichier (branche actuelle) en cas de conflit de fusion.
Ajouter un fichier .gitattributes
au niveau racine du référentiel
Vous pouvez configurer un attribut pour confix.xml dans le fichier .gitattributes
.
config.xml merge=ours
Et ensuite définir une stratégie de fusion factice avec:
$ git config --global merge.ours.driver true
Si vous fusionnez la branche stag
de la branche dev
, au lieu d'avoir des conflits de fusion avec le fichier config.xml, conservez le fichier config.xml de la branche stag, quelle que soit votre version d'origine.
Vous pouvez commencer par utiliser git merge --no-commit
, puis éditer la fusion comme bon vous semble, en décompressant config.xml
ou tout autre fichier, puis valider. Je suppose que vous voudriez l’automatiser davantage après l’utilisation de crochets, mais je pense que cela vaudrait la peine d’être traité manuellement au moins une fois.
Vous pouvez utiliser .gitignore
pour conserver le config.xml
en dehors du référentiel, puis utiliser un post commit hook pour télécharger le fichier config.xml
approprié sur le serveur.
Ici git-update-index - Enregistrez le contenu du fichier dans l’arbre de travail dans l’index.
git update-index --assume-unchanged <PATH_OF_THE_FILE>
Exemple:-
git update-index --assume-unchanged somelocation/pom.xml
Exemple:
master
, develop
develop
et souhaitez l'ignorer lors de la fusionCode (en racine de yout git):
git config --global merge.ours.driver true
git checkout master
echo "path/file_to_ignore merge=ours" >> .gitattributes
git merge develop
Vous pouvez également ignorer les fichiers ayant la même extension
par exemple, tous les fichiers avec l'extension .txt
:
echo "*.txt merge=ours" >> .gitattributes