J'ai un repo appelé myrepo
sur le beanstalk
serveur distant .
Je l'ai cloné sur ma machine locale. Création de deux branches supplémentaires: staging
et dev
. J'ai également poussé ces branches à distance.
Maintenant:
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 souhaite ignorer ce fichier uniquement lors des fusions. Mais je veux que cela soit inclus lorsque je passe à la caisse ou que je m'engage depuis / vers la branche du dépôt.
La raison pour laquelle je veux cela est que nous avons un script de déploiement qui extrait (checkout) la branche spécifique et se déploie sur les serveurs respectifs. Nous avons donc besoin d'un config.xml
fichier de cette branche spécifique dans le serveur spécifique comme indiqué ci-dessus lors du déploiement.
Je suppose que cela .gitignore
ne fonctionnera pas. Quelles sont les autres options? Notez que le fichier ignoré doit faire partie de l'extraction et de la validation, ce qui est important. il ne doit être ignoré que lors des fusions.
Merci!
Réponses:
J'ai surmonté ce problème en utilisant la commande git merge avec l'
--no-commit
option, puis j'ai explicitement supprimé le fichier intermédiaire et ignoré les modifications apportées au fichier. Par exemple: disons que je veux ignorer toute modification pour quemyfile.txt
je procède comme suit:Vous pouvez placer les instructions 2 et 3 dans une boucle for, si vous avez une liste de fichiers à ignorer.
la source
git reset HEAD myfile.txt
exactement? Comment cela aide-t-il à atteindre notre objectif ici?J'ai fini par trouver git
attributes
. Essayer. Travailler jusqu'à présent. N'a pas encore vérifié tous les scénarios. Mais ça devrait être la solution.Stratégies de fusion - Attributs Git
la source
.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 préserver l'existant
config.xml
pour notre agence. Nous devons régler lemerge=ours
pourconfig.xml
dans le.gitattributes
fichier.merge=ours
dites à git d'utiliser notre fichier (branche actuelle), si un conflit de fusion se produit.Ajouter un
.gitattributes
fichier au niveau racine du référentielVous pouvez configurer un attribut pour confix.xml dans le
.gitattributes
fichierEt puis définissez une stratégie de fusion factice avec:
Si vous fusionnez une branche de
stag
formulairedev
, au lieu d'avoir des conflits de fusion avec le fichier config.xml, config.xml de la branche stag est conservé dans la version d'origine.la source
config.xml
est complètement inchangée de la base de fusion à l'une ou l'autre des versions de pointe de branche, Git prend simplement la version modifiée, sans en regardant lemerge.ours.driver
décor. Vous avez donc raison de vous inquiéter.theirs
s'agit d'une stratégie de fusion intégrée. Mais il semble que l'on puisse écrire<pattern> merge=foo
, alorsgit config --global merge.foo.driver true
, et cela fonctionnera de la même manière.Vous pouvez commencer par utiliser
git merge --no-commit
, puis éditer la fusion comme vous le souhaitez, c'est-à-dire en désinstallantconfig.xml
ou tout autre fichier, puis valider. Je suppose que vous voudrez l'automatiser davantage après cela en utilisant des crochets, mais je pense que cela vaudrait la peine de passer manuellement au moins une fois.la source
git attributes
N'offrir une solution droit? Je ne peux pas comprendre cela. git-scm.com/book/en/…Vous pouvez utiliser
.gitignore
pour garder leconfig.xml
hors du référentiel, puis utiliser un hook post-commit pour télécharger leconfig.xml
fichier approprié sur le serveur.la source
attributes
. Une idée de comment ça marche? Je ne peux pas comprendre cela. git-scm.com/book/en/…Exemple:
master
,develop
develop
branche et souhaitez l'ignorer lors de la fusionCode:
Vous pouvez également ignorer les fichiers avec la même extension
par exemple tous les fichiers avec l'
.txt
extension:la source
Ici git-update-index - Enregistre le contenu du fichier dans l'arborescence de travail dans l'index.
Exemple:-
la source