2011-01-09 56 views
1

非常新的Mercurial。我注意到我的hg init不起作用。让我解释一下:Mercurial奇怪的HM初始化问题

当我给这个命令hg clone https://www.mercurial-scm.org/repo/hello my-hello,那么,my_hello文件夹是用所有的(2)文件创建的。然后我从my_hello删除.hg文件夹。然后我用hg init初始化这个文件夹。它被初始化。

但初始化后,当我使用hg clone my_hello new_my_hello克隆文件夹时,它只是在new_my_hello文件夹中创建.hg文件夹,而不是其他文件。

和所有的尝试我得到这个问题。请帮忙。

我正在使用Windows 7 64位。我的Mercurial也是64位。

+2

为什么要删除克隆附带的.hg文件夹?通过这样做,你就失去了所有的版本库历史记录,并且你的新回购(在你的`hg init`将与你在9.e中克隆它的回购不兼容),你将无法将更改推回去) – Matt 2011-01-09 22:13:33

回答

4

简短的回答:未跟踪文件中不包括的克隆。

如果您第一次删除.hg元数据目录并重新初始化一个新目录,它将不再跟踪任何文件;在init中没有默认添加文件。所以当你克隆它的时候,你会得到一个空的仓库的克隆。像这样:

$ hg clone https://www.mercurial-scm.org/repo/hello my-hello 
requesting all changes 
adding changesets 
adding manifests 
adding file changes 
added 2 changesets with 2 changes to 2 files 
updating to branch default 
2 files updated, 0 files merged, 0 files removed, 0 files unresolved 
$ cd my-hello 
$ ls 
Makefile hello.c 
$ hg st --all 
C Makefile 
C hello.c 

上面是没有修改文件的完全正常的回购副本。

$ rm -rf .hg 
$ hg st --all 
abort: There is no Mercurial repository here (.hg not found)! 

现在没有回购了。

$ hg init 
$ hg st --all 
? Makefile 
? hello.c 

现在有一个,但它不再跟踪文件,因此“?”。

$ hg clone . ../new-my-hello 
updating to branch default 
0 files updated, 0 files merged, 0 files removed, 0 files unresolved 
$ cd ../new-my-hello 
$ hg st --all 
$ ls 

该克隆不包含未跟踪文件,因此来自“my-hello”的两个“?-files”未被克隆。

3

您通过运行hg init来创建存储库,您已经完成了该存储库。但是,您尚未开始跟踪任何文件。要做到这一点,您必须明确告诉hg使用hg add file1 file2 ...跟踪哪些文件。或者,您可以通过调用hg addremove来添加所有文件。之后,您需要通过hg commit将这些文件添加到回购站。

一旦你这样做在原来的回购,在你new_my_hello,你就可以通过调用hg pull拉从my_hello这些变化,并且为了获得这些文件的最新版本,请与hg update

所有的说法,我敢肯定,删除您现有的.hg文件夹没有好处。

学习汞柱工作流,很好地解释为什么你没有得到你以为你得到了一个更好的工作非常有帮助的资源是http://hginit.com