2013-08-03 168 views
1

我想在不使用合併,回滾,解決等期間出現的UI對話框的情況下自動創建TFS方案。我有一個情況,我既不想AcceptYours或AcceptTheirs。我想接受手動合併,就好像用戶界面出現了一樣,並讓用戶有機會編輯文件並接受合併;但它必須是自動的,沒有用戶界面。tf解決衝突合併自動

在下面的代碼中,我創建了一個'複製'文件,其中包含我希望作爲手動合併回滾特定編輯的最終內容。正如所料,我發生衝突。我已經嘗試了所有的tf resolve/auto:選項,並且我無法解決衝突,因此我的「複製」文件中的內容就像用戶編輯了衝突並接受了手動合併一樣。

  • KeepYours - 將撤消合併
  • TakeTheirs都在服務器版本
  • AutoMerge(強制) - 不解決衝突
  • OverwriteLocal - 不解決衝突
  • AcceptYours - 需要在磁盤上的版本,但更改從回滾更改類型,編輯

如何重現手動合併使用命令行tf工具而不使用UI?

下面是一個例子,以瑞普:

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 
+0

我不知道就可以了,除非你的意思是你正在尋找一個命令行合併工具,用戶可以交互? –

回答

0

您的地方編輯的內容在磁盤上,在適當的位置,然後你AcceptYours解決。

AcceptYours意味着將作爲內容,因爲它們出現在磁盤上,而不是衝突源內容。

+0

我簽入後編輯3在考慮了您的回覆之後,我更改了我正在使用的腳本的順序。我想,爲什麼要解決兩次,只需在發佈回滾之前將所需的內容放入文件中即可。我這樣做,發生衝突,正如你所說,我用/ auto:AcceptYours解決。我得到以下內容:解決C:\ myfile作爲KeepYours,撤消回滾。沒有什麼可簽入的。我錯過了一些東西,因爲它對AcceptYours有意義,但它爲什麼會撤銷回滾?我的內容未被採納。 – bjjer

+0

如果您在發佈變更之前將數據放入文件中,您將會遇到另一個衝突。你爲什麼連續做兩次回滾?你爲什麼要刪除衝突?只需發出回滾,將正確的數據放在磁盤上,解決衝突並在...中檢查? –

+0

我通過編輯回覆發送了另一個代碼示例回覆,但必須獲得批准或類似的內容。無論如何,我刪除了第一次回滾(測試),並做了你所說的,tf迴應「解決KeepYours;撤消回滾。」然後,沒有待處理的更改簽入。也許有人會批准我很快做出的編輯,你可以看到代碼。謝謝。 – bjjer

0

我也會調查(命令行)唯一選項/ 丟棄

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

做到這一點的最好辦法是使用合併命令丟棄選項。該選項僅通過命令行客戶端(tf.exe)可用,並且基本上執行合併,而無需從源到目標進行任何更改;其唯一目的是更新源和目標之間的合併歷史記錄,從而防止將來廢棄的變更集外觀。

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

"tf.exe" merge /recursive /noprompt /discard "$Source/" "$Destination/"