2013-08-22 40 views
3

我仍然試圖找出圍繞GIT子模塊的方式讓我們說我正在使用子模塊指向一個公共存儲庫,我只有讀權限當GIT子模塊「脫機」時會發生什麼?

當存儲庫被採用時,我的項目會發生什麼?當您使用您意味着一個子模塊是沒有辦法來更新子模塊

- 離線和無法再訪問

回答

3

這是git/DSCM的美麗之一:你的本地克隆是一個完整的站點庫。子模塊也不例外。

任何「中央」存儲庫都是項目發起人agree推送更改的位置。用最簡單的詞語寫訪問意味着你可以推進到預先約定的位置。從理論上講,你甚至可以聯網多個「中央」回購主機,並讓開發人員推送到每個主機,或者讓每個回購代理運行掛鉤以便相互同步。因爲每個git倉庫(包括子模塊)的克隆本身都是一個完整的倉庫,如果中央官方推送位置被更改或消失,您仍然擁有一個完全可用的倉庫,並具有對本地克隆的完全讀/寫訪問權限。

如果官方子模塊項目開發者決定他們只是想要重新定位他們的「中心」克隆,那麼您只需更新子模塊的遙控器以指向新的正確位置。

看到:

GitHug: Adding a remote

GitBook: Remote Branches

GitBook: working with Remotes

更新

假設你的項目可以被其他人訪問。這隱含意味着這些用戶還需要訪問項目使用的任何子模塊。

您可以重新託管您的本地子模塊(稱爲「叉子」)並修改您的主項目回購以引用分叉回購。這比複製/粘貼更受歡迎,即使官方回購仍在,也可能是個好主意。當然,這取決於原始項目提供的許可證。

幾個原因,這是一個好主意:

  1. 您可以更改您的叉子而沒有被授予official中央回購寫訪問。
  2. 如果官方中央回購黑暗,你仍然有一個完整的現場版本爲任何人想要檢查你的項目。
  3. 與複製/粘貼版本不同,將分叉的回購庫與官方回購庫保持同步相對比較容易。此外,您可以保留所有分支和原始回購的歷史記錄,就像複製/粘貼一樣,您只需獲取初始複製提交歷史記錄項目。
  4. 子模塊回購維護者可能會決定將您的某些更改重新納入「官方」版本。同樣,如果他們有一個完整的repo克隆來處理(子模塊),那麼相對容易。
+0

感謝您的回答。如果子模塊回購永遠處於脫機狀態,會發生什麼情況,所以沒有指向的URL?在那一點上,如果我分開我的主人,不會子模塊初始化失敗?如果是這樣,我的解決方案是從我的主人複製/粘貼文件到我的分支機構? (對不起,如果我聽起來很愚蠢...我正在從SVN轉移到GIT並嘗試習慣它,我已經閱讀了很多文檔,並試圖在短時間內消化它) – Sid

+1

更新了我的答案 – helloworld922

+0

謝謝你寫得很好,回答我所有的問題! – Sid

1

在某種程度上子模塊被視爲單獨的存儲庫所以如果你的子模塊回購下線。所有開發者都可以在整個開發週期中訪問回購。

僅對相對穩定的組件使用子模塊。

+0

因此,如果我在主服務器上運行git submodule更新,更新將會失敗。得到它了。子模塊回購離線後,如果我從主人創建新的分支會怎麼樣?新創建的分支會發生什麼?子模塊初始化是否失敗,導致一個空的子模塊文件夾? – Sid

+1

@Sid分支是從現有的提交創建的,所以如果你從已經初始化子模塊的提交中分支--Git將使用它並且不會重新啓動sumbodule:你可以使用先前更新的子模塊。 –

1

您的存儲庫是您的,您仍然擁有以前所做的一切。如果您可以找到該項目的其他來源,只需更改URL即可。 .gitmodules中有什麼是管理分發的管理協助,沒有說你必須使用建議的URL。您的回購使用.git/config中的內容。 git submodule只是加載默認值。

相關問題