tf解决冲突合并自动化

时间:2013-08-03 02:29:18

标签: tfs branching-and-merging tf-cli

我试图在不使用合并,回滚,解析等期间出现的UI对话框的情况下自动创建TFS场景。我有一个案例,我既不想要AcceptYours也不接受它们。我希望接受手动合并,就好像UI出现一样,并让用户有机会编辑文件并接受合并;但它必须是自动化的,没有用户界面。

在下面的代码中,我创建了一个'copy'文件,其中包含我想要的最终内容,作为特定编辑回滚的手动合并。正如所料,我遇到了冲突。我已经尝试了所有tf resolve / auto:选项,我无法解决冲突,因此我的'copy'文件中的内容被视为用户编辑冲突并接受手动合并。

  • KeepYours - 将撤消合并
  • TakeTheirs采用服务器版本
  • AutoMerge(强制) - 无法解决冲突
  • OverwriteLocal - 无法解决冲突
  • AcceptYours - 获取磁盘上的版本,但将更改类型从回滚更改为编辑以编辑

如何在不使用UI的情况下使用命令行tf工具重现手动合并?

以下是重新制作的例子:

SET WSPATH=C:\MyMappedWorkspacePath
SET F=%WSPATH%\%RANDOM%%RANDOM%
SET TF=%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\TF.exe
SET TMPFILE=%TEMP%\tf-resolve-test.txt

ECHO Hello > "%F%"
"%TF%" add "%F%"
"%TF%" checkin /comment:"add file" /noprompt "%F%" > %TMPFILE%
"%TF%" checkout "%F%"
ECHO // Change 1 >> "%F%"
COPY "%F%" "%F%-copy" > nul
"%TF%" checkin /comment:"edit 1" /noprompt "%F%" > %TMPFILE%
"%TF%" checkout "%F%"
ECHO // Change 2 >> "%F%"
"%TF%" checkin /comment:"edit 2" /noprompt "%F%" > %TMPFILE%
FOR /f %i IN ('PowerShell.exe -Command "select-string -Path %TMPFILE% -Pattern 'Changeset #(?<changeset>[0-9]*) .*' | %{$_.Matches} | %{$_.Groups['changeset']} | %{$_.Value}"') DO SET ROLLBACKCHANGESET=%i
"%TF%" checkout "%F%"
ECHO // Change 3 >> "%F%"
ECHO // Change 3 >> "%F%-copy"
"%TF%" checkin /comment:"edit 3" /noprompt "%F%" > %TMPFILE%
"%TF%" rollback /changeset:%ROLLBACKCHANGESET%~%ROLLBACKCHANGESET% "%F%" /keepmergehistory /noautoresolve /noprompt
"%TF%" resolve "%F%" /auto:DeleteConflict
DEL /F "%F%"
MOVE "%F%-copy" "%F%"
ATTRIB +R "%F%"
"%TF%" rollback /changeset:%ROLLBACKCHANGESET%~%ROLLBACKCHANGESET% "%F%" /keepmergehistory /noautoresolve /noprompt
"%TF%" resolve "%F%" /auto:AutoMergeForced /noprompt

2 个答案:

答案 0 :(得分:0)

您可以在磁盘上的适当位置放置已修改的内容,然后使用AcceptYours解析。

AcceptYours表示将您的内容显示在磁盘上,而不是冲突来源的内容。

答案 1 :(得分:0)

我还会调查/ discard 的(命令行)选项。

http://teamfoundation.blogspot.com/2007/03/discarding-changes-in-merge.html

最好的方法是使用merge命令的discard选项。该选项仅通过命令行客户端(tf.exe)可用,并且基本上执行合并而不从源到目标进行任何更改;它的唯一目的是更新源和目标之间的合并历史记录,从而防止将来丢弃变更集外观。

"tf.exe" merge /recursive /noprompt /discard /version:C1001~C1001 "$Source/" "$Destination/"

"tf.exe" merge /recursive /noprompt /discard "$Source/" "$Destination/"
相关问题