2011-05-30 30 views
5

如果我在DOS提示符下運行以下命令:如何在PowerShell中獲取最新的水銀標籤

汞柱父母--template {} latesttag

然後我將最新的標記值返回預期。

汞柱父母:但是如果我從PowerShell控制檯我得到以下誤差範圍內運行相同的命令-i選項無法識別

我需要的命令在PowerShell中運行,所以我可以得到它的結果作爲變量使用。任何想法我需要做什麼才能讓命令運行?

回答

4

你應該只需要環繞參數--template引號,這樣Powershell知道這是一個字符串:

hg parents --template '{latesttag}' 

然而,有時候,同程Powershell的分析的東西,你必須做出加倍確保雙報價生存(如傳遞一個包含空格,但應該有很多的參數1,而不是一個參數,比如路徑或更長的模板):

hg parents --template '"{latesttag}"' 
+1

完美的謝謝。在這種情況下,只有一組引用的第一個例子起作用。 – 2011-05-30 21:37:15

+0

不給我最新的標籤..但一個較舊的標籤,它是否檢查所有分支作爲標籤是全球? – OZZIE 2017-11-17 08:40:36

1

這個答案配備了一個巨大免責聲明:

  1. There might be better/different ways than this one, harnessing only PowerShell code, but I'm no PowerShell expert
  2. I am the author of the following class library

我已經做了.NET類庫,Mercurial.Net允許.NET程序環繞hg命令行客戶端,而不必應付做這一切的一切複雜性,等待程序完成等。注意:您需要安裝Mercurial,並且可以通過PATH使類庫可以工作。

它可以通過安裝Nugetpackage

因爲我不是PowerShell專家,所以我將展示如何使用C#代碼和我的庫進行此操作。

考慮到庫沒有實現所有選項(可惜),遺憾的是,我的庫不能使用父命令,但log命令可以,儘管它可能會有更多的開銷。你將不得不作爲判斷這是否可以接受。

父母命令無法使用的原因是,我現在已決定不在Mercurial中實現對模板語法的支持,因爲那時我知道預期的輸出類型,並且可以將其解析爲適當的。 NET實例。

這裏的.NET代碼,會發現tipmost標籤:

var repo = new Repository("."); 
var tags = repo.Log(new LogCommand().WithRevision("tag()")).First().Tags.ToArray(); 

這將填充tags與標籤名稱的數組。日誌命令以相反的順序返回日誌,最先更新的變更集,因此.First()將找到最新的變更集。

如果需要,這也是當前的工作文件夾的祖先最接近的標籤,這裏的改變的代碼:

repo.Log(new LogCommand().WithRevision("tag() and ancestors(.)")).First().Tags... 
              ^---------------^ 

,這包括工作文件夾的版本,如果有一個標籤。如果您需要祖先,不包括修改工作文件夾:

repo.Log(new LogCommand().WithRevision("tag() and ancestors(.) and not .")).First().Tags... 
                   ^--------^ 
+0

有趣。至少有幾件事情,這個庫應該適合我。 – 2011-05-30 21:49:51