我试图在Win 10上使用“hg add”向Mercurial添加大约40 k个文件。由于下游限制,我需要将其拆分为10 k个文件的块,以便进行每次添加/提交,因此我需要将大量文件传递给hg add。但是,我遇到了Window's commandline argument character limits。
有没有办法把保存在文件中的文件列表传递给hg add?AFAIK不能只使用管道,因为这只是阅读文件并将其作为参数传递。我认为hg需要直接读取文本文件。
我试图在Win 10上使用“hg add”向Mercurial添加大约40 k个文件。由于下游限制,我需要将其拆分为10 k个文件的块,以便进行每次添加/提交,因此我需要将大量文件传递给hg add。但是,我遇到了Window's commandline argument character limits。
有没有办法把保存在文件中的文件列表传递给hg add?AFAIK不能只使用管道,因为这只是阅读文件并将其作为参数传递。我认为hg需要直接读取文本文件。
2条答案
按热度按时间rqqzpn5f1#
您可以通过使用Mercurial的扩展模式功能和可能的文件集来解决这个问题(请参见
hg help patterns
和hg help filesets
)。可以指定的一种模式是
listfile:
模式,它以文件名作为参数,必须包含一个以换行符分隔的模式列表(当然也可以是文件名)。因此,首先要生成所讨论的文件的列表,这些文件被拆分为几个文件,让我们假设它们分别称为
files1.txt
、files2.txt
......然后,您将执行以下操作:
如果这样做还不够,可以使用文件集进一步修改要添加的文件。
eimct9ow2#
(This并不是如何让hg从文件列表中读取的直接答案-而是另一种想法)。
我的想法是使用
hg addremove
而不是add
,因为它已经被设计为“批量”工作。从
hg addremove --help
开始:hg addremove [OPTION]... [FILE]...
添加所有新文件,删除所有丢失的文件
...
选项(可重复[+]):
(some细节省略)
因此,类似下面的命令可能有效:
hg addremove --include path\to\files\prefix*.*
(The问题中没有关于文件名或路径的任何细节,因此无法更具体地了解如何构建
include
详细信息。)这只会标记要添加的文件;它不会自动提交,所以你可以多次运行它,改变包含条件,每次都在多个批中提交。
另外注意
hg commit
也接受类似的--include
选项,所以你也可以一次提交100%的文件,然后每次只提交一部分文件。例如,一次只提交一个目录,或者其他一些容易实现并且不超过10 K文件限制的方案。