我在哪裏工作,我們使用Git來處理當前的項目,但我們在SVN上有一些遺留項目。我正在將幾個大型遺留項目(26,000+個提交)從SVN轉換爲Git。將SVN倉庫轉換爲Git,維護SVN倉庫
但是,我的問題是,我們也希望保留SVN倉庫。原因在於部署是通過更新/切換客戶端環境中存在的SVN檢出來處理的:更新我們的部署腳本以使用Git,重新配置我們所有客戶的環境以使用Git檢出等是一項非常重要的任務;我們認爲,切換到Git的好處(對於所有項目都有一個具有一致的拉取請求/代碼審查流程的單個VCS),可悲的是這樣做的成本超過了這個成本。
因此,作爲一種妥協,我們希望有一個工作流程是這樣的:
- Github上拉請求。
- 將拉取請求合併到主。
- 使用Git master分支中的最新代碼更新SVN。
- 更新客戶端服務器上的SVN簽出。
SVN只會作爲此過程的一部分寫入(即我們只需要在一個方向同步:Git到SVN)。
我已經看到git svn
命令和https://github.com/nirvdrum/svn2git和一個同事已經成功使用SVN從SVN生成Git存儲庫。但是,在檢出他生成的存儲庫(來自Github)後,我無法輕鬆地將提交返回到SVN。我們原本打算使用git svn dcommit
來做到這一點,但據我瞭解,這個命令本質上需要Git倉庫與SVN同步。 git svn dcommit
似乎沒有與Git倉庫的全新結帳工作:我相信這是因爲git svn init
和git svn fetch
需要已經運行之前dcommit
將工作(請糾正我,如果我錯了)。
與此問題是,git svn fetch
需要天運行在這個大的倉庫。任何希望執行發佈的開發人員都需要將SVit簽出與SVN同步,這似乎不是一個合理的選擇,特別是當它被認爲是傳統項目,但很少。
作爲dcommit
的替代方案,我編寫了一個腳本來檢出SVN和Git存儲庫,刪除SVN checkout的內容並將其替換爲Git存儲庫的內容,然後提交回SVN。使用這種方法,提交的原子性和新提交的歷史記錄不會被複制到SVN,但這不是問題。歷史依然存在於Git中:只要SVN反映了Git中文件的最新狀態,就不會有問題。這幾乎似乎工作,但這個腳本生成大的空白提交(對於行結束的變化)和從SVN刪除空目錄(Git不支持像SVN提交空目錄)有一些問題。
有沒有更好的方法來處理這個工作流程?如果腳本是要走的路,您能否提出任何配置選項以使此過程順利進行?我認爲SVN的eol-style
和Git的core.autocrlf
設置可能可以用於解決此問題(可能與dos2unix
這樣的工具結合使用),但我無法完全解決最佳方法。我可以用.gitkeep
「佔位符」文件解決空目錄問題,但這顯然需要測試代碼以確保這些文件可以存在而不會造成問題:是否有其他解決方法?
任何意見讚賞。
一個骯髒的方法來解決每個開發人員做一個新的'git svn fetch'的問題可能是共享一次獲取的副本(可能會從時間更新)。另一種選擇可能是創建一個簡單的共享(web)工具來壓縮git的變化並推送到svn。但調整您的同步腳本(修復EOL和目錄)的路徑看起來對我來說是最合理的。 – 2014-11-18 22:04:32