Gin*_*ngi 19 git git-submodules
我已将Git存储库(包含多个子模块)移动到本地磁盘上的另一个目录.任何git命令都会产生错误:
fatal: Not a git repository: <absolute path to .git/modules/*>
Run Code Online (Sandbox Code Playgroud)
该错误源自在各个地方编码的文件的绝对路径[1].两个问题:
谢谢!
我注意到,对于所有子模块,该.git文件包含:
gitdir: <absolute path to repository>
Run Code Online (Sandbox Code Playgroud)
core.worktree每个子模块(.git/modules/*/config)中的参数设置为该子模块的绝对路径.
我不是在寻找一个shell命令,而是一个原生的Git方法.
我不确定是否使用较旧版本的Git创建了绝对路径,而更新的路径是否采用了相对路径.
我写了一个oneliner(需要bash和coreutils),它将任何.git gitdir文件更改为相对路径:
find -type f -name .git -exec bash -c 'f="{}"; cd $(dirname $f); echo "gitdir: $(realpath --relative-to=. $(cut -d" " -f2 .git))" > .git' \;
Run Code Online (Sandbox Code Playgroud)
如果你不喜欢在这里找到一个git子模块:
git submodule foreach --recursive '[[ -f .git ]] && echo "gitdir: $(realpath --relative-to=. $(cut -d" " -f2 .git))" > .git'
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题。
这是我编写的一个小脚本的要点,可能会有所帮助。
它并没有通过将路径转换为相对形式来真正解决问题,但它确实在相关位置进行快速搜索和替换,使您可以修复所有问题。如果您正在处理一组复杂的子模块,其中可能有很多路径需要修复,则特别方便。
请注意,我自己在 OS X 10.8 上使用过此脚本,但我不能 100% 确定它在所有情况下都有效,因此请小心并采取合理的预防措施!
https://gist.github.com/3394771
| 归档时间: |
|
| 查看次数: |
3779 次 |
| 最近记录: |