我有3台Linux机器,并且希望某种方式使其主目录中的点文件保持同步。有些文件,如.vimrc,在所有3台机器上都是相同的,有些文件对每台机器都是唯一的。用于管理主目录的最佳版本控制系统
我以前使用SVN,但所有关于DVCSs的嗡嗡声让我觉得我应该尝试一个 - 是否有一个特定的,最适合这个?或者我应该坚持使用SVN?
我有3台Linux机器,并且希望某种方式使其主目录中的点文件保持同步。有些文件,如.vimrc,在所有3台机器上都是相同的,有些文件对每台机器都是唯一的。用于管理主目录的最佳版本控制系统
我以前使用SVN,但所有关于DVCSs的嗡嗡声让我觉得我应该尝试一个 - 是否有一个特定的,最适合这个?或者我应该坚持使用SVN?
我遇到了同样的问题,并在Subversion之上建立了一个工具,它增加了权限,所有权和secontext跟踪,将.svn目录保留在实际版本化的树中,并添加了图层的概念,例如跟踪与开发相关的所有配置,然后只检查用于开发的机器。
这帮助我在我登录的50多台机器上更好地组织我的设置。
Here's the project page。它的边缘仍然有点粗糙,但我们也在工作中使用它来为我们的60多台服务器更新系统配置。
一般来说,任何使用某种元数据文件跟踪内容的版本控制系统都会在实际使用时造成痛苦。
任何DVCS都可能正常工作。我最喜欢的是Bazaar。将配置文件保存在.config,version,然后根据适当的符号链接是最容易的。
DVCS的一个好处是,您也可以对每台机器的配置文件进行版本化,而不会干扰版本控制的全局配置。
版本控制软件对于主目录并不是很好。更糟糕的是,一些软件并不喜欢.svn文件夹或开始解释其内容。你当然可以试着用一些非常复杂的镜像设置来解决这个问题,但这很难。
下面是一个Mozilla开发人员试图做到这一点:Version controlling my home dir,在评论中有几个建议。
我已经有这个问题多年了,我不认为版本控制必然是正确的路要走。我在the Unison file synchronizer方面取得了很好的成功,专门用于在两台机器上维护一致的主目录。目前我正在管理7个复制品,并且细节有点棘手,但它是一个很好的工具,如果你从两个开始,你会非常高兴。
Unison和VCS之间的主要区别在于Unison愿意延迟处理必须合并的冲突。加上它获得所有的默认值。而且速度很快:我通过DSL线每天使用它来同步大约40GB的数据。
git或Mercurials的便宜分支将很适合这种情况。我从Mercurial开始,因为它更简单,但随后转移到git。非常灵活地处理这个
一种方法是有版本控制下一个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系统的逻辑时间),那么值得做这样的兴奋。
我为此使用git。到目前为止,我已经能够在几台机器上保持主目录同步,而不需要分支和合并。相反,我使用git rebase
。目前的冲突很少,而且很容易解决。
我把需要分开的内容放在版本控制之外的文件放在.gitignore
中。
我把配置文件下列工具中的git:
我记笔记,并在等它有自己的Git仓库的子目录。
如果您还没有,我会建议您调查etckeeper。它是专为使用版本控制系统版本在/ etc配置文件:
etckeeper是一个工具集来 /出租等被保存在一个Git, 善变,的darcs,或BZR库。 它挂接到apt(和其他包 管理员,包括yum和pacman-g2) ,以在升级包期间自动将更改作为 更改为/ etc。它 跟踪修改的文件元数据 控制系统通常不支持 ,但这对于 /etc很重要,例如 /etc/shadow的权限。它是相当模块化的,并且可以配置为 ,如果您了解使用版本控制的 的基本知识,也可以使用 。
尽管它是为/ etc设计的,但我认为它可能也适用于主目录,因为基本需求是相同的。
我知道这是一个古老的线程,但在搜索某些点文件时发现它。
我目前的系统使用的是颠覆。我做的关键是检查工作副本到〜/ .svnhome /(事后应该叫它.dotfiles或更通用的东西)。然后,我将该计算机上实际使用的文件创建为符号链接。例如我的.procmail和.spamassassin文件夹只在邮件服务器上需要,所以我没有链接到我的家庭服务器上。
唯一有一些差异的文件是.bashrc文件在mac上有一些额外的行。所以在.bashrc的底部,我检查是否存在.bashrc_local并解析它。
这是我使用Subversion最后剩下的东西(其他所有工作都在使用git)。 svn的好处是,因为它不是一个dvcs,所以我不必担心在一台服务器上意外提交并忘记推送它。
我曾考虑过把它移到git上,所以我可以创建分支。使用上面的例子,我将为我的主服务器建立一个分支,我将添加.procmail和.spamassassin文件夹,但在主分支中没有这些文件夹。但是目前的系统在git甚至存在之前已经运行良好 - 并且现在没有任何特别的动机去改变它。
感谢关于Unison的提示!我认为VCS就是我需要的,但我其实并不在乎版本控制,只是同步,所以Unison更好。另外在集市版的主目录中有(例如)集市结账似乎有问题。 – Patrick 2010-04-10 22:44:30