2016-12-08 27 views
1

有沒有辦法使用一個子模塊的網址,當一臺機器上,但是當對方使用不同的子模塊的網址?使用不同的git子模塊的網址是在不同的機器

假設我有一臺機器已認證的中央服務器上一個Git倉庫SSH訪問,並且不具有訪問該服務器的另一臺機器。在已認證的機器上,我使用git-daemon將存儲庫共享到我的未經認證的機器。

的這裏的問題是,我已經克隆的資源庫有幾個子模塊的依賴,所有這些都需要身份驗證的SSH訪問服務器上的存儲庫。在這種情況下,我也有所有存儲在我的驗證機器上的子模塊,這樣我就可以簡單地更新從.gitmodules文件:

[submodule "@sub-a"] 
    url = ssh://<authenticated-url>/<repo> 
    branch = master 

到...

[submodule "@sub-a"] 
    url = git://<ip-of-authenticated-machine>/<repo> 
    branch = master 

然後運行git submodule syncgit submodule update --init -r將直接從我的身份驗證機器而不是從服務器獲取子模塊。然後

我的問題是,有沒有可移植的方法來做到這一點,這樣我可以在機器之間自由移動,並希望正確git-submodule行爲

回答

0

如果附帶說明書,它會算作便攜式嗎?

您可以在.gitmodules點你的子模塊到本地目錄,如url = ../submodule。主存儲庫將包含此路徑(兩臺計算機的路徑相同),但它們會克隆其他各自的submodule目錄,這些目錄與主repo的克隆位於同一目錄中。子模塊更新必須分兩步完成:從服務器到submodule的正常提取,然後是從本地克隆到主模塊的submodule update

您可能還希望看到相同的解決方案,提出here一個相關的問題。我不知道有更好的方法。

編輯:作爲鑑定以IrLED在their answer一個url.git/config將覆蓋.gitmodulessee here),並且是本地的每個克隆(未跟蹤,未綁定到提交),這樣就使得它的最佳解決方案。可以在主回購(非遞歸)克隆之後和submodule update之前完成更改。所有學分!

+0

不太我所希望的,但這絕對可以工作。 –

+0

讓我們看看這是否吸引更多的答案,有人可能會證明我錯了。 –

4

您可以.git/config更改子模塊的性能。在你的情況下,你可以從[submodule "<name>"]部分更改url。請記住,這些屬性將無法生存git submodule deinitgit submodule sync
詳細

git submodule deinit  # deinitialize submodule, relevant section in .git/config will be removed 
rm -fdr .git/modules/ # clear submodules' local repos 
git submodule init  # relevant section will be copied (partially) from .gitmodules to .git/config 
...      #Edit .git/config with new url for submodule 
git submodule update  # submodule will be updated from new url. 
+1

我實際上已經嘗試過,但是我所有的'git'命令仍然試圖在舊的'url'上找到回購。你能詳細說明修改的確切形式和後續的子模塊更新嗎? –

+1

運行'git submodule deinit'來取消子模塊的初始化,''中的相關部分。git/config'將被刪除。 'rm -fdr .git/modules /' - 清除子模塊的本地回購。 'git submodule init' - 相關部分將被複制(部分)從'.gitmodules'到'.git/config'。使用子模塊的新網址編輯'.git/config'。運行'git submodule update' - 子模塊將從新的url更新。 – IrLED