Могу ли я перенести в другую ветку в tfs 2008?

105

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

спинодальный
источник
Демонстрация приведенной выше команды: Основы команды Unshelve
Rohit

Ответы:

129

Инструменты 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/"
Курт Хагенлохер
источник
2
Ооооо ... Курт, я думаю, ты только что сделал мне день. Я собираюсь попробовать это позже.
Herms,
Где взять электроинструменты?
Guy
3
Да, электроинструменты ДОЛЖНЫ позволять вам это делать, но, к сожалению, слияние каждый раз происходит ужасно неправильно, так что оно почти бесполезно.
Тим Букер,
Слияние не так уж и плохо. Я обнаружил, что Auto Merge работает в 90% случаев.
Джастин Радд,
2
Просто попробовал. Я переместил много файлов в набор полок, и, к сожалению, это не работает. Вам нужно вручную «перенести» все эти файлы (здесь также нет множественного выбора). Затем они добавляются в рабочую область как новые файлы. Я не могу его использовать, потому что больше не могу слить.
Стефан Штайнеггер
34

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

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

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

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

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

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

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

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

Simon_Weaver
источник
Этот метод проще для больших наборов полок, и я использовал именно его. Спасибо!
Ани
Этот метод действительно лучше для больших полок,
Аамир,
Что ж, вы можете обойтись без отключения TFS. Но я не уверен, что оно того стоит. Что я сделал, так это запустил действие Сравнить - в Source Control Explorer из контекстного меню, открытого в соответствующей папке. Можно отфильтровать вывод, чтобы отображались только разные элементы. Затем это позволяет сделать на них множественный выбор и проверить все сразу. Но я полагаю, что отключить TFS от сети быстрее и проще.
отметка
К сожалению, это не работает для меня, когда я «добавляю» изменения в набор полок. Я получаю сообщение об ошибке «Не удалось получить отложенный файл. Требуется отложенное отложенное изменение файла».
Джон Сондерс
@JohnSaunders, вы имеете в виду набор полок с любыми добавками или эксклюзивными добавками ? Мне не нужно было делать это годами :)
Simon_Weaver
1

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

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

Herms
источник
0

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

Ошибка:

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

Эта конкретная проблема была решена путем выполнения команды из корневой папки исходной ветки. Это противоречит некоторым ответам на 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, и у меня было рабочее пространство и подключение к серверу. Но я не понимал, что такое же соединение необходимо реплицировать в VS13 для работы TFPT2013. Он подключается к тому же серверу и рабочему пространству.

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

Подвести итоги

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

Следующие шаги можно использовать для небольших наборов полок (~ 20 файлов или меньше).

  1. В ветвях shelveset и target начните с регистрации или отката всех ожидающих обновлений.
  2. В ветке полочного набора уберите с полки файлы из соответствующего полочного набора.
  3. В целевой ветке извлеките любой из существующих файлов, которые были в наборе без полок.
  4. Сравните файлы без полок в ветке набора полок с файлами в целевой ветке, чтобы определить те файлы, которые требуют обновлений слиянием (если таковые имеются).
  5. Если необходимо, вручную сделайте обновления слиянием для применимых файлов предыдущего шага и сохраните эти файлы в рабочей области целевой ветви.
  6. Скопируйте другие файлы полочного набора из рабочего пространства ветви полочного набора в рабочую область целевой ветви.
  7. Сравните новые обновленные файлы в рабочей области целевой ветви с зарегистрированными файлами. Внесите необходимые исправления.
  8. Зарегистрируйте новые обновленные файлы в целевой ветке.
  9. Откатить незаполненные файлы в ветке полочного набора.
JohnH
источник