2011-12-09 33 views
1

現在,我已經使用Dropbox在多個虛擬機(一個Windows,一個Mac,一個Linux)上同步一個Git存儲庫。我會在其中一臺機器上進行更改,Dropbox會負責將文件和repo的更改同步到其他機器上。如何在多臺機器上工作,在沒有Internet的情況下保持同步?

這工作非常無縫。我在OSX上編寫代碼,在Windows和Linux上測試代碼,也許在那裏做一些改變,然後從三者中的一個提交。

但是,它有三個主要缺點:

  1. 它需要互聯網連接。我經常不得不依靠我的手機進行互聯網連接,如果我在火車上,並且每個月只有幾百Mb的話,這是不可靠的。
  2. Dropbox同步所有包括目標文件,Visual Studio調試數據庫在內的一切事物,以及不需要同步的大量不必要的東西。
  3. 它總是通過Dropbox服務器,這對一些小項目或一些開源的東西很好,但我不想將我的工作文件推送到不受信任的服務器。

那麼,你如何管理這樣的環境?

編輯: 實際上,所有三個虛擬機都在同一檯筆記本電腦上,因此它們之間的網絡連接不成問題。另外,我經常在一個操作系統上編碼並在另一個操作系統上進行編譯 - 然後來回查找,直到找到所有錯誤。我不想用數百次增量提交來發送公司回購協議。

編輯2:
爲了給你一個我所期待的,這裏是我想出了一個部分解決方案的想法:在每一臺機器,我創造了我想工作的文件的git倉庫。通常,我將開始研究一臺機器上的錯誤/功能,然後完成我的工作。在下一臺機器上,我將調用git reset origin來加載第一臺機器的更改,然後使用git commit --amend繼續執行提交。這會來回幾次。一旦我完成了,我將最終實現這些更改(不再進行修改),並開始研究下一個功能/錯誤。

但是,這個工作流程感覺繁瑣和不雅。我所尋找的是能夠產生相同輸出的東西 - 一個是回購協議 - 但是在三臺機器之間流暢地創建。

+1

使用真正的GIT回購?另外,除非你的機器在同一個地方,否則,如果沒有一些冗長的局域網電纜,這是不可能的! – Kyle

+0

Bitbucket,GitHub,Google Code ...如果你需要一個私人的git回購,Bitbucket有免費的。爲什麼要使用Dropbox? – mingos

+0

@mingos我無法使用互聯網回購協議來同步我的機器,因爲我並不總是有互聯網連接。 – bastibe

回答

2

您可以考慮設置您自己的軟件版本控制服務器。

這些服務器的大多數客戶端在不同的操作系統和平臺上都有實現。 但是,如果您想在不在局域網中的計算機之間進行通信,那麼您將需要互聯網連接。

版本控制服務器網絡通信可以通過NAT通過網關暴露在互聯網上。您可以通過建立隧道機制來實現安全性。任何客戶端然後會隧道到網關服務器,然後與版本控制服務器進行通信。

至於控制哪些文件實際版本:我有一些SVN的經驗,您可以選擇文件級別哪些文件添加到版本控制。那麼SVN客戶端就會忽略其餘的文件和目錄。

編輯:

讀原作者的問題編輯: 也許設置一個四當前虛擬機,包含版本服務器。 SVN不是(通過任何想象)很難管理。 (RTM)。四臺虛擬機連接到服務器。 (當然,如果可以在同一臺機器上並行運行機器。)

+0

Git不需要專用服務器,所以這看起來像是倒退了一步。 – tripleee

+0

然後第4臺機器可以用作文件服務器/共享磁盤空間。基於網絡的文件傳輸到這臺機器應該提供抽象接口來解決在不同平臺之間設置文件共享的麻煩。 –

+0

仍然乞求不同。甚至連SVN都不需要網絡連接,更不用說公共互聯網連接了。只需'svnadmin在本地磁盤上創建'repo,並使用'file:/// path/to/repo'作爲它的URL。 – tripleee

0

如果您可以在三者之間共享一個磁盤,請將主磁盤庫放在該磁盤上。 (請確保您進行備份特別是對於移動媒體!)

編輯:更詳細,你可以在U盤或硬盤驅動器上的共享分區的主回購(如你知道你使用同一硬件上有多個虛擬機)。

要設置專用git回購,只需創建一個空目錄並運行git init

假設你是在你的Ubuntu箱,並有一個USB記憶棒的文件系統,你可以閱讀和所有操作系統編寫,安裝在/media/usbgit,運行此:

vnix$ mkdir /media/usbgit/mycode 
vnix$ cd /media/usbgit/mycode 
vnix$ git init 
Initialized empty Git repository in /media/usbgit/mycode/.git/ 

(既然你已經有一個混帳回購協議,你可能只是想將它複製到U盤代替:

vnix$ cd /media/usbgit 
vnix$ git clone /home/you/work/wherever/mycode 
Initialized empty Git repository in /media/usbgit/mycode/.git/ 

現在,這將包括所有來自你拉回購協議提交)

現在您有一個空的存儲庫,您可以從所有框中克隆和提取。一旦你安裝了USB棒,你可以從它克隆。

vnix$ cd 
vnix$ mount | fgrep usbgit 
/dev/whatever on /media/usbgit type NTFS (rw) 
vnix$ git clone /media/usbgit/mycode 
Initialized empty Git repository in /home/you/mycode/.git/ 
warning: You appear to have cloned an empty repository. 

所有這一切是可行的與SVN太(使用svnadmin create初始化存儲庫,並svn checkout file:///media/usbgit/mycode檢查出來),但你將失去一個分佈式VCS,這在您的方案似乎有用的好處。

特別是,分佈式VCS,你可以有多個私有倉庫(每個工作目錄是對自己的存儲庫),你可以用同步,並從您的私人主人一個公共倉庫例如拉在Github上 - 確保你知道你在哪裏。

相關問題