TFS - можно ли откатить ревизию, зафиксированную перед ветвлением? - PullRequest
1 голос
/ 04 февраля 2011

Предположим, я разветвляю Solution-A, сменим 10 на Solution-B.

Позже я понимаю, что Solution-B не должен содержать changeset 7.

Есть ли способоткат изменений 7 только из решения B без ущерба для решения A?

Всякий раз, когда я использую откат tf, все ожидающие изменения переходят к Solution-A.

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 29 января 2016

Я знаю, что это старый вопрос, но он может помочь любому, у кого такая же проблема. Особенно, когда вам нужно откатить набор изменений, который был проверен давно в другой ветке.

Обновите WORKSPACE_ROOT и TFS_BRANCH_ROOT в следующем пакетном файле. Назовите это, например. RollbackMigrate.cmd и всегда запускайте его из корня рабочей области.

Этот пакетный файл будет:

  1. Разбор аргументов - только один аргумент является номером набора изменений
  2. Найти имя текущего рабочего пространства и его путь в TFS
  3. Найти исходный путь TFS для миграции
  4. Сопоставить источник с текущим рабочим пространством
  5. Откатить набор изменений
  6. Создать набор полок и отменить проверку
  7. Удалить временное сопоставление
  8. Отменить удаление ранее созданного набора полок и перенести его
    • вам просто нужно автоматически объединить shelveset в новом окне
  9. Удалить набор временных полок
  10. Checkin
    • вам просто нужно обновить комментарий, заметки и ссылку на рабочий элемент

@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

set WORKSPACE_ROOT=D:\PathToMyWorkspaces
set TFS_BRANCH_ROOT=$/Project/Branches

:01_ARGUMENT_PARSING
echo Rollback changes from another branch
if [%1]==[] (
    set /P CHANGESET=Enter changeset number: 
    if [!CHANGESET!]==[] (
        echo Changeset number is required! Exiting!
        exit /B 1
    )
) else (
    set CHANGESET=%1
    shift
)
set SHELVE_NAME="Auto shelved rollback of %CHANGESET%"

:02_FIND_MY_WORKSPACE_NAME
for %%i in (.) do (
    set WORKSPACE=%%~nxi
)
if not [%CD%]==[%WORKSPACE_ROOT%\%WORKSPACE%] (
    echo This script works only in the root of workspace e.g. D:\PathToMyWorkspaces\MyWorkspace
    exit /B 1
)
echo Current workspace is %WORKSPACE%
for /f %%i in ('tf workspaces %WORKSPACE% /noprompt /format:detailed ^| grep -om 1 "$/[^:]\+"') do (
    if not [%DST%]==[] (
        echo Cannot work on workspaces with more mappings! Exiting!
        exit /B 2
    )
    set DST=%%i
    echo Found destination path for migration: "%%i"
)

:03_VIEW_CHANGESET
for /f %%i in ('tf changeset 1570888 ^| grep -om 1 "%TFS_BRANCH_ROOT%/[^/]\+/[^/]\+"') do (
    set SRC=%%i
    echo Found source path for migration: "%%i"
)
if [%SRC%]==[] (
    echo Cannot find path to source branch! Exiting!
    exit /B 3
)
for %%i in (%SRC%) do (
    set SRC_BRANCH=%%~nxi
)

:04_MAP_SOURCE
set TMP_SRC_PATH=%WORKSPACE_ROOT%\%WORKSPACE%_%SRC_BRANCH%
echo Create temporary mapping for source branch in %TMP_SRC_PATH%
mkdir %TMP_SRC_PATH%
echo Creating mapping for "%SRC%" to "%TMP_SRC_PATH%"
tf workfold /map %SRC% %TMP_SRC_PATH%
if %errorlevel% NEQ 0 (
    echo Can't create mapping for "%SRC%", exiting!
    exit /B 4
)

:05_ROLLBACK_CHANGESET
echo Performing rollback of changeset %CHANGESET%
tf rollback /changeset:%CHANGESET% /lock:checkin /keepmergehistory

:06_SHELVE_ROLLBACK
echo Shelving rollback
tf shelve /comment:%SHELVE_NAME% %SHELVE_NAME% /noprompt /move /replace

:07_UNMAP_AND_DELETE_TEMPORARY
echo Unmapping "%SRC%" from "%TMP_SRC_PATH%"
tf workfold /unmap "%TMP_SRC_PATH%"
echo Deleting "%TMP_SRC_PATH%"
rmdir /S /Q "%TMP_SRC_PATH%"

:08_UNSHELVE_MIGRATE
echo Unshelving the rollback...
tfpt unshelve /migrate /source:"%SRC%" /target:"%DST%" %SHELVE_NAME% /noprompt

:09_DELETE_THE_SHELVESET
echo Deleting the shelveset
tf shelve /delete %SHELVE_NAME% /noprompt

:10_CHECKIN
echo Checking in the rollback...
tf checkin
1 голос
/ 05 февраля 2011

Необходимо откатить набор изменений, в котором есть слияния, к решению b, а затем повторно применить объединение без набора изменений 7.

0 голосов
/ 14 января 2014

Наконец-то я сделал что-то вроде ниже.

  1. Откат изменений 7 на Solution-A и регистрация. Это создаст набор изменений 11 в Solution-A
  2. Объединить набор изменений 11 с веткой Solution-B
  3. Откат изменений 11 в ветви Solution-A и регистрация, которая создаст набор изменений 12 в Solution-A

В будущем объединение в Solution-B из Solution-A пропускает объединение изменений 12.

0 голосов
/ 05 февраля 2011

Я рекомендую использовать TFPT.exe, входящий в комплект электроинструментов: http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f/

Обзор высокого уровня:

  1. Из сопоставления рабочей области отката Solution-B набор изменений
  2. Подтвердить изменение для отображения рабочего пространства в Solution-B

Команда:

  1. c: \ workspace \ mapping \ to \ solution \ b> откат / изменение tfpt: 7
  2. c: \ workspace \ mapping \ to \ solution \ b> tf commit
...