2011-07-28 47 views
1

我的團隊在斷開模式下工作。即他們開發應用程序並在公司網絡內部使用SVN來管理代碼的版本。斷開連接版本控制

我坐在客戶辦公室裏,沒有從客戶機器直接訪問我公司的網絡。我維護我自己的SVN,在那裏檢查從我的團隊每天收到的代碼丟失,並對代碼進行更改。

我在這種操作模式下面臨兩個問題。

  1. 如果我的球隊刪除/重命名了一些文件,我簡單地粘貼從我的團隊收到了我的工作拷貝..刪除的文件保留在我的工作拷貝新的代碼。
  2. 爲了避免這個問題,我讓他們給我發補丁文件。修補程序文件的成功率更高,但無法處理二進制文件。因此,如果我的團隊將新的images/xls模板等添加到代碼庫中,我不會通過補丁文件獲取它們。 2.

因此,我開始覺得兩個斷開連接的SVN存儲庫不適合我的情況。

  • 你們以前是否曾經遇到這種情況?
  • 你做了什麼?
  • SVN中有什麼可以幫助我嗎?
  • 或者是否有另一個版本控制系統可以幫助我解決這個問題?
  • 如果是,您可以指向我在VCS中的相關命令嗎?

優選免費替代品。

+0

「是否有另一個版本控制系統可以幫助我解決這個問題?「我想你已經知道答案是「是的」,根據你選擇的標籤爲這個問題:) – MatrixFrog

+0

@MatrixFrog,我不知道他們是否會.. ..我添加標籤以獲得關注使用這些VCS的用戶。我在Joel的[好教程](http://hginit.com)之後玩了Mercurial。但我無法解決這個問題..你能提供更多關於如何處理我的方案的信息嗎? –

+0

我會說'git-svn'會是一個很好的開始,因爲它看起來像幾個回答者所說的。 – MatrixFrog

回答

4

我會將SVN服務器轉換成像git這樣的真正的DVCS。即使沒有直接連接,也可以使用通過電子郵件提交的補丁(這適用於二進制文件)傳播之間的變化。見man git-format-patchesman git-am。如果您不打算閱讀這些補丁,還需要man git-bundle

如果轉換中央服務器不是一個選項,你仍然可以請求SVN網絡上的某個人使用git-svn,然後生成他發給你的補丁,或者在你發送給他的補丁應用之後。 (殺SVN當然是一個更好的長期解決方案。)

+0

看起來像git-bundle和git-am「應該」滿足我的需求。感謝您的指點。 –

0

如果您位於不同的網絡並且無法訪問VCS,則只能手動打補丁。即使在DVCS(git或mercurial)中,您也必須位於同一個網絡中才能從遠程回購站點進行推送或拉出。所以,據我所知,手動打補丁是你的情況中唯一的解決方案。

SVN專家的評論?

+0

我也這麼認爲..但它總是很好問。我已經經歷了一年多的痛苦。 –

+0

這有點誤導。使用DVCS,您可以發送電子郵件「修補程序」來保存所有歷史記錄。你運行一個像'git am'這樣的命令,你的本地倉庫就像你在辦公室裏一樣完全同步。 –

0

自己沒有使用它,但AFAIK可以使用Bazaar。它是一個分佈式版本控制,可以將SVN用作中央存儲庫。

請參閱bzr-svn

+0

謝謝elevener ......你能指點我一些關於bazzar如何幫助解決我所描述的問題的具體信息嗎?僅僅是DVCS就不足以解決我面臨的問題。 –

+0

看看鏈接。 Shorty,你正在建立本地bazzar存儲庫並且使用它。但與SVN不同的是,您可以從SVN中央更新本地bazzar存儲庫,並直接從bazzar將本地更改提交到SVN中。 – elevener

+0

事實上,如果您有足夠的網絡帶寬,您可以嘗試使用此類配置。你在本地都有SVN倉庫和bazzar/git之一。您使用bazzar/git,您的團隊會不時向您發送整個SVN存儲庫。你將你的本地SVN副本替換爲你收到的副本,然後從本地SVN更新你的副本。不知道,但它可以工作。 – elevener

1

看一看bzr-svn由@elevener提到的,或者,對於一個Git等效,使用git-svn

編輯:

我的印象是,你有時可以訪問公司網絡,在那裏你可以推/拉你的改變。如果這不是真的,那麼我認爲手動打補丁是唯一的方法(因爲你幾乎沒有訪問公司的SVN服務器。)

您的公司是否提供通過某種方式訪問​​內部網絡(SSH ?VPN?)?如果是這樣,也許你可以使用SSH隧道或VPN來訪問SVN服務器。

+0

謝謝瑞恩。你對@Pandiaraj的迴應有什麼想法?兩個網絡都彼此斷開連接。 bzr/git如何在這種情況下提供幫助? –

+0

見編輯的迴應 – ryanprayogo

+0

我的公司提供VPN訪問..但它只能從公司的筆記本電腦(或至少我認爲是這樣)。客戶的筆記本電腦自帶不同供應商提供的vpn。一團糟! –

2

你應該看看git-svn。基本的想法是,你有一個本地的git倉庫,而不是本地的svn工作副本。您可以進行多個本地提交,然後在完成時將這些本地提交推送到遠程svn存儲庫中。它允許您完全從中央svn存儲庫中斷開連接,但仍然允許您在日常工作中使用版本控制。

0

看看git-bundle爲sneakernet傳輸步驟。它應該允許您打包一系列更改,以便在網絡之間通過VPN進行手動傳輸。

我一直在尋找一個在交換問題我自己(見我的各種做題),我認爲他們可以進行的工作,雖然你可能需要使用該公司的筆記本電腦;-)