2014-02-27 26 views
2

我最近繼承了一個項目,並希望通過將我們的內部Git存儲庫與客戶端的SVN存儲庫關聯來清理'代碼交付'工作流程。將現有的Git存儲庫與現有的SVN遠程關聯,但沒有共同的歷史記錄

存儲庫概述

我的公司已經爲客戶開發了一個軟件包。我們使用Git存儲庫跟蹤我們的更改。完全分開,我們提供偶爾的代碼丟棄和釋放二進制文件到客戶端的SVN存儲庫。客戶端SVN倉庫的文件結構是我們自己文件結構的一個子集 - 它包含一些文件和文件夾,但不是全部。

期望中的工作流

最後,我想我會在我們稱爲「ClientSVNDelivery」 git倉庫創建一個分支。這個分支應該反映客戶SVN回購的狀態。無論何時我們想向客戶提供更新,我想git merge我們對該分支(從「主」)的更改,然後git-svn dcommit這些更改到他們的遠程站點。

問題

從邏輯上講,我遇到的問題是出發點。由於這兩個存儲庫都有很長的歷史記錄,並且文件夾結構不完全相同(再次,SVN項目是我們內部git倉庫中文件夾的一個子集),所以我不確定如何創建需要的關聯建立我的'ClientSVNDelivery'暫存分支(即如何形成一個允許合併實際工作的共同祖先)。說實話,我甚至無法描述我想要做什麼!

我會從最近的內部版本創建分支嗎?一些隨意的早期修訂?或者我會分拆remove-svn歷史嗎?

問題

有沒有人處理過這種情況?您是否可以簡化流程,以及您採取了哪些步驟來建立中間分支機構?你是如何創建歷史協會的?

+1

不知道你所描述的快速和漂亮的解決方案,但我認爲其中一種可能的方法是從**最新的SVN **分支創建一個Git分支 - 這會給你使用Git將代碼交付給客戶端的能力。比你可以繼續在你的分支Git工作和**櫻桃選擇**只改變指定的路徑到該「ClientSVNDelivery」分支[描述] [這裏](http://stackoverflow.com/questions/5717026/how-to -git-cherry-pick-only-changes-to-certain-files)(您可以編寫預提交鉤子以放棄在「ClientSVNDelivery」分支中不需要的路徑中的更改) – tijs

+0

這是一個很好的選擇。如果沒有辦法陪審 - 在兩個分支之間搭建共同的祖先,我認爲這是我可以選擇的選項。 (你應該發佈一個答案,即使有更好的選擇,它肯定會得到我的upvote。) – BTownTKD

回答

1

不知道你所描述的快速和漂亮的解決方案,但我認爲其中一種可能的方法是從最新的SVN分支創建一個Git分支 - 這將使您能夠提供代碼到使用Git的客戶端。您可以繼續使用Git中的分支並且cherry-pick僅在指定路徑中更改爲「ClientSVNDelivery」分支,如here所述(您可以編寫預提交掛鉤以放棄不需要的路徑中的更改「 ClientSVNDelivery「分支)

+0

我現在已經接受了這個答案,抱怨的是,它可能是一個真正的痛苦中的櫻桃選擇每一個相關的提交,我想推到我的客戶端的SVN服務器。 – BTownTKD

-1

您可以使用git svn子命令通過git與遠程SVN存儲庫進行交互。閱讀它的手冊頁(由於SVN限制和阻抗不匹配,有幾個警告)。我還沒有嘗試過使用git svn來吸收SVN信息庫,然後放寬,但我沒有看到任何理由不應該工作。

如果你走git svn路線,請注意,SVN並沒有真正被設置爲吸收整個項目的歷史,這個過程可能需要很長的時間。如果它沒有全部崩潰或以其他方式停止,則可以重新啓動(至少大部分時間),並繼續其任務。

+0

感謝您的輸入,但我已經在我的問題中提到'git svn';我打算使用它。問題更多的是關於在兩個不相關的歷史之間創建關聯和「共同祖先」的策略 - 一個是由'git svn'創建的,另一個是主要的,先前存在的git歷史。 – BTownTKD

+0

您將如何縫合兩個單獨的歷史?作爲第一步,您需要將兩者都轉換爲更靈活的系統(git),然後再導入另一個系統。我合併了兩個版本庫,主要是通過拉一個版本來修復合併,但是我事先確定只有少數文件對於兩者都是共同的。如果這真的是你想要的,你將不得不提供更多細節。我懷疑任何一個不能靠近的人,只要看看就能幫上忙。 – vonbrand

相關問題