如果我从DOS提示符运行以下命令:
hg parent --template {latesttag}
然后我按预期返回最新的标记值。但是,如果我从powershell控制台中运行相同的命令,我会收到以下错误:
hg parent:选项-i无法识别
我需要在powershell中运行命令,因此我可以将结果作为要使用的变量。知道我需要做什么来运行命令吗?
答案 0 :(得分:4)
你应该只需要在引号中包含--template
的参数,以便Powershell知道它是一个字符串:
hg parents --template '{latesttag}'
然而,有时,通过Powershell解析事物的方式,您必须确保双引号存活(例如传递包含空格的参数,但应该是1个参数而不是许多,如路径或更长的模板):
hg parents --template '"{latesttag}"'
答案 1 :(得分:1)
这个答案带有一个巨大的免责声明:
- 可能有更好/不同的方式,只利用PowerShell代码,但我不是PowerShell专家
- 我是以下类库的作者
醇>
我创建了一个.NET类库Mercurial.Net,允许.NET程序环绕hg
命令行客户端,而不必处理完成所有这些操作的所有复杂问题,等待程序完成等等。注意:您需要安装Mercurial,并且可以通过PATH使类库工作。
由于我不是PowerShell专家,我将展示如何使用C#代码和我的库。
考虑到库没有实现所有选项(遗憾的是),遗憾的是我的库不能使用parents命令,但是log命令可以,尽管它可能会有更多的开销。你必须判断这是否可以接受。
不能使用parents命令的原因是我现在决定不在Mercurial中实现对模板语法的支持,因为那时我知道期望什么样的输出并且可以将它解析回正确的.NET实例
这是可以找到最尖端标记的.NET代码:
var repo = new Repository(".");
var tags = repo.Log(new LogCommand().WithRevision("tag()")).First().Tags.ToArray();
这将使用一组标记名称填充tags
。 log命令以相反的顺序返回日志,首先返回最新的变更集,因此.First()
将找到最新的变更集。
如果你需要最近的标签,它也是当前工作文件夹的祖先,这里是改变的代码:
repo.Log(new LogCommand().WithRevision("tag() and ancestors(.)")).First().Tags...
^---------------^
这包括工作文件夹的修订版(如果有标签)。如果您需要祖先,不包括工作文件夹的修订版:
repo.Log(new LogCommand().WithRevision("tag() and ancestors(.) and not .")).First().Tags...
^--------^