我在編寫一個腳本,只有在源代碼發生變化時纔會運行構建。我需要知道自上次構建之後是否有變化。這用於工作,因爲該文件夾不會被刪除,所以很容易確定是否有更改,但現在每次構建運行時都會刪除所有內容。我想過使用TFS TF歷史命令來查詢最後一個變更集或最後兩個變更集,但是在解析輸出中的變更集編號時遇到了問題。我也考慮過使用changeset命令。是否有任何可用於回答問題的命令行參數,自從日期或變更集編號以來是否發生過更改?使用TFS TF歷史來確定最新的變更集
回答
正如Andrew所說,TFS具有內置的持續集成功能。但是,是的,從某個點開始查詢變更集很容易,無論是日期還是變更集。你想看看那個變更和最新的歷史:
tf history <folder> /version:C<changeset>~T /noprompt /recursive
如果唯一的行輸出的是你查詢了,那麼顯然已經出現了自認爲沒有簽入的變化變更。否則,您將看到其他更改集,每行一個。
是的,這告訴我包括被查詢的變更集。我怎麼能從輸出中解析數字?有沒有使用批處理命令解析的方法? – 2012-04-27 18:38:51
有一個可以集成BuildForge和Microsoft Team Foundation Server的適配器。這裏是URL,如果你有興趣... http://www-304.ibm.com/partnerworld/gsd/solutiondetails.do?&solution=46360&lc=en
的Automatra TFS適配器的Rational Build Forge中提供持續集成(CI)和報告功能。
TFS適配器還在TFS源(更改集)和WorkItem級別啓用CI功能。現成的報告提供了清晰的物料清單(BOM)報告,可以將這些報告發送給您的構建的下游消費者。最後,正如你必須知道的那樣,Build Forge的優勢在於它能夠將構建與部署(以及其他)結合起來。顯然,通過這些持續集成功能,您可以繼續實現我相信您希望實現的持續交付功能。
摘自我的批處理文件構建。
set _aPath="f:\TFS\a"
set _TFPath="c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE"
...
pushd %_aPath%
%_TFPath%\TF.exe history . /r /noprompt /stopafter:1 /Version:W > temp
FOR /f "tokens=1" %%a in ('findstr /R "^[0-9][0-9]*" temp') do set _BuildVersion=10.3.0.%%a
del temp
popd
使用臨時文件,但效果很好。
請注意,您不需要中間文件,例如:'tf vc info d:\ w \ code04 \ Server.sln | findstr/R「最後修改:[^ \ r \ n] + r \ n」' – 2016-09-27 21:09:52
我的PowerShell腳本被稱爲GetVcsRevision.ps1
,位於VCS根的子文件夾:
param (
[string]$PathToTF='C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe'
,[Parameter(Mandatory=$true)][string]$Login
,[Parameter(Mandatory=$true)][string]$Password
)
$result = &$PathToTF @("history","/stopafter:1","/recursive","..\*","/login:""$Login"",""$Password""") 2>&1 3>&1
if ($result.GetType().Name -eq "Object[]")
{
<# $result format is:
Changeset User Date Comment
--------- ----------------- ---------- ----------------------------------------
26038 user 24.06.2014 Sample commit comment
$result[2] is:
26038 user 24.06.2014 Sample commit comment
$result[2].Split(" ")[0] is:
26038
#>
$result[2].Split(" ")[0]
}
else
{
"0"
}
這是最後變更號碼發送到出管。如果出現問題,那麼這個號碼是0
。
您可以使用此腳本創建一個函數,並在您的構建腳本中調用它。
要沒有本地工作區中的最新變更號碼,請使用此命令:
tf history /collection:"http://server:8080/tfs/Collection" "$/Project" /recursive /stopafter:1 /noprompt /login:domain\user,password
我非常愛你。 – Yogurtu 2016-03-10 20:48:07
我的單行命令:
for /f "usebackq tokens=*" %%a in (`tf history . /recursive /noprompt /stopafter:1 /version:T ^| powershell -Command "$input | ? { $_ -imatch '^(\d+)\s+' } | %% { $matches[0].Trim() } | Select-Object -First 1"`) do set TIP_CHANGESET=%%a
後
執行TIP_CHANGESET ENV。變量包含提示更改集- 1. TFS舊版本TFS變更集歷史
- 2. TFS獲取最新版本歷史
- 3. TFS歷史遺失
- 4. TFS在分支重命名後使用QueryHistory更改集歷史記錄
- 5. TFS構建特定的變更集並使用變更集號進行部署
- 6. 更新時間表歷史
- 7. TFS簽入歷史記錄
- 8. tfs 2010 - 刪除WorkItem歷史
- 9. TFS和MSBuild:如何獲取最新的變更集版本
- 10. TFS:使用主變更更新分支
- 11. 獲取最新的登記號碼(最新的變更集ID)
- 12. 如何通過TFS API獲取最新變更集編號
- 13. MySQL查詢,來自歷史值表的最新值
- 14. 如何使用TeamCity手動部署特定的TFS變更集?
- 15. SQL服務器 - 更新錶的歷史
- 16. 如何從CLI查詢特定用戶的TFS歷史記錄
- 17. JS/Javascript使用.push或.unshift來跟蹤變量的歷史
- 18. 我的請求歷史記錄更新不正確
- 19. 歷史的歷史
- 20. Mercurial刪除變更集,合併歷史記錄
- 21. 使用特定變更集在TFS上構建解決方案
- 22. TFS回滾到變更集
- 23. TFS:比較變更集
- 24. SQL Server 2005表變更歷史記錄
- 25. Team Foundation Server - TF獲取變更集編號
- 26. friendly_id,更新蛞蝓與歷史
- 27. 在quantmod中更新歷史價格
- 28. TF Build 2013使用變更集,標籤,buildNumber或buildId構建特定版本
- 29. Sitecore - 更新工作流歷史
- 30. Symfony +作曲家更新歷史
首先,Team Build具有已完成此功能的功能。你在用別的東西嗎?其次,存儲庫中的任何更改都足以觸發構建,還是需要查看某些特定目錄或目錄中是否有更改? – Andrew 2012-04-26 17:22:02
是的,我正在使用不同的系統,特別是buildforge。我們使用CI構建的TFS適配器,但如果有更新,我們只想運行構建。由於構建是特定於分支的,我只想知道該分支/文件夾中是否有更改。 – 2012-04-27 18:37:36
廣匯秦的回答非常好,速度非常快,你不需要工作空間。 – Yogurtu 2016-03-10 20:49:20