我的机器上有一个/path/to/repo
的git存储库,其中包含几个子模块/path/to/repo/submoduleA
和/path/to/repo/foo/bar/submoduleB
。
由于我无法更改工作流程,因此git repo被复制(如在scp -r中一样)到远程服务器,在该服务器上进行代码处理。我想将所做的更改拉回到原始计算机上。不能从远程服务器进行克隆/推送。
转到每个子模块并执行
git remote add <name> <url>:/server/path/to/repo/<path to submodule>
有更快的方法吗?
之类的神奇东西 git remote add --submodules <name> <url>:/server/path/to/repo
会递归到每个子模块,并将适当的相对路径添加到每个子模块的远程位置? git remote --help
并没有显示任何有用的信息,Git Pro Book section on submodules也没有显示。
我最好的猜测是
git submodule foreach 'git remote add <name> <url>:/server/path/to/repo/...'
可能有用,如果有一种方法可以用该foreach中每个子模块的依赖于循环的相对路径替换...
。我只是不知道git submodule foreach
答案 0 :(得分:1)
git submodule foreach
确实包含变量列表,这些变量应该有所帮助:
该命令可以访问变量:
$name
:.gitmodules
中相关子模块节的名称,$sm_path
:直接超级项目中记录的子模块的路径$displaypath
:包含从当前工作目录到子模块根目录的相对路径,$sha1
:直接超级项目中记录的提交,以及$toplevel
:直接超级项目顶层的绝对路径。所以在您的情况下:
git submodule foreach 'git remote add $name <url>:/server/path/to/repo/$sm_path'
$displaypath
将...
替换为每个子模块的依赖于循环的相对路径。
但是,正如OP waldol1中的the comments所指出的,$sm_path
是一个固定值,而不是相对路径。
示例docker/docker.github.io
,在子文件夹 tests
中执行:
D:\git\docker.github.io\tests>git submodule foreach "echo $displaypath"
Entering 'src/github.com/gdevillele/frontparser'
src/github.com/gdevillele/frontparser
vs.
D:\git\docker.github.io\tests>git submodule foreach "echo $sm_path"
Entering 'src/github.com/gdevillele/frontparser'
tests/src/github.com/gdevillele/frontparser