2017-06-15 1 views
2

Comment faire l'inverse de git submodule absorbgitdirs? C'est à dire. déplacer les informations .git d'un sous-module sur superproject/.git/modules/<module> et revenir au répertoire superproject/path/to/<module>/.git?Ci-contre/inversé de git submodule absorbgitdirs?

Je veux encore <module> être un sous-module de superproject, je ne veux pas « info répertoire s .git dans superproject » <module> répertoire de .git/modules.

+0

Copie possible ou liée à: https: //stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule – awiebe

Répondre

2

Notez que cela ferait superproject/path/to // un dépôt Git imbriqué, dont SHA1 serait toujours enregistré par le projet parent.

Pour conserver le même état, vous pouvez copier superproject/.git/modules/<module> et le renommer en superproject/path/to/<module>, puis renommer <module>/<module> en <module>/.git.

Ensuite, vous pouvez utiliser le git submodule deinit pour supprimer le sous-module:

mv asubmodule asubmodule_tmp 
git submodule deinit -f -- a/submodule  
rm -rf .git/modules/a/submodule 

# if you want to leave it in your working tree 
git rm --cached asubmodule 
mv asubmodule_tmp asubmodule 

Je veux toujours être un sous-module de superprojec

Ensuite, son dossier .git serait superproject/.git/modules/<module>

submodule absorbgitdirs ne laisse pas le choix:

Si un répertoire git d'un sous-module est à l'intérieur du sous-module, déplacez le répertoire git du sous-module dans ses projets colossaux chemin $GIT_DIR/modules puis connectez le répertoire git et son répertoire de travail par définir le core.worktree et ajouter un fichier .git pointant vers le répertoire git intégré dans le répertoire git de superprojets.

je ne vois pas dans git config toute configuration qui pourrait se déplacer $GIT_DI R/modules.

absorbgitdirs a été introduit dans commit f6f8586 pour Git 2,12 (4ème trimestre 2016)
Its tests shows il prévoit utiliser GIT_DIR/modules.

Plus ancien Git (before Git 1.7.8, Oct. 2011) avait un .git directement dans le dossier sous-module.

+0

J'aurais pu jurer à un moment donné que vous pourriez avoir un sous-module et * pas * avoir pour avoir son info '.git' vivant dans' superproject/.git/modules/ '. – genpfault

+1

@genpfault Oui: les anciennes versions de Git avaient le .git directement dans le dossier sous-module. – VonC

+0

Expérimenter un peu, ressemble à cloner le repo du sumodule, alors 'git submodule add ./path/to/ ' laisse le répertoire '.git' du sous-module sur place. Mais un sous-module git direct add mettra l'information '.git' dans' superproject/.git/modules'. Donc la file move dance que vous avez suggéré devrait fonctionner, étant donné un dernier sous-module git add ./path/to/ 're-submodule. Merci! – genpfault