Supposons que j'ai une bibliothèque Common
qui peut être utilisé de manière autonome et est utilisé par des projets P1
et P2
, de sorte que l'arbre que je veux ressemblePartager un arbre travaillant avec des sous-modules git
/Common/.git
...
/P1/.git
.gitmodules # points to remote server
Common/
...
/P2/.git
.gitmodules # points to remote server
Common/
...
Quand je fais un changement dans /Common
, je voudrais être en mesure de le tester en utilisant P1
et P2
avant de commettre. Avec le jeu de commandes git submodule
habituel, je devrais valider à partir de /Common
, pousser à distance, puis tirer à la fois /P1/Common
et /P2/Common
. Si le commit casse quelque chose, il ne peut pas être modifié car le mauvais changement a déjà été publié. Sinon, je pourrais git remote add quicktest /Common
de /P?/Common
pour pouvoir tirer sans toucher le serveur distant. Mais cela a beaucoup de possibilités d'incohérence et il est sale de supprimer les commits rompus de /P?/Common
afin qu'ils puissent être modifiés en /Common
.
Je préférerais que, au cours du développement, l'arbre de travail de /Common
être utilisé par P1
et P2
, mais je ne peux pas faire un lien symbolique /P1/Common
à /Common
car git submodule
reconnaît le lien symbolique comme différent d'un répertoire. Les répertoires hardlinking ne sont pas autorisés par la plupart des systèmes de fichiers. Je peux HardLink tous les fichiers en utilisant
rm -rf /P1/Common
cp -rl /Common /P1/Common
qui fonctionne très bien jusqu'à ce qu'un nouveau fichier est ajouté à /Common
dans ce cas, ce processus doit être répété. Y at-il une façon élégante à la fois
- garder
git clone --recursive git://remote/P1.git
travailler pour l'utilisateur final, et - me permettent de tester facilement que les changements dans
/Common
travail avecP1
etP2
?
Essayez la fonction git worktree (depuis git 2.5) sur votre sous-module. Et voyez [cette réponse] (https://stackoverflow.com/questions/27379818/git-possible-to-use-same-submodule-working-copy-by-multiple-projects/44649319#44649319) –