将 git 存储库更新为子模块
Update git repository to submodule
小问题,我可以将子模块用作“克隆存储库”吗?
例如:
我可以更改子模块分支,以防万一,编辑代码并在其中做一些工作并提交它们吗?
示例:
> example-repo
|- index.html
|- submodule -> submodule-repo-1
| |- file1.html
|- submodule -> submodule-repo-2
|- file2.html
然后做类似的事情:
git clone https://.../example-repo.git
git submodule update
cd submodule-repo-1
git checkout -b test-branch
echo "idk" > file1.html
git commit -am "test commit"
git push
是的,你确实可以做到。记住——至少现在1——一个子模块并不真正“知道”它是一个子模块,所以一旦你cd
并启动 运行ning Git 命令(git checkout
、git add
等),您只是在一个普通的 Git 存储库中工作.使这个 Git 存储库 成为 子模块的原因是,一旦你退出它回到 超级项目 ,某些 Git 命令 in 超级项目将 运行:
(cd submodule && git checkout $hash)
例如特定的哈希 ID。
因此,在您对子模块的工作树进行更改后,最好先提交它们,然后在其他地方 git push
-ed,以免超级项目做一些疯狂的事情,例如 运行 git checkout
,或者真的疯狂地想完全删除子模块。2
1Git 中正在进行的工作是让子模块更加意识到它们 是 子模块,以帮助修复项目像脚注 2.
2这很危险,所以我们通常不想要它,但是:会发生什么,例如,如果 path/to/X
提交 a1234567
是子模块,但是提交 b789abc
中的 path/to/X
是普通文件? Git 努力不破坏子模块(或其克隆)——如今,子模块存储库被移动到超级项目中的 .git/modules/
目录——但这可能是必要的。
小问题,我可以将子模块用作“克隆存储库”吗?
例如:
我可以更改子模块分支,以防万一,编辑代码并在其中做一些工作并提交它们吗?
示例:
> example-repo
|- index.html
|- submodule -> submodule-repo-1
| |- file1.html
|- submodule -> submodule-repo-2
|- file2.html
然后做类似的事情:
git clone https://.../example-repo.git
git submodule update
cd submodule-repo-1
git checkout -b test-branch
echo "idk" > file1.html
git commit -am "test commit"
git push
是的,你确实可以做到。记住——至少现在1——一个子模块并不真正“知道”它是一个子模块,所以一旦你cd
并启动 运行ning Git 命令(git checkout
、git add
等),您只是在一个普通的 Git 存储库中工作.使这个 Git 存储库 成为 子模块的原因是,一旦你退出它回到 超级项目 ,某些 Git 命令 in 超级项目将 运行:
(cd submodule && git checkout $hash)
例如特定的哈希 ID。
因此,在您对子模块的工作树进行更改后,最好先提交它们,然后在其他地方 git push
-ed,以免超级项目做一些疯狂的事情,例如 运行 git checkout
,或者真的疯狂地想完全删除子模块。2
1Git 中正在进行的工作是让子模块更加意识到它们 是 子模块,以帮助修复项目像脚注 2.
2这很危险,所以我们通常不想要它,但是:会发生什么,例如,如果 path/to/X
提交 a1234567
是子模块,但是提交 b789abc
中的 path/to/X
是普通文件? Git 努力不破坏子模块(或其克隆)——如今,子模块存储库被移动到超级项目中的 .git/modules/
目录——但这可能是必要的。