3
votes

Empêcher un fichier d'être suivi par d'autres branches

J'ai un file.config dans ma branche principale. Je souhaite créer une branche de fonctionnalité à partir de mon maître , mais je ne souhaite pas que mon file.config y apparaisse.

Sachant que je souhaite toujours suivre les modifications apportées à ce fichier.

Y a-t-il un moyen de le faire?

EDIT: Pour le contexte, le config.file est une sorte de "bouton" qui déploie le code imbriqué dans la branche courante dans l'environnement de production. C'est pourquoi je ne veux pas qu'il soit dans une autre branche que le "maître", cela limite les risques d'erreur humaine.

git

0 commentaires

3 Réponses :


0
votes

Vous pouvez supprimer le fichier des autres branches que vous créez à partir de master mais si vous les fusionnez ensuite dans master, le fichier sera supprimé dans master (à moins que vous ne fassiez tout votre possible pour l'évitez, ce qui est toujours possible). Si ces branches ne doivent jamais être fusionnées dans master, il suffit de supprimer le fichier d'elles.

L'autre problème que vous pourriez rencontrer si vous décidez de le faire de cette façon est que si le fichier est modifié sur master et que vous fusionnez ensuite master dans votre branche, vous obtiendrez un conflit d'arborescence, ce qui est normal car le fichier est absent de vos branches, donc vous diriez simplement à git de réorganiser le fichier quand cela se produit, puis de permettre à la fusion de se terminer.


0 commentaires

1
votes

Il est possible de dire à votre git local qu'un fichier particulier ne doit jamais être modifié en utilisant index de mise à jour . Cela empêchera le fichier de s'afficher dans git status et autres, tout en le gardant dans le référentiel pour tout le monde.

Il est important de noter cependant que ce changement se produira dans votre git local, pas dans votre branche. Donc, si vous changez de branche, cela restera en vigueur, et vous ne pourrez pas transmettre ce changement à une télécommande.

git update-index --no-skip-worktree file.config

Et si vous voulez des changements dans ce fichier pour réapparaître dans git status , exécutez:

git update-index --skip-worktree file.config


0 commentaires

1
votes

Vous ne pouvez vraiment, sérieusement, obtenir ce que vous voulez dans Git. La raison est assez fondamentale: les fichiers ne sont pas suivis ou non suivis du fait qu'ils sont dans une branche ou pas dans une branche. Ce qui rend un fichier suivi (vs non suivi), c'est sa présence (ou son absence dans) l ' index . Dans le même temps, les noms de branche identifient simplement un commit particulier , celui qu'ils identifient étant modifiable à tout moment ... et chaque commit peut être dans plusieurs branches simultanément.

Ces trois faits - (1) suivi vs non suivi étant une propriété du contenu actuel de index , donc pas directement connecté à un nom de branche; (2) les noms de succursales évoluent avec le temps; (3) les commits se trouvent dans plusieurs branches - tous interagissent d'une manière plutôt mauvaise pour votre cas d'utilisation.

Pour les comprendre, vous devez savoir comment les commits, l'index et l'arbre de travail interagissent, ce qui se passe lorsque vous utilisez git checkout avec un nom de branche ou un hachage de commit, et comment les branches se créer et se déplacer en général. Tout cela est lié à un seul gros Gordian Knot ... et la solution à votre problème réel est similaire: n'essayez même pas de dénouer le nœud, évitez simplement le désordre en gardant à la place un prototype de la configuration. Ayez n'importe quel processus que vous utilisez qui en a besoin, construisez-le ou obtenez-le selon vos besoins: cela pourrait être aussi simple que: si je viens d'exécuter git checkout master , copiez le prototype en place; si je viens d'exécuter un git checkout qui me retire de master , supprimez la copie sur place, ne laissant que le prototype.

(Si vous souhaitez automatiser cela, regardez dans le crochet post-checkout .)


0 commentaires