如何告诉Mercurial不要从被忽略的子目录

时间:2015-07-17 17:37:12

标签: mercurial

所以这就是问题所在。我在Mercurial控件下的主目录~中有我的配置文件。

的一部分
|-~
  |.hg/...
  |-Dev
    |-Project1/...
    |-Project2/...
  .hgrc
  .hgignore

我在Dev文件的源代码管理中排除了.hgignore目录。 但是,当我在目录~/Dev/Project1时,Mercurial认为我在源代码控制之下。如果我在hg root或其子目录.hgignore中的任何目录中键入hg仍认为它是存储库的一部分。

是错误还是功能?

更新

所以,这是一个可以从命令行做的简单实验:

% mkdir -p /var/HgTest
% cd /var/HgTest
% hg init
% echo "this is a repository file" >> test.txt
% hg commit -Am "added repo file"
% cat <<EOT >> .hgignore
heredoc> syntax:re
heredoc>
heredoc> ^Dev
heredoc> EOT
% hg commit -Am "added .hgignore"
% echo "This is not in repository" >> Dev/notinrepo.txt

现在,Dev目录不在存储库中,如果您在hg st下的任何位置键入/var/HgTest,它会显示该存储库是干净的。但是,如果您进入Dev目录并输入hg root,则会输出/var/HgTest。这可能是期望的结果。但是,由于路径应该被忽略,我认为hg root应该有效地退出-1返回码和消息&#34;不在存储库&#34;或类似的东西。

就我而言,在源代码管理下拥有HOME目录有效地使一些工具将每个新目录(甚至在被忽略的路径下)视为位于HOME目录中的Mercurial存储库的一部分。 / p>

1 个答案:

答案 0 :(得分:2)

当您在~/Dev/Project1/deeply/nested并希望将mercurial命令保留在Project1的范围内时,它是一项功能。

解决方法是hg init中的~/Dev/Project1。部分问题是将您的主目录置于版本控制之下的不良做法;我看不出从中获得的好处和成本。例如,您使用浏览器,音乐播放器或许多其他程序执行的几乎所有操作都将改变~/.groovy-game/config~/.browser/cache-files中的文件;没有有意义的方法来选择提交点。因此,为$HOME建立良好的增量快照备份会更好,即使它们存储在同一台计算机上也是如此。

这并不是说您家中的点目录永远不应该被版本化。例如,假设我攻击了我的~/.vim文件,因为我正在开发最终的编辑环境,cd ~/.vim; hg init肯定会有用。

换句话说 - 只要在你上面的树的某处有一个.hg存储库,Mercurial就会找到它并读取忽略文件而不对被忽略的路径采取行动。但是,hg root仅查找.hg目录。在您的情况下,始终存在根,您根据定义位于~存储库中。我不知道如何做到这一点;在您检查根目录之前,您无法找到忽略文件。