所以,基本上每当我尝试对我更改的文件进行更新时,我都会遇到这个可怕的错误。然后,我必须手动选择一些文件,定义提交消息,然后返回并选择更多文件,放置其他提交文本等,直到我覆盖所有更改的文件。
有什么比这更简单了吗?
我在Visual Studio 2010中使用Tortoise HG(http://www.newsupaplex.pp.ru/index_eng.html),如果它有任何区别。
答案 0 :(得分:1)
Mercurial SCC Package检查生成的命令行是否不超过1,700个字符。
我已经挖掘了一下包的源代码,显然在调用Mercurial的命令时,最终会在Process.Start()
上使用hg.exe
方法指定UseShellExecute = false
选项。
Process.Start
method's documentation提到参数长度和进程完整路径长度的总和不应超过2080但是挖掘.NET Framework本身我无法找到任何强制执行的限制。 WinAPI CreateProcess
函数(Process.Start
有效地结束调用)具有32,768个字符的更大限制。
所以它可能是VS插件的错误。
至于我,当我遇到类似的问题,因为我的项目在C:\Documents and Settings\Regent\My Documents\Visual Studio 2010\Projects\
内部太深了,我刚刚创建了一个NTFS symbolic link并在之后使用了C:\Projects\
。
答案 1 :(得分:1)
HgSccPackage使用mercurial命令行客户端hg.exe。 用于运行外部进程(.gg.exe)的.Net框架API中的最大命令行长度限制为~2000个字符。
由于提交必须是原子的,因此HgSccPackage无法完成该错误的操作。
您有三种选择:
如果mercurial客户端可以选择在文件中传递文件列表(例如list.txt,每行包含文件名),那将会容易得多。但是没有这样的选择。
顺便说一句,HgSccPackage没有传递文件的完整路径。相反,它传递相对于存储库根目录的文件路径。所以,这很奇怪,你达到命令行限制。
你要提交多少文件? 为什么不能提交所有文件?