我有一个单人的单文件夹mercurial存储库。目录结构很简单:
P104
lecture_notes
files under version control live here
过了一会儿,我意识到我想在存储库中有两个目录,比如这个
P104
lecture_notes
files under version control live here (.hg is here)
homework
more files under version control
现在,如果我只是想将文件添加到存储库,它就会失败:
br@ymir:~/P104/lecture_notes$ ll ..
total 16
drwxr-xr-x 4 br br 4096 2012-02-02 18:05 ./
drwxr-xr-x 4 br br 4096 2012-02-01 20:46 ../
drwxr-xr-x 2 br br 4096 2012-02-02 17:44 homework/
drwxr-xr-x 4 br br 4096 2012-02-02 18:06 lecture_notes/
br@ymir:~/P104/lecture_notes$ hg add ../homework/hw1_P104.tex
abort: ../homework/hw1_P104.tex not under root
我的第一个想法是在目录结构中将repo克隆一级,将文件添加到克隆,然后删除原始repo。但即使克隆也失败了:
br@ymir:~/P104/2011/lecture_notes$ hg clone . ..
abort: destination '..' is not empty
所以问题是,除了在其他地方创建一个干净的存储库并手动复制文件之外,是否还有Mercurial-ish方法?
答案 0 :(得分:7)
我喜欢VonC的解决方案,你不移动.hg
文件夹。这是一个直接的解决方案。您可以选择执行移动它,因此必须重命名较少的文件夹:
将.hg
文件夹移至~/P104
$ mv ~/P104/lecture_notes/.hg ~/P104
从Mercurial的角度来看,您将把所有顶级文件移动到lecture_notes
目录中。 homework
文件夹中也会突然出现新的未跟踪文件。
让Mercurial找出重命名:
$ hg addremove
这将正确检测到之前位于lecture_notes
目录中的顶级文件。 homework
中未跟踪(未被忽略)的文件刚刚添加。
保存更改:
$ hg commit
整体“技巧”是工作副本中的文件相对于.hg
目录。因此,通过在文件系统层次结构中移动.hg
目录,我们可以有效地将工作副本文件向下移动到工作副本内的层次结构中。
答案 1 :(得分:4)
如果您的Mercurial仓库的根目录位于~/P104/lecture_notes
下,我宁愿:
lecture_notes
重命名为P104 lecture_notes
homework
及其文件添加到重命名的P104目录hg add
一切我们的想法是将.hg
repo保持原样(~/P104/lecture_notes
重命名为~/P104/P104
)并重新组织该重命名目录中的文件。
无需克隆。