为系统文件创建和使用Mercurial存储库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为系统文件创建和使用Mercurial存储库相关的知识,希望对你有一定的参考价值。
我已经成功地将Mercurial用于我的编程项目很长一段时间了,所以让它处理我的其他版本需求也是合乎逻辑的一步。这方面的第一步是让Mercurial处理我在Linux系统上手动修改的配置文件。不幸的是,我似乎在这里遇到了一些障碍:
- Mercurial不存储文件元数据(所有权,权限,扩展属性)。
- Mercurial不会处理不在存储库目录中的文件。
我相信我已经为(1)找到了solution,虽然它显然涉及修改单独的utility和一些hgrc魔法的来源。
第二点看起来比较棘手:出于各种原因,我不想在文件系统根目录(/
)放置Mercurial存储库。不幸的是 - 对于公认的a very good reason - Mercurial不会直接或通过符号链接处理驻留在存储库根目录之外的文件。
我可能会写一个包装脚本,可以使用例如mount --bind
或unionfs允许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存储库的主要内容,如果未能解决你的问题,请参考以下文章