2017-02-20 62 views
1

假如我是上犯了具有子模塊S1的Git獲取最新從子模塊gitmodule

,有人添加子模塊S2在犯下+ 1,現在我不想要移動到一個+ 1,但取(只下載)子模塊s2。

這可能嗎?

我的Git版本2.1.4是我可以在必要時更新

編輯得到2.10.1.windows.1:簡單的腳本我試過了,它有一些問題 - 新裏git的文件夾被克隆子模塊而不是超級代表的.git /模塊文件夾 - 工作目錄受到新子模塊的污染:

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"` 
     } 
    } 
}' 

回答

0

這可能嗎?

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

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

這會給你的第二子模塊S2的網址,而不是它的SHA1。

如果這就夠了,你可以在你自己的repo(嵌套的git repo)中克隆它。


如果你可以升級到latest Git for Windows(2.11或快2.12),我會用git worktree command

  • 結賬a+1承諾在一個單獨的worktree(與所述git worktree命令),並運行在該獨立工作樹中的git submodule update --init
  • (從您自己當前的回購仍在提交'a')到s2的符號鏈接,該鏈接在右側正確簽出SHA1

這樣,您不會移動當前的回購,但仍可從a+1的實際子模塊內容s2中受益。

+0

所以這是一個簡單的腳本,我爲你的第一個方法做了,這裏有什麼不對嗎?因爲當我克隆s2時,submodule的'.git'文件夾位於子模塊內,而不在超級存儲庫的'.git/modules'中。編輯:將腳本置於問題中,因爲我無法在此處格式化 – tejas

+0

@tejas不打擾第一種方法:它不知道要檢出哪個S2的確切版本。使用git worktree做2d方法:它允許你有多個工作樹,這意味着你的當前工作樹將不會被觸及(除了符號鏈接,它也存在於Windows中,並帶有一個簡單的結點:'mklink/J' ) – VonC

+0

我真的不需要簽出s2,只是試圖保存下載時間,當實際檢查/子模塊更新 – tejas