2015-10-01 42 views
0

我過去曾經使用過濾分支,但現在我正在尋找一種解決方案,通過分解它來允許我和其他人創建請求,從而公開私有存儲庫的文件夾。什麼是「過濾叉」的最佳方法?

說我有一個項目和項目A具有folderA,我需要建立從A叉子B中只包含folderA在裏面。

這樣做的好方法是什麼?我找不到一個簡單的解決方案,不分叉整個存儲庫,然後應用過濾器分支。

編輯:叉將公共

謝謝:)

+0

嗯,我會用'混帳submodule'的問題。關於'folderA'的_previous_歷史,您應該決定是否需要將'folderA'中的更改歷史記錄顯示給其他人。如果你這樣做,那麼你應該「過濾分支」它們,但最有可能的是,你可能會考慮將'folderA'移動到一個單獨的git倉庫,並將它作爲子模塊附加到項目A上,作爲外部世界的第0天 – user3159253

+0

如果你需要進一步的解釋,我可以創建一個更詳細的答案,但基本上這個想法已經在桌面上了。你也可以嘗試一種叫做子樹合併的野獸,但實際上它更麻煩。 – user3159253

+0

如果我爲過濾器分支主人分配其他項目,人們是否仍然能夠在存儲庫中的任何位置看到某種歷史記錄? –

回答

2

你有幾種可能性。

  1. 沒有事先歷史 子模塊,在這種情況下,你應該採取的folderA即你當前狀態遞歸地將其複製到外部的子目錄。然後在該子目錄中運行git init,像往常一樣發佈github上新創建的存儲庫。然後,你需要從你的項目(git rm -rf folderA)除去folderA的內容,然後重新連接它作爲一個git子模塊(見this tutorial例如),然後提交更改的主要項目。

在這種情況下,外部用戶將不知道folderA有一些以前的歷史可言,但可以肯定,從這個「0天的」 folderA開始將有自己的歷史,你可以在你的shell項目跟蹤它。

  • GIT中與完整的先前歷史子模塊。在這種情況下,您需要過濾現有的存儲庫。在篩選後,你只選擇folderA內容,只有相關的變更,並在同一時間形成的folderA一個新的歷史替換folderA目錄條目一個名爲gitlink特殊類型的條目(實際上gitlink只是一個任意的SHA-1,git submodule用它來指代版本的「檔案庫」。
  • 我不能調用此方法容易的,但它是可行的確實,如果你真的需要公開folderA以前的歷史,這是一段路要走。

    1. git subtree merge雖然現在我不是這個方法的大粉絲(git子模塊似乎是一個更方便的通用解決方案),但仍然可以將folderA過濾爲完全獨立的變更集序列,如第2頁所示,然後合併shell項目在folderA中使用這種類型的合併進行了更改。可能你不會覺得這種方式很方便,但它可能是有用的。
    +0

    子模塊在我的情況下工作得很好。謝謝! –

    0

    我不認爲有一個「簡單的解決方案」這個問題這是任何比你提出一個更好的(叉器/過濾器分支)。 Git不像SVN,它不支持「稀疏克隆」(一個存儲庫的部分克隆)。

    相關問題