Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 管理主目录的最佳版本控制系统_Linux_Version Control - Fatal编程技术网

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

Linux 管理主目录的最佳版本控制系统,linux,version-control,Linux,Version Control,我有3台Linux机器,我想用某种方法使它们的主目录中的点文件保持同步。有些文件,如.vimrc,在所有3台机器上都是相同的,有些文件对每台机器都是唯一的 我以前使用过SVN,但是所有关于DVCSs的传言让我觉得我应该尝试一个——有没有一个特别的版本最适合这个版本?或者我应该坚持使用SVN吗?任何DVC都可以正常工作。我最喜欢的是。最简单的方法是将配置文件保存在.config、该版本中,然后根据需要使用符号链接 DVCS的一个好处是,您也可以对每台机器的配置文件进行版本设置,而不会干扰全局配置的

我有3台Linux机器,我想用某种方法使它们的主目录中的点文件保持同步。有些文件,如.vimrc,在所有3台机器上都是相同的,有些文件对每台机器都是唯一的


我以前使用过SVN,但是所有关于DVCSs的传言让我觉得我应该尝试一个——有没有一个特别的版本最适合这个版本?或者我应该坚持使用SVN吗?

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


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

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

我也遇到了同样的问题,并在Subversion上构建了一个工具,它添加了权限、所有权和secontext跟踪,将.svn目录排除在实际版本的树之外,并添加了一个层的概念,例如,您可以跟踪所有与开发相关的配置,然后只在用于开发的机器上签出这些配置

这有助于我在登录的50多台机器上更好地组织设置

。它的边缘仍然有点粗糙,但我们也在工作中使用它来为我们的60多台服务器版本系统配置


一般来说,任何使用某种元数据文件来跟踪内容的版本控制系统都会像实际使用时一样给您带来痛苦。

这里有一位Mozilla开发人员尝试这样做:,评论中有几点建议。

我已经有这个问题多年了,我认为版本控制不一定是正确的方式。我在这方面取得了很好的成功,它的设计宗旨是在两台机器上维护一致的主目录。我目前正在使用unison管理七个副本,细节有点棘手,但这是一个很好的工具,如果你从两个开始,你会非常满意


Unison和VCS之间的关键区别在于,Unison愿意延迟处理必须合并的冲突。另外,它可以正确地获得所有默认值。而且速度很快:我每天都在DSL线路上使用它来同步40GB左右的数据。

or的廉价分支将非常适合这种情况。我从Mercurial开始,因为它更简单,但后来又转到git。

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

所以在这里面你保持一个结构,像

/home/you/code/dotfiles /home/you/code/dotfiles/dotbashrc /home/you/code/dotfiles/dotemacs ... /home/you/code/dotfiles/makefile /home/you/code/dotfiles /home/you/code/dotfiles/dotbashrc /home/you/code/dotfiles/dotemacs ... /home/you/code/dotfiles/makefile makefile可以包含专门化文件(或不专门化文件)的逻辑


可能比您需要的要重,但是如果您的实际设置很复杂(我一次跨3或4个不同的Unice执行了此操作),那么这样做是值得的。

我使用git来完成此操作。到目前为止,我已经能够使多台机器上的主目录保持同步,而不需要分支和合并。相反,我使用的是
git-rebase
。迄今为止,冲突很少,而且很容易解决

我通过将需要单独内容的文件放入
.gitignore
,使其不受修订控制

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

  • 各种贝壳
  • emacs和应用程序,即。
    • gnus
    • BBDB
    • emacs-w3m
  • 杂种狗
  • 屏风
  • 各种实用程序和脚本

我在一个有自己git存储库的子目录中保存笔记和类似的东西。

如果您还没有这样做,我建议您进行研究。它设计用于使用版本控制系统对/etc中的配置文件进行版本控制:

etckeeper是用于 让/etc存储在git中, mercurial、DARC或bzr存储库。 它与apt(和其他软件包)挂钩 经理(包括百胜和pacman-g2) 自动提交所做的更改 在包升级期间发送到/etc。信息技术 跟踪修改的文件元数据 控制系统通常不工作 支持,但这对我们来说很重要 /等等,例如 /等/影子。它是非常模块化的 可配置,同时也很简单 如果您了解 使用修订控制


虽然它是为/etc设计的,但我认为它可能也适用于主目录,因为基本需求是相同的

我知道这是一个旧线程,但在搜索一些点文件时找到了它

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

唯一有一些不同的文件是.bashrc文件在我的mac for macports上有一些额外的行。所以在.bashrc的底部,我让它检查.bashrc_local是否存在并解析它

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

我已经考虑将其移动到git,以便创建分支。使用上面的示例,我将为我的主服务器创建一个分支,我将添加.procmail和.spamassassin文件夹