【问题标题】:Creating and using a Mercurial repository for system files为系统文件创建和使用 Mercurial 存储库
【发布时间】:2018-03-05 20:20:43
【问题描述】:

我已经在我的编程项目中成功使用Mercurial 有一段时间了,因此让它同时处理我的其余版本控制需求是合乎逻辑的步骤。朝着这个方向迈出的第一步是让 Mercurial 处理我在 Linux 系统上手动修改的配置文件。不幸的是,我似乎在这里遇到了一些障碍:

  1. Mercurial 不存储文件元数据(所有权、权限、扩展属性)。

  2. Mercurial 不会处理不在存储库目录中的文件。

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

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

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

在这一点上,我开始觉得我必须将许多本土解决方案堆叠在一起才能让 Mercurial 在这个用例中工作——也许太多了。总会有我偶尔碰到的粗糙边缘。

  • 是否有针对此用例的现有完整解决方案?允许 hg 透明地处理系统文件的 Mercurial 扩展或包装脚本?

  • 或者,非常不情愿地 - 是否有 现代 版本控制系统或其他版本控制解决方案可以开箱即用地做到这一点?

【问题讨论】:

  • 使用个人配置文件(用户目录中的所有点文件),您通常会创建从预期位置到存储库中实际文件的符号链接...您是否考虑过在这里这样做?
  • @Ludovic:会为/etc/fstab这样做吗?
  • 我确实不会,但这主要是因为我一开始就不会把它放在 Mercurial 中。这些文件在我的计算机之间不太可能相同(除非您负责一个拥有所有相同 PC 的农场),并且在单台计算机的生命周期内不太可能发生太大变化(不会到我需要修改的地步)至少控制它)。我的观点主要是讨论以另一种方式进行操作:与其将外部文件带入 repo,不如将 repo 文件带入外部如何?但是“不,我不能/不会”是对此的有效答案:)

标签: linux mercurial


【解决方案1】:

或者 - 非常不情愿 - 是否有现代版本 控制系统或其他版本控制解决方案可以做到这一点 盒子?

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

【讨论】:

  • +1 这不是我需要的,但对于其他用例来说听起来确实很有趣。
【解决方案2】:

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

  • 在所需位置创建一个安全目录:

    # mkdir -p /root/git
    # chmod 700 /root/git
    
  • 在上一个目录中初始化一个git 存储库:

    # cd /root/git
    # git init
    
  • 修改.git/config 以包含core.worktree 选项,方法是在[core] 部分添加worktree = /etc

  • 正常使用git

    # git add /etc/hosts
    # git commit -m "..." -a
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多