克隆 Git 子模块时记录子模块的绝对路径:git clone --recurse-submodules。

4

git clone --recurse-submodules 命令会记录子模块的绝对路径。

也就是说,当我克隆父目录时,每个子模块的 .git 文件夹中的 gitdir 值都会记录子模块的绝对路径。这使得我无法移动新克隆的目录,否则所有子模块都将无法使用。

在原始仓库中,我首先创建子模块时,.git 文件如下:

gitdir: ../../.git/modules/data/scta-codices

但是,在使用以下命令将其克隆到新目录中后:

git clone --recurse-submodules git@github.com:scta/scta-rdf.git

.git 文件变成了:

gitdir: /Users/username/Desktop/scta-rdf/.git/modules/data/scta-projectfiles

有什么想法吗?

以下是父目录中 .gitmodules 文件的内容:

[submodule "data/scta-projectfiles"]
    path = data/scta-projectfiles
    url = https://github.com/scta/scta-projectfiles
    branch = master
[submodule "data/scta-codices"]
    path = data/scta-codices
    url = https://github.com/scta/scta-codices
    branch = master
[submodule "data/scta-quotations"]
    path = data/scta-quotations
    url = https://github.com/scta/scta-quotations
    branch = master
[submodule "data/lombardpress-lists"]
    path = data/lombardpress-lists
    url = https://github.com/lombardpress/lombardpress-lists
    branch = master
[submodule "data/scta-rdf-schema"]
    path = data/scta-rdf-schema
    url = https://github.com/scta/scta-rdf-schema
    branch = master
[submodule "data/scta-people"]
    path = data/scta-people
    url = https://github.com/scta/scta-people
    branch = master

1
嗨,杰夫。你找到任何解决方案了吗?我刚在我的设置中发现了同样的问题。 - remus
我刚刚发现,执行 git submodule init 然后跟着执行 git submodule update 会在克隆完成后创建相对路径(但在克隆期间,每个子模块的 .git 文件中都设置了绝对路径)。 - remus
还没有解决方案。这是一种奇怪的行为。在我的 Mac 桌面上克隆时,创建了绝对路径。但是当我在 Linux 服务器上克隆时,创建了所需的相对路径。我不确定为什么会出现不同的行为。 - Jeff
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接