2013-05-13 92 views
0

我有一個棘手的Git情況。我有一個Git倉庫,現在我需要 與另一個組織共享,並允許他們修改並將更改 還給我(並隨着我所做的未來更改保持更新)。但是,存儲庫中的文件數量包含專有信息,我無法在法律上披露這些信息。我無法完全從版本庫 中刪除這些文件,因爲它們對於我目前正在處理的內容至關重要。創建不包括歷史記錄但允許合併的新git存儲庫

理想情況下,我會專有的文件移動到一個單獨的存儲庫/庫, 但是這將是一個小重構項目,我想如果我能避免它。 目前,專有文件和非專有文件都在相同的目錄結構中混合貫穿 。

我的目標如下

  1. 爲他們提供倉庫沒有任何專有的文件。我不在乎他們 是否無權訪問修訂歷史記錄,它可以是隻有 一次提交的「新鮮」副本。

  2. 允許他們提交的新承諾還給我來更新我的倉庫。

  3. (理想情況下)允許他們接受來自我的新提交,其中僅包含對非專有文件所做的更改 。

有沒有辦法在Git中做到這一點,同時還讓我有一個單一的 庫專有和非專有的成分?

回答

0

這聽起來像是一個工作 a Git submodule。 一種方式去了解這將是

  • clone本身
  • cd於母公司回購裏面存放區,git submodule add <child repo>
  • 孩子回購將是私人文件,git rm其他文件,以避免 重複與父母回購

現在在父回購,你將需要git filter-branch出所有的私人文件。這是有爭議的一步,因爲它會一直重寫歷史到第一次提交私有文件。

最後,您可以維護這兩個回購協議,並無需擔心共享父回購。

0

(這是一個較早的答案完全重寫)

git checkout -b sanitized master 
# do your sanitization work 
git commit 
git tag sanitization-prep 
git checkout --orphan distributable 
git commit 
git checkout sanitized 
git merge -s ours distributable 
git tag distributable-base 
git checkout master 
git merge -s ours sanitized 

-s ours合併標記你做的已經合併到主的所有更改,而無需實際應用它們。由於可分發提交沒有父母,因此當您將該分支推送到他們將要工作的DMZ'd回購時,將發送所有內容。

當它的時間拉從分配分支

git checkout sanitized 
git merge distributable 
git checkout master 
git merge sanitized 

有一點需要注意的變化:你必須這樣做,是merge -s ours distributable-base到每一個分支,你會被合併到分配。除此之外,你的工作非常平凡。

我有一個公平的方法進入出站合併過程。我迄今爲止的那個人很可怕。

相關問題