Git子模块绝对工作树路径配置

13

这是我的子模块redmine_dashboard配置文件:

子模块配置文件:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    worktree = /Users/daniel/redmine/vendor/plugins/redmine_dashboard
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:ebc/redmine_dashboard.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
[gui]
    wmstate = normal
    geometry = 841x391+-8+43 187 177

Mac

worktree = /Users/daniel/redmine/vendor/plugins/redmine_dashboard

Linux

worktree = /home/daniel/redmine/vendor/plugins/redmine_dashboard

问题

我能将这个绝对路径改为相对路径吗?比如:

worktree = ../../vendor/plugins/redmine_dashboard
3个回答

9
是的,您应该能够使用相对路径更新配置文件。您还应该更新子模块根目录中.git文件中的工作树目录,使其成为返回到该模块的相对路径。
我认为这在(至少)最新版本的git(1.7.10.1)中已经修复。我似乎找不到变更日志,所以我不知道它何时被修复。我能够通过删除子模块和.git/modules文件夹中的文件,然后重新执行git submodule initgit submodule update来解决问题。

在将我的git“超级模块”移动到新的本地目录后,我遇到了一个很大的问题。根据这个答案,我从源代码构建了git以获得1.7.11.3版本,然后运行git submodule initgit submodule update自动重新配置了所有子模块的根目录。 - jarvisschultz
因此,澄清一下,唯一的解决方法是编辑一堆文件或从源代码构建。apt-get目前有1.7.9版本的git。 - JaseC
请注意,如果您有一个旧的代码库,并且最初使用较旧版本的git克隆了子模块,则.git/modules/**/config中将有绝对路径。最近的git版本默认会生成相对路径,但旧的配置文件不会自动重写以使用相对路径。 - Mikko Rantalainen

3
请注意,git config 人页 中提到:
core.worktree 设置工作树的根路径。可以通过 GIT_WORK_TREE 环境变量和 --work-tree 命令行选项对其进行覆盖。
它可以是绝对路径或相对于 .git 目录的路径,可以由 --git-dirGIT_DIR 指定,也可以自动发现。
如果指定了 --git-dirGIT_DIR,但没有指定 --work-treeGIT_WORK_TREEcore.worktree,则当前工作目录将被视为工作树的根目录。

2

你为什么要设置worktree呢?默认情况下,工作树是你运行命令的地方,也是.git目录所在的地方。有关更多信息,请参见此问题


3
@daniel-c-sobral 我做了类似于这个的东西,所以这个路径是由git add submodule命令创建的。当我的Dropbox将该源代码从Linux同步到其他操作系统(例如MAC或Win)时,树状结构被破坏了:fatal: Not a git repository: /home/daniel/redmine/vendor/plugins/redmine_dashboard - flapjack
8
更像是“为什么Git会为我们创建这些绝对路径?” - David Rivers

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