Mercurial忽略文件

Tom*_*Tom 65 mercurial ignore hgignore

我试图让Mercurial忽略配置文件,但我没有让它工作.

我在我的服务器上创建了一个存储库,hg init并将该存储库克隆到我的计算机上.然后,我希望能够编辑configurationj文件,但不能将这些更改提交回服务器.

我尝试.hgignore在我的克隆的根目录中创建一个,但Mercurial用a标记文件,?无论我是否提交它仍然继续记录我的配置更改.

.hgignore在错误的位置创建文件,是否需要提交此文件?是否需要在我在服务器上初始化存储库之前创建它?

Nic*_*zet 69

  • .hgignore不需要在init之前创建
  • 配置文件将由其他人使用,您最好提交.hgignore,以便其他人不必创建它,但是mercurial不需要忽略您的本地文件(参见示例)
  • 是的.hgignore必须在根目录中

简单的例子.

回购利用:

$ mkdir test 
$ cd test 
$ hg init 
Run Code Online (Sandbox Code Playgroud)

创建一个文件

$ touch foo 
$ hg st 
? foo 
Run Code Online (Sandbox Code Playgroud)

现在在repo的根目录中创建一个.hgignore:

$ echo 'foo' > .hgignore 
Run Code Online (Sandbox Code Playgroud)

foo 现在被忽略了:

$ hg st 
? .hgignore 
Run Code Online (Sandbox Code Playgroud)

请注意,.hgignore不需要为此提交.

有点棘手

如果配置文件和.hgignore(忽略配置文件)都在repo中提交,则是,将跟踪配置文件更改(换句话说,.hgignore将不起作用)

创建配置并提交它

$ touch config
$ hg ci config -Am 'adding conf'
Run Code Online (Sandbox Code Playgroud)

忽略它:

$ echo 'config' >> .hgignore
Run Code Online (Sandbox Code Playgroud)

提交.hgignore:

$ hg ci .hgignore -Am '.hgignore'
Run Code Online (Sandbox Code Playgroud)

然后,如果你克隆回购:

$ cd ..
$ hg clone test other-user
$ cd other-user
Run Code Online (Sandbox Code Playgroud)

并修改配置:

$ echo 'new config param' >> config
Run Code Online (Sandbox Code Playgroud)

然后hg将显示更改:

$ hg st
M config
Run Code Online (Sandbox Code Playgroud)

怎么处理这个?

您可能希望在存储库中拥有一个版本化的主要默认配置文件, global.cfg

并且您将要求用户创建local.cfg他们将放置其本地设置的位置.并且您的脚本将提供local.cfgif if present:本地设置覆盖全局设置.当然,添加一行.hgignore来忽略local.cfg;)

替代方案:没有全局配置文件,只有config.example用户在本地复制和修改.这里的问题是你不会轻易跟踪版本之间的变化.

  • 最好的方法是先让应用程序加载global.cfg,然后再加载local.cfg(如果存在).然后将global.cfg添加到Mercurial并将"local.cfg"添加到.hgignore.这将允许您对global.cfg中的默认值进行版本控制,用户仍然可以在local.cfg文件中根据需要覆盖它们.要记住的重要一点是.hgignore只能忽略Mercurial未跟踪的文件*.因此,如果将"*.cfg"添加到.hgignore,则global.cfg文件仍将正常提交. (2认同)

Jus*_*ove 29

即使您忽略了文件,Mercurial也会在将它们添加到存储库后对其进行跟踪.

要从存储库中删除配置文件,您可以使用

hg remove -Af file.cfg
Run Code Online (Sandbox Code Playgroud)

这将从存储库中删除文件(一旦提交),而不删除本地文件.请参阅hg help remove 但是,现在在repo中记录了删除,当您或其他任何人在该修订版本中进行更新时,Mercurial将删除该文件.

您也可以重命名它并让人们将主副本复制到其本地文件,但您需要协调本地文件的更新.

hg rename file.cfg file.cfg.example
Run Code Online (Sandbox Code Playgroud)


Joh*_*don 15

将.hgignore文件本身添加到.hgignore文件:

syntax: glob

.hgignore
Run Code Online (Sandbox Code Playgroud)

或者,只需检查.hgignore文件到您的本地克隆...