我正在將大型和複雜的多模塊Maven項目從基於SVN的版本控制轉移到Git。將異國情調的回購結構從SVN移植到Git
作爲背景的一種方式,整個項目曾經住在一個SVN倉庫中。該項目由許多後端/守護程序模塊組成。一個核心前端模塊,然後是一些客戶特定的前端實現。
我們結束了(超過5年左右,因爲這些事情往往會發生)是一個非常奇怪的結構。一切都在一個SVN回購,但每個模塊有它自己的trunk
,tags
和branches
文件夾和獨立發佈週期。
在移植到Git時,我們決定將模塊移至自己的獨立Git倉庫。我們使用git svn
,因此將每個模塊的trunk
,tags
和branches
文件夾導出到Git倉庫中,以保留標籤和分支。
到目前爲止這麼好。
現在我遇到了一個問題,我不知道最好的辦法。
我有什麼是一些客戶特定的前端模塊。這些主要包含模板和本地化文件 - 用於品牌塑造等。
我們如何在SVN上做到這一點是我們有一個Trunk
模塊,它有trunk
,tags
和branches
。當我們需要爲我們的客戶品牌產品時,我們將svn cp
兩個整批放入另一個文件夾中,比如ClientA
。
所以現在我們有
Trunk
/trunk
/tags
/branches
ClientA
/trunk
/tags
/branches
因此,獨立工作繼續在兩個項目。事物被標記和分支,並獨立合併。
但是如果在前端代碼中發現錯誤,或者添加了有用的功能,我們會合並Trunk/trunk <-> ClientA/trunk
。因爲整個項目是一個svn cp
SVN可以優雅地處理這個合併(幾乎)。
那麼我該如何去做類似Git的事情呢?
我可以看到兩大類方法:
1)保持在一個混帳回購整個前端代碼,並命名爲客戶具體項目的分支。對分支和標籤使用一些命名約定。這將允許我們跨分支合併。
這樣做的缺點是,它似乎真的哈克。維護一個噩夢(哎呀,我把我的功能分支合併到錯誤的客戶端分支)。而且也很醜陋。
2)將項目分成自己的Git倉庫。這具有清潔的主要優點。這些項目有不同的生命週期,所以他們應該在不同的回購。
這裏的缺點是跨項目合併大概需要使用補丁文件完成。
那麼,有沒有人有移植類似Git的東西的經驗。你做了什麼?你如何維護它?你遇到了什麼問題?得到教訓?
做任何Git的大師有一個聰明的想法,我可以如何做到這一點的另一種方式?
我沒有想到這個 - 對Git來說還是新手。所以你建議把'Trunk'作爲'ClientA'的一個遠程設備,所以我有一些遠程的「origin」 - 這是推送CI的改變,也許是一個遠程的「trunk」,我可以通過它來與'Trunk'合併。聰明。有沒有辦法讓這個設置自動化 - 即當其他人克隆了ClientA時遙控器已經存在了?我們計劃將Gitorious或Gitlab用於私人中央回購管理器。 –
根據需要或方便克隆,這是完全正確的。當你克隆的時候,克隆的repo獲得原始的'origin'作爲遠程的,所以這部分已經在上面完成了,git提供了默認的pull,因爲這個場景很常見,完整的拼寫是'git pull origin trunk'。 – jthill
要提供默認配置,請使用模板目錄並使用任何您想要的預加載它們。 – jthill