La manière la plus "automatique" de mettre en place ce système est probablement d'utiliser des submodules. Vous pouvez lire sur les submodules ici : https://git-scm.com/book/en/v2/Git-Tools-Submodules
Je ne travaille pas beaucoup avec les submodules. Je peux vous dire que les gens critiquent souvent cette fonctionnalité, donc vous pouvez vous demander si cela en vaut la peine. Mais si vous voulez un support git direct pour l'idée que vous modifiez les fichiers dans le contexte du repo plus large, et que le repo public plus spécifique reçoive la mise à jour, alors c'est le seul moyen auquel je pense pour l'obtenir.
Donc si vous décidez d'utiliser cette approche, vous devrez :
- vérifier la version appropriée du dépôt parent
- initialiser un nouveau repo pour servir de repo enfant
- déplacer tout ce qui se trouve dans le sous-répertoire de l'arbre de travail de la version parentale vers l'arbre de travail de la version enfant.
- commettre le repo enfant
- remplacer le sous-répertoire dans le repo parent par une référence au sous-module
Une petite configuration supplémentaire est nécessaire pour pouvoir pousser les changements vers le sous-module ; voir la page de documentation liée pour tous les détails.
Si une approche moins "git-centrique" est acceptable, alors vous pourriez simplement script le processus de prendre une mise à jour du repo "parent" et de l'appliquer au repo enfant. La difficulté de ce processus dépend de vos exigences spécifiques. (Est-ce qu'une "mise à jour" signifie simplement un nouvel instantané que vous avez choisi pour être ajouté au master du repo enfant ? Ou, au cours d'une mise à jour, devez-vous répliquer l'historique intermédiaire ?)
Si, à un moment donné, vous avez besoin de script un transfert d'historique, vous voudrez utiliser git filter-branch
avec le subdirectory-filter
pour créer de nouveaux commits, que vous récupérerez ensuite dans le repo enfant et que vous grefferez (probablement à l'aide de l'option filter-branch
encore) sur l'arbre de l'histoire.