Вопрос

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

Это было полезно?

Решение

А Электроинструменты Visual Studio должен позволить вам сделать это.

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

Например, чтобы объединить набор полок под названием «Имя набора полок», созданный в Филиале 1, с Филиалом 2, используйте следующее:

>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Ошибка:

не могу определить рабочую область

Эта конкретная проблема была решена путем запуска команды из источник корневая папка ветки.Это противоречит некоторым ответам на 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. мигрировать вариант работает
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top