Могу ли я отключить другую ветку в tfs 2008? - PullRequest
104 голосов
/ 23 сентября 2008

Давайте предположим, что какой-то разработчик в моей команде отложил свои изменения, которые он сделал в ветви А. И я работаю над веткой В. Могу ли я отменить его изменения в ветке Б? (Через графический интерфейс или командную строку)

Ответы [ 4 ]

128 голосов
/ 23 сентября 2008

Инструменты Visual Studio Power Tools должны позволить вам сделать это.

C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes

Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.

Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
                     [/migrate /source:serverpath /target:serverpath]

 shelvesetname          The name of the shelveset to unshelve
 /nobackup              Skip the creation of a backup shelveset
 /migrate               Rewrite the server paths of the shelved items
                        (for example to unshelve into another branch)
 /source:serverpath     Source location for path rewrite (supply with /migrate)
 /target:serverpath     Target location for path rewrite (supply with /migrate)
 /nobackup              Skip the creation of a backup shelveset

Например, чтобы объединить набор полок под названием «Имя набора полок», созданный в Branch1, в Branch2 используйте это:

>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"
34 голосов
/ 25 марта 2011

Альтернативное решение для tfpt, позволяющее избежать слияния каждого файла вручную

Проблема с инструментом tfs заключается в том, что вы выполняете «необоснованное объединение», поэтому необходимо подтвердить каждый файл . У меня было более 800 файлов, и я никогда не доверял кнопке «Авто слияние» и не хотел просматривать каждый файл по очереди - поэтому мне пришлось искать другой путь!

  • Загрузите и установите TFS Shelveset Sidekick .
  • Инструмент отображается в разделе «Инструменты» в VS2010
  • Запустите инструмент Shelveset Sidekick, нажмите «Поиск», чтобы отобразить наборы полок
  • Щелкните правой кнопкой мыши по вашему полке и выберите «Экспортировать полку»
  • Сохранить в пустом месте, например C:\temp\shelveset-name
  • Теперь у вас есть полная структура каталогов, содержащая только новые файлы

(Примечание. При экспорте нет индикатора выполнения, поэтому, если у вас большой набор полок, для экспорта которого требуется много времени, вам просто нужно проверить в проводнике Windows (Файл> Свойства> Размер), что файлы все еще поступают вниз, если вы думаете, что он заморожен).

Теперь вам просто нужно скопировать их в новую ветку с помощью проводника Windows.

Это сработало для меня:

  • Сначала проверка всего решения (в новой ветке)
  • Закрыть это решение
  • Перевести TFS в автономный режим изнутри VS ( Инструмент для этого ) - см. Ниже, почему это важно ...
  • Копирование файлов в Windows Explorer. Структура каталога в c:\temp\shelveset-name должна быть переименована, чтобы соответствовать новой ветви. Совет. Обязательно скопируйте в нужное место !!!
  • Вывести VS онлайн
  • Должны найти все изменения и добавить новые файлы
  • Если он запрашивает привязку sourcecontrol, убедитесь, что путь для новой ветки правильный.
  • Проверка - а затем проверка новых файлов

Важное замечание: Я обнаружил, что если вы сначала не переведите TFS в автономный режим, то у вас появятся новые файлы (из набора изменений, которые вы не используете), которые будут отображаться без красной галочки, и вам придется включите их снова, чтобы заставить их добавить. Если у кого-то есть альтернативное решение этой проблемы, я хотел бы знать - обновление не работает.

1 голос
/ 23 сентября 2008

Информация о полке включает конкретный путь, по которому она идет. К сожалению, я не знаю ни одного автоматического способа отвалить в какое-либо место, кроме того, к которому оно было отложено. Когда я хотел это сделать, мне приходилось проверять эквивалентные файлы в новой ветке, извлекать их из старой ветки, а затем вручную копировать файлы.

РЕДАКТИРОВАТЬ: Ну, я думаю, я делал это трудным путем. Я должен попробовать решение Курта. :)

0 голосов
/ 09 мая 2018

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

Ошибка:

невозможно определить рабочее пространство

Эта конкретная проблема была решена путем запуска команды из source корневой папки ветки. Это противоречит некоторым ответам на SO, где говорится, что нужно использовать «целевую» ветку - нет, использовать «источник»:

cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"

Второй вопрос появился после этого. Кажется, он не может подключиться к серверу TFS. Я понял, что у меня установлено несколько VS и они подключены к разным TFS-серверам. Я использовал VS12, и у меня было рабочее пространство и подключение к серверу. Но я не осознавал, что для работы TFPT2013 необходимо реплицировать то же соединение в VS13. Он подключается к одному и тому же серверу и рабочей области.

Я также пытался сделать это с помощью TFPT2015, но я установил его, и он не установил TFPT.exe, следовательно, он был бесполезен. Поэтому я попытался от TFPT2013 до TFS2015, и это работало для этой конкретной команды. Интересно, а почему нет, если VS12 / 13 отлично работает против TFS2015?

Подводя итог

  • Использовать CMD или DevCMD - не имеет значения
  • команда запуска из источника корневая папка филиала
  • проверка соединения с сервером Team Explorer для конкретной VS
  • TF Power Tools 2013 работает с TFS v15, по крайней мере, миграция опция работает
...