2009-08-21 119 views
7

我是比較新的版本控制,迄今只有使用Subversion使用TortoiseSVN/VisualSVN的經驗。我一直在閱讀其他類型的VCS(git,mercurial等),並且正在考慮嘗試它們 - 然而,針對特定VCS的許多爭論似乎基本上歸結爲主觀偏好,可能會讓每個人都看起來。多個同步版本控制系統?

在考慮這樣做時,我想知道是否在理論上可以在單個代碼庫上使用多個VCS。哪些(如果有的話)VCS的組合可能會有這種可能性?如果可能的話,它會試圖在各自的排除清單上拼湊一個後勤噩夢?

這樣做的一個可能的參數可能是備份冗餘。幾個VCS提供者(Beanstalk,Github,Bitbucket)提供了一個免費的倉庫,所以你可以在幾個不同的地方免費備份相同的倉庫。

回答

10

當然,這是可能的,在某些情況下甚至是常見的。例如,gitsvn是一個自然對。標準用例是一個組織,由於各種原因必須擁有一個傳統的中央Subversion存儲庫,但開發人員希望使用Git來提高其提供的生產力。

輸入git-svn。現在,開發人員將他們自己的本地Git回購站推送到中央Subversion存儲庫,但仍然獲得了Git的所有酷炫功能。這個過程對於Subversion版本庫來說是完全透明的,它只是看到推送給它的更改。

1

在一個代碼庫上處理多個VCS通常很困難(但並非不可能)。但是,您可能會遇到刪除文件的問題...有時,一個VC不會意識到文件已被刪除。

但是,我不建議這樣做。大多數VC使用代碼庫中的文件來跟蹤更改。擁有多個VC系統會導致文件系統受到很多文件的干擾,這些文件可能會導致其他VC中的問題。

0

我知道這並不完全使用多個VCS,但有些VCS可能有不同的前端。例如,Git可以擁有一個SVN前端,這樣SVN客戶端就可以使用Git存儲庫(並且他們不會更聰明,因爲它是Git)。我認爲還有其他的前端可用。

+0

我認爲這實際上是使用多個VCS。 Git並不關心上游回購的來源。這只是另一個參考,真的。 – 2009-08-21 21:20:48

4

水銀(帶hgsubversion),GIT中(與GIT-SVN)和BZR(BZR-SVN)都具有一個選項與上游svn存儲庫同步。

所以它已經是可能的(假設擴展工作不夠好),以與型動物SCM的svn存儲庫進行交互。

0

當然可以做到這一點。我使用git-svn來更新我的本地git存儲庫並提交給公司svn存儲庫。使用任何您決定使用的VCS工具,您最有可能遇到的問題是在使用來自遠程存儲庫的更改更新本地存儲庫期間。

如果使用集市爲本地資源庫,the most problematic thing是當你當地的集市庫發散,並要提交到遠程倉庫。 有時你必須做「推覆蓋」來解決它。

使用Git SVN更新從遠程svn庫的變化我的本地git倉庫時,我沒有遇到這種「分歧庫的問題。」但有時候,當我做「git svn rebase」時,它會有衝突,如果沒有按照正確的方式解決它,你可以花費很多時間。因爲我一遍又一遍地遇到這個問題,所以我有documented it,現在我覺得它不是什麼大不了的。

1

當我看到你的問題時,我的第一反應是,「當然,技術上可行,但是一個非常糟糕的主意。」

看到其他評論後我會稍微回溯一下。好的,每個用戶都可以擁有一個與中央存儲庫分開的本地存儲庫,並使用它來基本保留檢查點。在這種情況下,它們可以是完全獨立的VCS,並不重要。

但是,如果您考慮兩個不同的VCS同時持有您的中央存儲庫,這在技術上是可能的,但是一個非常糟糕的主意。 VCS的重點在於您保留了對文件進行的所有更改的歷史記錄,您可以看到何時進行了哪些更改 - 如果用戶在提交時包含了半分正確的評論 - 爲什麼。如果擁有2007年6月19日版本的客戶遇到問題,則可以按照2007年6月19日的版本檢索代碼,以便調試用戶實際運行的代碼。如果你發現最新的變化是一個很大的錯誤,你可以回滾。等等

但是,如果你有兩個存儲庫...你會做每個提交相同的兩個存儲庫?至少這是一堆額外的工作。在最壞的情況下,遲早有人會犯錯誤,在別人做出干預提交後的第二天,忘記提交或不提交,並且存儲庫不會完全相同。或者你是否會交替,有時會檢查出A,有時候會出現B?但是,沒有人會知道這兩者中的哪一個。

我可以看到使用兩個不同的VCSs幾天或幾個星期只是試用它們,看看它們是如何工作的,感受一下你更喜歡哪一種。但即使如此,我也不會那樣做我的生產系統。我會有真正的生產VCS,然後是另一個我們一起玩,但沒有人認爲是權威的。