2008-09-01 92 views
10

我有3臺Linux機器,並且希望某種方式使其主目錄中的點文件保持同步。有些文件,如.vimrc,在所有3臺機器上都是相同的,有些文件對每臺機器都是唯一的。用於管理主目錄的最佳版本控制系統

我以前使用SVN,但所有關於DVCSs的嗡嗡聲讓我覺得我應該嘗試一個 - 是否有一個特定的,最適合這個?或者我應該堅持使用SVN?

回答

2

我遇到了同樣的問題,並在Subversion之上建立了一個工具,它增加了權限,所有權和secontext跟蹤,將.svn目錄保留在實際版本化的樹中,並添加了圖層的概念,例如跟蹤與開發相關的所有配置,然後只檢查用於開發的機器。

這幫助我在我登錄的50多臺機器上更好地組織我的設置。

Here's the project page。它的邊緣仍然有點粗糙,但我們也在工作中使用它來爲我們的60多臺服務器更新系統配置。

一般來說,任何使用某種元數據文件跟蹤內容的版本控制系統都會在實際使用時造成痛苦。

4

任何DVCS都可能正常工作。我最喜歡的是Bazaar。將配置文件保存在.config,version,然後根據適當的符號鏈接是最容易的。

DVCS的一個好處是,您也可以對每臺機器的配置文件進行版本化,而不會干擾版本控制的全局配置。

0

版本控制軟件對於主目錄並不是很好。更糟糕的是,一些軟件並不喜歡.svn文件夾或開始解釋其內容。你當然可以試着用一些非常複雜的鏡像設置來解決這個問題,但這很難。

5

我已經有這個問題多年了,我不認爲版本控制必然是正確的路要走。我在the Unison file synchronizer方面取得了很好的成功,專門用於在兩臺機器上維護一致的主目錄。目前我正在管理7個複製品,並且細節有點棘手,但它是一個很好的工具,如果你從兩個開始,你會非常高興。

Unison和VCS之間的主要區別在於Unison願意延遲處理必須合併的衝突。加上它獲得所有的默認值。而且速度很快:我通過DSL線每天使用它來同步大約40GB的數據。

+0

感謝關於Unison的提示!我認爲VCS就是我需要的,但我其實並不在乎版本控制,只是同步,所以Unison更好。另外在集市版的主目錄中有(例如)集市結賬似乎有問題。 – Patrick 2010-04-10 22:44:30

0

gitMercurials的便宜分支將很適合這種情況。我從Mercurial開始,因爲它更簡單,但隨後轉移到git。非常靈活地處理這個

0

一種方法是有版本控制下一個build目錄,不要試圖和svn您的實際home目錄(它有自己的問題)

所以在這裏面你保持一個結構類似

 
/home/you/code/dotfiles 
/home/you/code/dotfiles/dotbashrc 
/home/you/code/dotfiles/dotemacs 
... 
/home/you/code/dotfiles/makefile 

和makefile文件可以包含專門文件(或沒有)

可能比你需要的更重,但如果你的實際設置比較複雜(我已經在這樣做了在3和或4個不同的Unix系統的邏輯時間),那麼值得做這樣的興奮。

0

我爲此使用git。到目前爲止,我已經能夠在幾臺機器上保持主目錄同步,而不需要分支和合並。相反,我使用git rebase。目前的衝突很少,而且很容易解決。

我把需要分開的內容放在版本控制之外的文件放在.gitignore中。

我把配置文件下列工具中的git:

  • 各種貝殼
  • Emacs和應用,即
    • 角馬
    • BBDB
    • 的emacs-w3m的
  • 屏幕
  • 各種實用程序和腳本

我記筆記,並在等它有自己的Git倉庫的子目錄。

0

如果您還沒有,我會建議您調查etckeeper。它是專爲使用版本控制系統版本在/ etc配置文件:

etckeeper是一個工具集來 /出租等被保存在一個Git, 善變,的darcs,或BZR庫。 它掛接到apt(和其他包 管理員,包括yum和pacman-g2) ,以在升級包期間自動將更改作爲 更改爲/ etc。它 跟蹤修改的文件元數據 控制系統通常不支持 ,但這對於 /etc很重要,例如 /etc/shadow的權限。它是相當模塊化的,並且可以配置爲 ,如果您瞭解使用版本控制的 的基本知識,也可以使用 。

儘管它是爲/ etc設計的,但我認爲它可能也適用於主目錄,因爲基本需求是相同的。

0

我知道這是一個古老的線程,但在搜索某些點文件時發現它。

我目前的系統使用的是顛覆。我做的關鍵是檢查工作副本到〜/ .svnhome /(事後應該叫它.dotfiles或更通用的東西)。然後,我將該計算機上實際使用的文件創建爲符號鏈接。例如我的.procmail和.spamassassin文件夾只在郵件服務器上需要,所以我沒有鏈接到我的家庭服務器上。

唯一有一些差異的文件是.bashrc文件在mac上有一些額外的行。所以在.bashrc的底部,我檢查是否存在.bashrc_local並解析它。

這是我使用Subversion最後剩下的東西(其他所有工作都在使用git)。 svn的好處是,因爲它不是一個dvcs,所以我不必擔心在一臺服務器上意外提交併忘記推送它。

我曾考慮過把它移到git上,所以我可以創建分支。使用上面的例子,我將爲我的主服務器建立一個分支,我將添加.procmail和.spamassassin文件夾,但在主分支中沒有這些文件夾。但是目前的系統在git甚至存在之前已經運行良好 - 並且現在沒有任何特別的動機去改變它。

相關問題