所以这就是问题所在。我在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>
答案 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
目录。在您的情况下,始终存在根,您根据定义位于~
存储库中。我不知道如何做到这一点;在您检查根目录之前,您无法找到忽略文件。