我們團隊的一部分發現git很酷,並開始使用它作爲svn客戶端。所以每個開發者都有一個本地的git倉庫,並通過git-svn與svn同步。是一個bidrectional Git <-> Svn同步(可寫)可能嗎?
然後,我們想做代碼審查的提交併發送補丁同事審查。這種方法不是很直觀,因爲svn中的SAME修訂版的校驗和對於每個本地git存儲庫都不相同。不知道爲什麼,因爲內容應該是相同的。也許這是svn rebase
中的一個錯誤?
所以我們試圖在scm服務器上建立一箇中央的git倉庫。現在每個使用git的開發人員都可以將他的更改推送到這個中央存儲庫,而執行審查的其他開發人員可以將這些更改拖到他的回購站中。不幸的是,因爲每個開發者也與svn rebase
同步,校驗和問題再次出現在那裏。
閱讀很多帖子後,我覺得管理一個團隊,既顛覆和git客戶最好的辦法是讓:
- 中央Subversion版本庫
- 中央Git倉庫(產地)
- 服務器
- 在中央Git的工作副本對於每一個混帳開發一個本地的Git倉庫
- 對於每個SVN開發一個普通的工作拷貝
現在我們需要一箇中央工作來同步svn和git,在服務器上的中央git工作副本上執行這樣的常規腳本。
# First transfer the commits from git to svn
git checkout svnmaster
git pull origin svnmaster
git svn dcommit
# Now from svn to git
git svn rebase
git push origin svnmaster
我的問題,現在:
- 這是最好的辦法(而無需切換到Git的completeley)
- 是否有已經做同步防彈窗腳本?
- 是否存在已知不同校驗和的問題,並且可能有已知的解決方法 ?
感謝您的每一個回答!
編輯 我最近發現一個項目,看起來非常有前途:
我想你想解決一個不存在的問題。如果Git哈希值不同,那麼這兩個存儲庫有不同的歷史。如果兩個開發人員從相同的Subversion存儲庫(在同一個URL)獲取並獲取* all *版本,那麼最終的Git散列應該是相同的。如果沒有,你做了一些不同的事情。如果你能把這些問題整理出來,大部分問題的其餘部分都不會成爲問題。 (我知道它是這樣工作的,因爲我已經完成了。) – 2011-03-09 05:58:22
實際上哈希可能很容易變得不同,這取決於是否每個人都有相同的作者文件等細節。 – 2011-03-09 10:52:02
我是SubGit(http://subgit.com/)開發者,並且想補充說SubGit程序已經進入了它的EAP階段。 SubGit刪除所有git-svn rebase/dcommit/fetch的麻煩,並允許使用真正的git不知道有一個Subversion存儲庫。 – 2011-09-02 21:30:36