将现有的未版本化目录添加为 git 子模块(同时尽可能避免移动和复制)

add existing unversioned directory as git submodule in place (while avoiding moving and copying as much as possible)

我正在尝试将 git 项目克隆的未版本化子目录转换为子模块。 直接的方法是将其移出,创建一个项目并将该项目重新添加为子模块。 有没有办法做到这一点,例如避免在本地移动、复制并从服务器再次传输大部分数据?

示例:

我有一个名为“test”的 git 项目克隆到目录“test”,其中唯一的版本控制文件是 readme.md。 Hoewver,有一个巨大的子目录 testsm,我想为其创建一个 git 项目“testsm”,然后将其作为子模块添加到文件夹“test/testsm”中。

/test
/readme.md (versioned)
/testsm/* (yet unversioned)

您可以使用 git submodule add 添加现有的 git 存储库。

对于您的情况,您首先需要在 testsm 目录中使用 git init 创建一个新的 git 存储库。您还需要至少创建一个提交。

你将拥有这样的结构:

base
`- .git
`- readme.md
`- testsm
   `- .git
   `- other files...

一旦你在那里,你可以添加子模块:

git submodule add ./testsm
git commit # To actually commit the changes

以下步骤可选。

如果你需要设置上游url,你可以使用git submodule set-url命令将子模块URL设置为你想要的。

您还可以使用 git submodule absorbgitdirs.

testsm/.git 存储库移动到父 .git 存储库