2017-07-13 1 views
1

Problème lors de l'installation, passez directement à la ligne pour la question.Masquage d'un sous-répertoire git sous-module jusqu'à l'appel d'initialisation sous-module

Je travaille sur projectA qui a son propre repo git. Ce projectA a quelques outils optionnels dans projectB qui est son propre repo séparé. D'après ce que je comprends, cela ressemble à une situation de sous-module git, faisant de projectB un sous-module de projectA. Pour configurer ceci, utiliser git submodule add projectB. Cela crée un sous-répertoire dans projectA qui agit comme un lien vers projectB, avec cette information sauvegardée dans .gitmodule. Vous devez valider à la fois ce fichier et le "sous-répertoire". Je peux continuer à développer sur projectA sans prêter attention à projectB. Lorsque je fais des mises à jour à projectB et que je les pousse, je peux mettre à jour projectB dans projectA en utilisant git submodule update --remote. Cela modifie le sous-répertoire projectB dans projectA, à la fois en mettant à jour les fichiers dans la version actuelle de projectB (non suivi par projectA) et le fichier de sous-répertoire lui-même (suivi par projectA). Supposons maintenant qu'un troisième utilisateur veuille projeter A et créer un projet C, mais n'a pas besoin de projetB. Ils utilisent git clone projectA, ils obtiennent tous de projectA et le .gitmodule et un sous-répertoire vide pour projectB. Je voudrais qu'ils obtiennent toujours .gitmodule afin qu'ils aient l'option dans le futur, mais est-ce possible pour qu'ils n'obtiennent pas le sous-répertoire vide pour le projet B?


Ma question est-il possible de cacher le sous-répertoire pour un sous-module ProjectB dans projectA avant que l'utilisateur fait un git submodule init>git submodule update? J'ai peur que ce ne soit pas possible parce que ce sous-répertoire est en fait un fichier git spécial qui indique quel commit obtenir pour le projet B, que j'aurais pensé avoir été sauvegardé dans .gitmodule. Je suis intéressé s'il y a une meilleure méthode pour ce que je veux accomplir ou n'importe quels bidouillages de git.

+0

une solution est de faire un appel répertoire caché '.modules' où tous les sous-modules résident ('mkdir .modules; cd .modules; git submodule add projectB'). Ensuite, je vais demander aux utilisateurs de créer un lien symbolique 'ln -s .modules/projectB' dans leur répertoire de travail, en ajoutant le lien symbolique pour un fichier appelé' projectB' à '.gitignore'. L'étape supplémentaire pour ceux qui doivent faire 'git submodule init; mise à jour du sous-module git; De toute façon, les modules/projectB' ne devraient pas être un gros problème et garder le projet propre pour ceux qui ne veulent pas le sous-module. –

Répondre

1

Ma question est-il possible de cacher le sous-répertoire pour un sous-module projectB dans projectA avant que l'utilisateur fait un git submodule init>git submodule update?

Oui: créez une branche pour le troisième utilisateur.
Sauf que vous devez démarrer cette branche à partir d'un commit avant celui auquel vous avez ajouté le sous-module (de cette façon, il n'y a pas de sous-répertoire du tout).

Ensuite, vous devez fusionner votre succursale pour cette branche, without committing: De cette façon, vous pouvez supprimer le .gitmodules et le sous-dossier (si elles ne conservent que la .gitmodules, Git se plaindrait il n'y a pas sous-module sur le chemin désigné).
Validez pour terminer la fusion.

Maintenant, toute fusion à partir de cette branche de retour à la vôtre ne supprimera pas le .gitmodules et le sous-dossier, parce que la nouvelle branche ne pas supprimer ceux depuis sa création (d'où l'importance de départ de ladite branche d'engager avant la création du sous-module.

Si plus tard, le nouvel utilisateur veut obtenir le sous-module, il/elle peut checkout that file from your branch

git checkout yourBranch -- .gitmodules 
git checkout yourBranch -- a/submodule 
+0

Ah méthode intelligente pensée grande image. Si je suis correctement l'idée, cela ressemble à un patch à faire quand il y a un utilisateur immédiat qui ne veut pas les sous-modules. Sinon, maintenir cette branche séparée sans sous-module semble être un peu d'effort. Par exemple si cet utilisateur veut tirer de la branche principale plus tard, il finira par tirer les informations du sous-module correctement? Alors que la nouvelle branche peut affecter seulement pousser et ne pas tirer. –

+0

@NoviceC "Par exemple, si cet utilisateur veut tirer plus tard de la branche principale, il finira par tirer les informations du sous-module correctement?" Oui, byut encore, une 'git merge --no-commit' permet au troisième utilisateur de supprimer le sous-module et' .gitmodules' avant de valider. – VonC

+0

Je vois, cela pourrait bien fonctionner si je fais réellement le sous-module sans le maître principal et la branche de dev. Lorsque j'ai besoin de mettre à jour le sous-module, je peux vérifier la branche du sous-module en faisant 'git checkout submoduleBranch; git sous-module mise à jour --remote; git commit; git push'. Sinon, je peux simplement fusionner les résultats de la branche master/dev où le développement actuel sera effectué sans les sous-modules. Ensuite, il n'y a pas de problème à se soucier de la suppression des fichiers à chaque fois. –