用于管理主目录的最佳版本控制系统

时间:2008-09-01 20:12:08

标签: linux version-control

我有3台Linux机器,并希望通过某种方式将dotfiles保持在主目录中同步。有些文件,如.vimrc,在所有3台机器上都是相同的,有些文件对每台机器都是唯一的。

之前我曾经使用过SVN,但是关于DVCS的所有嗡嗡声让我觉得我应该尝试一下 - 有一个特别适合这个吗?或者我应该坚持使用SVN?

10 个答案:

答案 0 :(得分:5)

我已经遇到这个问题多年了,我认为版本控制不一定是正确的方法。我在the Unison file synchronizer取得了很大的成功,这是为了在两台机器上维护一致的主目录而设计的。我目前正在统一管理七个副本,细节有点棘手,但它是一个很好的工具,如果你从两个开始,你会非常高兴。

Unison和VCS之间的关键区别在于Unison愿意延迟处理必须合并的冲突。此外,它获得所有默认值。它很快:我每天通过DSL线路使用它来同步大约40GB的数据。

答案 1 :(得分:4)

任何DVCS都可能正常工作。我最喜欢的是Bazaar。最简单的方法是将配置文件保存在.config,版本中,然后根据需要保留符号链接。

DVCS的一个好处是您也可以对每台计算机配置文件进行版本控制,而不会干扰版本化全局配置。

答案 2 :(得分:2)

我遇到了同样的问题,并在Subversion之上构建了一个工具,它增加了权限,所有权和secontext跟踪,将.svn目录保存在实际版本化的树之外,并添加了一个层的概念,以便您可以示例跟踪与开发相关的所有配置,然后您只能在用于开发的机器上查看。

这有助于我在登录的50多台计算机上更好地整理设置。

Here's the project page。它的边缘仍然有点粗糙,但我们也在使用它来为我们的60多台服务器进行版本系统配置。

通常,任何使用某种元数据文件来跟踪内容的版本控制系统都会让您感到痛苦,就像实际使用它一样。

答案 3 :(得分:0)

版本控制软件对于主目录来说并不是很好。更糟糕的是,某些软件并不真正喜欢.svn文件夹或开始解释其内容。你当然可以通过一些非常复杂的镜像设置来解决这个问题,但这很难。

答案 4 :(得分:0)

以下是Mozilla开发人员试图执行此操作:Version controlling my home dir,评论中有一些建议。

答案 5 :(得分:0)

gitMercurials便宜的分支对这种情况很有用。我从Mercurial开始,因为它更简单,但后来转移到git。

答案 6 :(得分:0)

非常灵活地处理这个问题的一种方法是在修订版本控制下创建一个构建目录,而不是尝试和svn你的实际主目录(它有自己的问题)

所以在这里你保持像

这样的结构
/home/you/code/dotfiles
/home/you/code/dotfiles/dotbashrc
/home/you/code/dotfiles/dotemacs
...
/home/you/code/dotfiles/makefile

和makefile可以包含专门化文件的逻辑(或不包含)

可能比你需要的重,但如果你的实际设置很复杂(我一次在3或4个不同的unices中完成),那么值得这样做。

答案 7 :(得分:0)

我为此使用git。到目前为止,我已经能够将多个机器上的主目录保持同步,无需分支和合并。相反,我使用git rebase。到目前为止,冲突很少,而且很容易解决。

我通过将文件放入.gitignore来保留需要将单独内容从版本控制中删除的文件。

我在git中保留以下工具的配置文件:

  • 各种贝壳
  • emacs和应用程序,即
    • 角马
    • BBDB
    • 的emacs-w3m的
  • 屏幕
  • 各种实用程序和脚本

我在一个有自己的git存储库的子目录中记录笔记。

答案 8 :(得分:0)

如果你还没有,我会建议调查etckeeper。它设计用于使用版本控制系统在/ etc中对配置文件进行版本控制:

  

etckeeper是一个工具集合   让/ etc存储在git中,   mercurial,darcs或bzr存储库。   它挂钩到apt(和其他包   管理人员包括yum和pacman-g2)   自动提交所做的更改   在软件包升级期间到/ etc。它   跟踪重新编辑的文件元数据   控制系统通常不会   支持,但这很重要   / etc,如权限   的/ etc /阴影。它非常模块化   可配置,同时也很简单   如果您了解基础知识,请使用   使用版本控制。

虽然它是为/ etc设计的,但我认为它可能也适用于主目录(可能有一些适应性),因为基本需求是相同的。

答案 9 :(得分:0)

我知道这是一个旧线程,但在搜索一些dotfiles时发现它。

我当前的系统正在使用subversion。我做的关键是将工作副本检入〜/ .svnhome /(事后看来应该称之为.dotfiles或更通用的东西)。然后我创建符号链接到我在该计算机上实际使用的文件到家。例如,我的.procmail和.spamassassin文件夹只在邮件服务器上需要,因此我不会链接我的家庭服务器上的文件夹。

唯一存在一些差异的文件是.bashrc文件在mac上为macports添加了一些额外的行。所以在.bashrc的底部我检查是否存在.bashrc_local并解析它。

这是我使用subversion的最后一件事(其他一切都是使用git除了工作)。 svn的好处是因为它不是dvcs所以我不必担心意外地在一台服务器上提交而忘记推送它。

我考虑过把它移到git所以我可以创建分支。使用上面的例子,我将为我的主服务器设置一个分支,我将添加.procmail和.spamassassin文件夹,但不在主分支中。但是目前的系统已经运行了好几年 - 在git存在之前 - 并且现在没有任何特别的动机来改变它。