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

时间:2020-03-05 18:46:06  来源:igfitidea点击:

我有3台Linux机器,并希望有一些方法可以使点文件在其主目录中保持同步。有些文件,例如.vimrc,在所有3台计算机上都是相同的,而某些文件对于每台计算机都是唯一的。

我以前使用过SVN,但是有关DVCS的所有嗡嗡声使我认为我应该尝试一种是否有最适合此功能的特定产品?还是我应该坚持使用SVN?

解决方案

回答

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

DVCS的优点是,我们也可以对每台机器的配置文件进行版本控制,而不会干扰对全局配置的版本控制。

回答

版本控制软件并不是非常适合主目录。更糟糕的是,某些软件不太喜欢.svn文件夹,或者开始解释其内容。我们当然可以尝试使用一些非常复杂的镜像设置来解决此问题,但这很难。

回答

我遇到了同样的问题,并在Subversion之上构建了一个工具,该工具添加了权限,所有权和secontext跟踪,将.svn目录保留在实际版本控制的树中,并添加了层概念,因此我们可以例如跟踪所有与开发相关的配置,然后仅在用于开发的计算机上签出。

这帮助我在登录的50多台计算机上更好地组织了设置。

这是项目页面。它的边缘仍然有些粗糙,但是我们还在使用它来为60多个服务器的系统配置版本化。

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

回答

这是一个尝试执行此操作的Mozilla开发人员:版本控制我的主目录,注释中有一些建议。

回答

我已经遇到这个问题很多年了,我认为版本控制不一定是正确的方法。我的Unison文件同步器取得了很大的成功,该文件同步器专门用于在两台机器上维护一致的主目录。我目前正在统一管理七个副本,细节有些棘手,但这是一个很好的工具,如果我们从两个开始,我们将非常满意。

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

回答

git或者Mercurials的廉价分支机构在这种情况下将非常有用。我从Mercurial开始,因为它比较简单,但后来又转到了git。

回答

一种灵活处理此问题的方法是让版本目录受版本控制,而不是尝试对实际主目录进行svn(这有其自身的问题)

因此,在其中保留一个类似的结构

/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中:

  • 各种贝壳
  • BBDB
  • emacs-w3m
  • 杂种狗
  • 屏幕
  • 各种实用程序和脚本

我将注释等保存在具有自己的git存储库的子目录中。

回答

如果我们还没有的话,我建议我们去找etckeeper。它用于使用版本控制系统对/ etc中的配置文件进行版本控制:

etckeeper is a collection of tools to
  let /etc be stored in a git,
  mercurial, darcs, or bzr repository.
  It hooks into apt (and other package
  managers including yum and pacman-g2)
  to automatically commit changes made
  to /etc during package upgrades. It
  tracks file metadata that revison
  control systems do not normally
  support, but that is important for
  /etc, such as the permissions of
  /etc/shadow. It's quite modular and
  configurable, while also being simple
  to use if you understand the basics of
  working with revision control.

尽管它是为/ etc设计的,但由于基本需求相同,因此我认为它对于主目录也可能会很好地工作(也许经过一些修改)。