【发布时间】:2013-11-29 06:13:24
【问题描述】:
我创建了一个仓库:
git init --bare myrepo.git
然后在同一台服务器上,为生产创建 repo
cd /home/myuser/public_html
git init
git remote add origin /usr/local/gitroot/myrepo.git
git commit --allow-empty -m "Initial commit"
然后创建子模块
cd subdirectory
git init
git add .
git commit -m "Initial submodule commit"
cd ..
git submodule add /home/myuser/public_html/subdirectory subdirectory
git add .
git commit -m "Initial commit of base files and submodule"
git push origin master
然后在我的本地机器上
git clone --recursive ssh://user@mydomain/path/to/git mygitdirectory
在看起来像一个干净的克隆的结尾,我得到了
fatal: repository '/home/myuser/public_html/subdirectory' does not exist
Clone of '/home/myuser/public_html/subdirectory' into submodule path 'subdirectory' failed
在子目录中尝试 git submodule add 和 git submodule update 会产生相同的结果。我最终得到了所有基本文件,但子目录为空。在服务器上,git log 显示了 base files + submodule 的提交,并且 base 和 submodule 中的 git status 都显示为 clean。
后记
我把所有东西都吹走了,并再次尝试将子模块创建更改为:
git submodule add ./subdirectory ./subdirectory
在服务器上产生了一个.gitmodules
[submodule "subdirectory"]
path = subdirectory
url = ./subdirectory
在本地机器上进行克隆时,当它到达子模块部分时会导致同样的错误。因此,我将 .gitmodules(然后进行了 git 子模块同步)更改为:
[submodule "subdirectory"]
path = subdirectory
url = ssh://user@mydomain/path/to/git
阅读(许多)不同的工作流程建议,我发现自己不确定(a)每个 .gitmodules 的内容应该是什么(我假设服务器是正确的)(b)超级 repo 所在的远程裸 repo 是否推送的服务器应该是唯一的裸仓库,或者子模块是否也需要一个(我假设一旦子模块在超级仓库中提交,将超级仓库推送到裸仓库(原点)也会获取子模块历史记录) ,以及 (c) 本地子模块是否需要定义远程(它似乎没有在服务器上,所以我没有那么本地)
【问题讨论】:
标签: git-submodules