我試圖建立一個分支,使得branchA
具有子文件夾A
和B
,但B
包含branchB
的內容。包含其他分支作爲子目錄?
我一直在尋找submodules
,subtrees
和subrepos
,但我想不出什麼會做什麼,我期待的。
爲了防止這成爲一個XY問題,我的總體情況是這樣的:我正在開發一個HTML5/JS遊戲,我希望能夠在Github頁面上測試它。
所以我想要分支/子目錄gh-pages/play
包含分支master
。
我試圖建立一個分支,使得branchA
具有子文件夾A
和B
,但B
包含branchB
的內容。包含其他分支作爲子目錄?
我一直在尋找submodules
,subtrees
和subrepos
,但我想不出什麼會做什麼,我期待的。
爲了防止這成爲一個XY問題,我的總體情況是這樣的:我正在開發一個HTML5/JS遊戲,我希望能夠在Github頁面上測試它。
所以我想要分支/子目錄gh-pages/play
包含分支master
。
分支沒有文件夾/目錄。分支是,很簡單,指向提交哈希ID的指針(它們從包含原始哈希ID的小文件開始,儘管它們可以壓縮成一種名稱到ID映射的數據庫,Git可以節省時間以及不經常變化的名稱空間)。所以這是不可能的。
它是可能做你想要的子模塊,但。這只是棘手。你必須非常小心。我也完全不清楚它是否可以用於任何GitHub Pages的事情,因爲他們不得不做一個克隆和檢查與子模塊操作。
一次Git 子模塊真的只是一個Git倉庫:你告訴Git的一些目錄(「文件夾」),如B
應該通過克隆不同 Git倉庫,從某些特定網址進行。一旦克隆完成後,Git應該將cd
放入git clone
生成的目錄中,然後git checkout
通過哈希ID進行一次特定的提交。
那麼,如果要爲「不同的」Git存儲庫想要git://host.name/path/to/url.git
檢入子目錄B
,請指定URL git://host.name/path/to/url.git
?
這裏的明顯的危險是無限遞歸的潛力:Git的檢出url.git
,發現它有一個子模塊,克隆url.git
到子目錄B
,檢查出裏面B
提交,發現它有一個子模塊,克隆它, cd
s到現在的B/B
,發現它有一個子模塊,克隆它,進入B/B/B
,發現它有一個子模塊...
你避免這種無限遞歸:
git clone
的默認設置),和/或但還有一個更的問題:子模塊檢查出一個具體的承諾通過哈希ID,而不是由分支名。你想B
是一個自我克隆,簽出分支master
(這可能從來沒有自我submodule B
)。但所有你可以得到是一個B
簽出一個特定的Git哈希ID,這是你存儲在超級項目(這當然是同一個存儲庫)提交中的哈希ID。
有一些方法可以將子模塊從其特定的提交中解脫出來,包括通過分支名稱檢出分支的方法。這些需要運行特定的git submodule
命令,這是可能阻止您在GitHub頁面上執行此操作的一部分(不管是什麼)。但是,假設他們讓你完成子模塊的工作,則不一定非得通過名稱:你可以做一個新的提交,將新的master
散列存儲到超級項目中。
舉個例子,假設你在這個超子項目中使用分支develop
作爲子模塊。在develop
中,有一個.gitmodules
文件,上面寫着「我有一個應該克隆到B
中的子模塊/子項目,使用此URL」(這是超級項目的URL)。在尖提交發展的那麼這次提交包含「gitlink」樹條目,上面寫着「讓克隆到B
,在.gitmodules
仰視子項目的網址,並使用哈希deadb0a
」 - 這是尖端的哈希分支master
的承諾。
一旦你前進的master
尖端到新提交ac0ffee
,你看看develop
並作出新提交具有「gitlink」樹條目,上面寫着「讓克隆到使用散列ac0ffee
B
」 。沒有別的變化,只是哈希ID,但是現在,當有人取出develop
啓用子模塊,他們得到B
同犯,他們將通過檢查分支master
在B
,因爲分支master
說:「退房哈希ac0ffee
「。
(顯然,這整個事情是有點容易出錯,因爲在一般的子模塊。我懷疑這是不是一個非常明智的路徑往下走,但在理論上,至少,它可以工作。)
有趣的事實:子模塊現在可以跟蹤分支。 –
@DuncanXSimpson:因此*有一些方法可以將子模塊從其特定的提交中移除,其中包括通過分支名稱檢查分支的方法。這些需要運行特定的git子模塊命令... *您必須設置分支的名稱(我認爲您可以保存在提交的'.gitmodules'文件中),然後運行'git submodule update --remote'或'git子模塊結帳--remote'。 – torek