windows 将文件列表从文本文件传递到Mercurial 'hg add'命令

vsmadaxz  于 2023-01-21  发布在  Windows
关注(0)|答案(2)|浏览(166)

我试图在Win 10上使用“hg add”向Mercurial添加大约40 k个文件。由于下游限制,我需要将其拆分为10 k个文件的块,以便进行每次添加/提交,因此我需要将大量文件传递给hg add。但是,我遇到了Window's commandline argument character limits
有没有办法把保存在文件中的文件列表传递给hg add?AFAIK不能只使用管道,因为这只是阅读文件并将其作为参数传递。我认为hg需要直接读取文本文件。

rqqzpn5f

rqqzpn5f1#

您可以通过使用Mercurial的扩展模式功能和可能的文件集来解决这个问题(请参见hg help patternshg help filesets)。
可以指定的一种模式是listfile:模式,它以文件名作为参数,必须包含一个以换行符分隔的模式列表(当然也可以是文件名)。
因此,首先要生成所讨论的文件的列表,这些文件被拆分为几个文件,让我们假设它们分别称为files1.txtfiles2.txt ......
然后,您将执行以下操作:

hg add listfile:files1.txt
hg commit
hg add listfile:files2.txt
hg commit
...

如果这样做还不够,可以使用文件集进一步修改要添加的文件。

eimct9ow

eimct9ow2#

(This并不是如何让hg从文件列表中读取的直接答案-而是另一种想法)。
我的想法是使用hg addremove而不是add,因为它已经被设计为“批量”工作。
hg addremove --help开始:
hg addremove [OPTION]... [FILE]...
添加所有新文件,删除所有丢失的文件
...
选项(可重复[+]):

-I --include PATTERN [+]   include names matching the given patterns
 ...
 -n --dry-run               do not perform actions, just print output

(some细节省略)
因此,类似下面的命令可能有效:
hg addremove --include path\to\files\prefix*.*
(The问题中没有关于文件名或路径的任何细节,因此无法更具体地了解如何构建include详细信息。)
这只会标记要添加的文件;它不会自动提交,所以你可以多次运行它,改变包含条件,每次都在多个批中提交。
另外注意hg commit也接受类似的--include选项,所以你也可以一次提交100%的文件,然后每次只提交一部分文件。例如,一次只提交一个目录,或者其他一些容易实现并且不超过10 K文件限制的方案。

相关问题