我有一个巨大的git存储库,我想在我的本机Mac OS客户端和在虚拟机中运行的“guest”Linux客户端之间共享。我有两个最新版本的git(1.7.12.2),我从Mac OS克隆了存储库。问题是在Linux中,子模块无法识别:
$ git status
fatal: Not a git repository: /blah/android-wmon/.git/modules/core/modules/galaxynexus-cm10-kernel
fatal: 'git status --porcelain' failed in submodule core
在这两个操作系统之间共享一个git存储库是不可能的?我不会想到这是一个问题。
答案 0 :(得分:1)
如果我在mac端执行“
git submodule init
”和“git submodule update
”,为什么我还需要在linux端执行此操作?
这两个submodules命令用于本地仓库(您刚刚克隆的一个)。
git submodule init
初始化您的本地配置文件,git submodule update
从该项目中获取所有数据,并检查父仓库中列出的相应提交。在一个本地仓库中执行此操作不会对任何其他克隆仓库产生任何副作用(例如Linux上的那个,从Mac上的仓库克隆)。
您需要再次为您的第二个本地存储(Linux服务器本地)执行这些命令以获取所有数据。
注意:请确保您执行了简单的git clone
,not a git clone --reference
。
另外:确保您的子模块未使用完整路径引用(取决于您的git版本):请参阅this thread:
您指的是“最后更新”? v1.7.8介绍了 为子模块分开git dir,并使用绝对路径。
此绝对路径已更改为this patchset中的相对路径,该路径存在于v1.7.10-rc1中。
最近,一个名为
<name>
的子模块的git目录位于超级项目的.git/modules/<name>
目录中,而工作树中包含一个指向那里的gitfile。 当需要克隆子模块git目录,因为在.git/modules/<name>
中找不到它时,clone命令会将绝对路径写入gitfile。当不需要克隆时,git-submodule.sh
脚本将通过将相对路径写入gitfile
来重新激活git目录。这是不一致的,因为行为取决于之前克隆到
.git/modules of the superproject
的子模块。
这里相对路径是优选的,因为它允许超级项目移动 没有使gitfile失效 我们总是将相对路径写入gitfile
,这会覆盖克隆命令可能写入的绝对路径。