为系统文件创建和使用Mercurial存储库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为系统文件创建和使用Mercurial存储库相关的知识,希望对你有一定的参考价值。

我已经成功地将Mercurial用于我的编程项目很长一段时间了,所以让它处理我的其他版本需求也是合乎逻辑的一步。这方面的第一步是让Mercurial处理我在Linux系统上手动修改的配置文件。不幸的是,我似乎在这里遇到了一些障碍:

  1. Mercurial不存储文件元数据(所有权,权限,扩展属性)。
  2. Mercurial不会处理不在存储库目录中的文件。

我相信我已经为(1)找到了solution,虽然它显然涉及修改单独的utility和一些hgrc魔法的来源。

第二点看起来比较棘手:出于各种原因,我不想在文件系统根目录(/)放置Mercurial存储库。不幸的是 - 对于公认的a very good reason - Mercurial不会直接或通过符号链接处理驻留在存储库根目录之外的文件。

我可能会写一个包装脚本,可以使用例如mount --bindunionfs允许Mercurial访问根文件系统。我过去写了一个类似的脚本,但它绝不是透明的,我在使用它时不得不跳过很多箍 - 正确地做它会很棘手,特别是如果我想处理绝对文件路径。

在这一点上,我开始觉得我必须将许多本土解决方案叠加在一起,以使Mercurial在这个用例中工作 - 也许太多了。我偶尔会遇到粗糙的边缘。

  • 这个用例是否有现成的完整解决方案? Mercurial扩展或包装脚本允许hg透明地与系统文件一起工作?
  • 或者 - 并且非常不情愿 - 是否有现代版本控制系统或其他版本控制解决方案,可以开箱即用?
答案

或者 - 并且非常不情愿 - 是否有现代版本控制系统或其他版本控制解决方案,可以开箱即用?

Flyback(类似于Apple的“Time Machine”)不是VCS,但如果你想要的只是一个线性历史,它可能正是你所需要的。

另一答案

我终于找到了使用git的直接解决方案。更具体地说,git允许工作目录(git术语中的工作树)远离存储库本身。我所要做的就是:

  • 在所需位置创建一个安全目录: # mkdir -p /root/git # chmod 700 /root/git
  • 在上一个目录中初始化git存储库: # cd /root/git # git init
  • 修改.git/config以包含core.worktree选项,在worktree = /etc部分添加[core]
  • 通常使用git# git add /etc/hosts # git commit -m "..." -a

以上是关于为系统文件创建和使用Mercurial存储库的主要内容,如果未能解决你的问题,请参考以下文章

您使用什么命令从Mercurial存储库中排除文件?

清理 Mercurial 存储库

将存储库克隆到本地文件系统上的文件夹的 Mercurial hg 克隆语法是啥

如何使用TortoiseHg工作台连接到存储库?

提交后修复Mercurial存储库中的重命名

将 Mercurial 存储库移动到现有 git 存储库的子目录中