Git从最新的gitmodule获取子模块

时间:2017-02-20 05:55:09

标签: git git-submodules

假设我正在提交具有子模块s1

的a

并且有人在提交a + 1中添加了子模块s2,现在我不想移动到+ 1但是获取(只需下载)子模块s2。

这可能吗?

我的git版本是2.1.4如果需要更新,我可以获得2.10.1.windows.1

编辑:我试过的简单脚本,它有一些问题     - .git文件夹位于新克隆的子模块中,而不是在super rep的.git / modules文件夹中     - 工作目录被新的子模块污染:|

git diff HEAD origin/master .gitmodules 2>&1 | perl -e '
while(<>)
{
   if(/^\+\s+path = (.+)/)
   {
      my $path = $1;
      my $line = <>;
      if($line=~/^\+\s+url = (.+)/)
      {
         my $url = $1;
         print "$path -> $url\n";
         `git clone "$url" "$path"`
      }
   }
}'

1 个答案:

答案 0 :(得分:0)

这可能吗?

不完全是:你可以show the content of the latest .gitmodule file

git fetch
git show origin/master:./.gitmodules

这将给你第二个子模块s2的url,但不是它的SHA1。

如果这就足够了,你可以在你自己的仓库(嵌套的git仓库)中克隆它。

如果你可以升级到latest Git for Windows(2.11或2.12),我会使用git worktree command

  • 在单独的工作树中签出a+1提交(使用上述git worktree命令),并在该单独的工作树中运行git submodule update --init
  • make(从你自己当前的repo仍然在提交'a')到s2的符号链接,在正确的SHA1上正确检出

这样,您不会移动当前的回购,但仍会从s2的实际子模块内容a+1中受益。