2017-07-14 77 views
1

我试图使用mercurial文件集来添加目录树中的所有文件,不包括非常大的文件和任何二进制文件。从善变文档恶癖,这个命令应该这样做:添加文件时为什么不能使用mercurial文件集?

hg init 
hg add 'set: size("<1M") and not binary()' 

然而,这返回0的状态码,并没有添加任何东西到我的新的,空的回购协议。我试过了'set:not binary()',那也不管用。 令人沮丧的是,虽然我可以谷歌的mercurial文件集,并找到很多的例子,我找不到任何东西,以帮助解决它不工作时! 我没有.hgignore文件,它是一个新鲜的空回购。 Mercurial 4.2.2。 我正在测试的目录中有几个人工创建的文件用于测试。在我的真实使用案例中,我从客户端继承了多吉字节的各种源代码和二进制文件,并且我希望在我开始修复它们的问题之前将所有源代码转换为mercurial,因此需要排除二进制文件和大型文件,否则呛mercurial。

这里是我的小测试脚本:

#!/bin/sh -ex 
dd if=/dev/urandom of=binary_1k bs=1 count=1024 
dd if=/dev/urandom of=binary_2M bs=1 count=2097152 
echo "This. Is, a SMALL text file." > text_small 
hexdump binary_1k > text_1k 
hexdump binary_2M > text_2M 
ls -lh 
file binary_1k 
file binary_2M 
file text_1k 
file text_2M 
hg init 
hg add 'set: size("<1M") and not binary()' 
hg status -a 
hg add 'set: not binary()' 
hg status -a 
hg add 'set: size("<1M")' 
hg status -a 

在本月底,各status命令报告在回购没有文件,并添加命令报告没有错误。

回答

4

问题是文件集会对Mercurial的存储库数据库进行查询,该数据库仅知道属于存储库或已添加的文件。

一个解决办法是添加所有,然后摆脱,你不喜欢的文件,例如:

hg forget 'set:size(">1M") or binary()' 

这工作,因为查询也需要最近添加的文件,即使他们尚未提交。

相关问题