2011-02-02 121 views
2

我有一個回購,我有一個主分支,最終將包含此應用程序的「核心」,以及將包含核心的客戶端分支,以及公共包含所有資產,樣式和前端視圖。我知道這可以通過本地回購測試完成。但問題是我從一個完全建立的客戶端應用程序開始,我想從主分支中分出幾個文件夾,而不是將這些刪除傳播到其他分支,當我向外合併到客戶分支時,更新到系統的核心。Git - 如何從一個分支中刪除文件

所以,用更簡單的術語,我如何從一個分支中刪除文件,而不是在合併時將其刪除到其他分支?

+2

國際海事組織你應該使用子模塊來分離客戶的具體信息(資產等)。手動處理這件事是對災難的邀請。 – jweyrich 2011-02-02 14:33:05

+0

我向所有選項開放,請解釋你的意思,也許更多的答案。 – jondavidjohn 2011-02-02 14:35:08

+0

我發佈它作爲真正的答案,所以我們可以討論它,我會相應地更新。 – jweyrich 2011-02-02 14:48:41

回答

0

我最終剛剛爲核心創建了一個新的存儲庫,並且重新構建了客戶端分支,因爲這個結構是事後的。所以我試圖向後做。

1

您可以刪除banch中的文件,但不是將您的分支合併到「Core」中,而是將刪除的文件「core」banche嵌入到分支中。這樣他們將始終保持同步,但是您刪除的任何文件只會在指定的分支中被刪除。

+0

是的,這是我需要修剪和清理客戶特定材料的核心,但是,是的,我的最終目標只是從核心向外合併,向所有分支更新共同特徵,以便公共資產不受影響。 – jondavidjohn 2011-02-02 14:28:55

2

國際海事組織你應該使用submodules分隔客戶的具體信息(資產等)。手動處理這是對災難的邀請

爲每個客戶端創建一個單獨的存儲庫,並添加一個指向您的核心的子模塊以及它們之間共享的任何其他內容。客戶端之間不共享的代碼不需要屬於核心,也不需要屬於其他共享子模塊。這意味着與客戶端相對應的每個(當前)分支必須成爲單獨的存儲庫。畢竟,他們彼此獨立,這就是整個觀點。

您將與這個倉庫層次結束:

 core 
     /\ 
    /\ 
client1 client2 

UPDATE

重要:備份一切,所以你不惹上麻煩,如果出現錯誤。

所有這些都高度依賴於您的場景。但下面是我在非Windows系統描述瞭如何實現一個想法:

1)分裂您當前倉庫到各種信息庫(如:核心,客戶端1,客戶機程序等):

cp -R original_repo copy_repo 
cd copy_repo 
git checkout desired_branch 
git filter-branch --prune-empty --subdirectory-filter desired_directory -- --all 

也爲每個客戶端目錄重複此操作。在這一步結束時,您將爲每個部分(核心,客戶端1,客戶端2等)分別建立一個存儲庫。

2)作爲子模塊添加新的分割核心庫到每個client1..clientN存儲庫:

git submodule add <path_for_core_alone> 
git submodule init # Add the submodule to .git/config 
git submodule update # Clone the core repository 

3)咖啡&利潤。

0

我不是一個git用戶,但一般來說,我相信你應該能夠從trunk中刪除文件,然後在從trunk到分支的合併過程中,撤銷該更改(例如保留或恢復文件在工作副本中),然後提交合並。在未來的合併中,變更集應該被視爲合併到分支中。