2017-06-15 7 views
2

git submodule absorbgitdirsの逆はどうすればできますか?私。サブモジュールの.git情報をsuperproject/.git/modules/<module>からsuperproject/path/to/<module>/.gitディレクトリに移動しますか?gitサブモジュールの反対側/逆側が吸収されますか?

私はまだ<module>superprojectのサブモジュールになりたい、私はただの.git/modulesディレクトリ<module>superprojectでの.gitディレクトリ情報」を望んでいません。

+0

可能性のある重複または関連する:https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule – awiebe

答えて

2

これは、スーパープロジェクト/パス/をネストされたGitリポジトリにすることに注意してください。この場合、SHA1は親プロジェクトによって記録されます。

正確に同じ状態を維持するには、superproject/.git/modules/<module>をコピーしてsuperproject/path/to/<module>に名前を変更し、<module>/<module>の名前を<module>/.gitに変更します。私はまだその.gitフォルダはsuperproject/.git/modules/<module>になりsuperprojec

のサブモジュールになりたい

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 

は、その後、あなたは、サブモジュールを削除するためにgit submodule deinitを使用することができます

サブモジュールのgitのディレクトリはサブモジュール内にある場合、

その細やかに$GIT_DIR/modulesパスをサブモジュールのGitのディレクトリを移動し、その後でGitのディレクトリとその作業ディレクトリを接続する:は、どの選択肢を残しませんcore.worktreeを設定し、.gitファイルを追加して、superprojects gitディレクトリに埋め込まれたgitディレクトリを指定します。

git configには、移動可能な設定はありません$GIT_DI R/modules

absorbgitdirsはGitの2.12(Q4 2016)
Its tests showsそれはGIT_DIR/modulesを使用する予定のためcommit f6f8586で導入されました。

古いギルト(before Git 1.7.8、2011年10月)はサブモジュールのフォルダの中に直接.gitを持っていました。

+0

私はある時点であなたはサブモジュールを持つことができ、 'superproject/.git/modules/'に '.git'情報があるようにしてください。 – genpfault

+1

@genpfaultはい:以前のバージョンのGitはサブモジュールフォルダに直接.gitを持っていました。 – VonC

+0

ちょっと試してみると、sumoduleのリポジトリを複製するように見え、 'git submodule add ./path/to/ 'はサブモジュールの '.git'ディレクトリをそのまま残します。しかし、 'git submodule add <モジュールのURI>は、' .git'情報を 'superproject/.git/modules'に入れます。ですから、最終的に 'git submodule add ./path/to/ 'を再サブモジュールに追加すると、あなたが提案したファイル移動のダンスが機能するはずです。ありがとう! – genpfault

関連する問題