Подтвердить что ты не робот

Преобразование наборов изменений (ов) на полку

Можно ли создать полку из разницы двух версий одной ветки только некоторыми операциями в tfs/tfpt?

например. создать полку из (changeet 2013 → changeet 2034)

4b9b3361

Ответ 1

Нет, это невозможно. Изменения и полки - разные вещи, с разными целями. Возможно, вы могли бы написать плагин, чтобы сделать то, что вам нужно (получить набор изменений, проверить файлы, отложить файлы).

Ответ 2

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

  • Откат набора изменений и проверка отката.
  • Откат набора изменений отката. Это дает мне набор ожидающих изменений, содержащих исходное изменение.
  • Отложить ожидающие изменения.

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

Ответ 3

В то время как это решение не включает в себя чистое решение TFS, оно не связано с ошибкой в ​​истории изменений TFS, как это делает Ли Ричардсон.

Вы можете использовать Git-TFS для клонирования репозитория или ветки TFS, а затем создать новую ветку из предыдущего фиксации (проверка TFS), reapply изменится с нового фиксатора и опубликует его как полки:

  • Посмотрите git log для фиксации до того, который вы хотите создать набор изменений для:

    $ git log --oneline
    
    AAAAAAA Newest commit
    BBBBBBB The commit for which I want a shelveset
    CCCCCCC The commit where I will create a new branch from
    
  • Создайте новую ветку из фиксации, которая возникает до того, который вы хотите ретроактивно создать на полке:

    $ git checkout -b CCCCCCC
    
  • Оформить изменения с фиксацией, для которой вы хотите создать полки для:

    $ git checkout BBBBBBB -- .
    
  • Зафиксируйте эти поэтапные файлы:

    $ git commit -m "Committing stuff for a retroactive shelveset that does X, Y and Z."
    
  • Создайте полки:

    $ git tfs shelve my_retroactive_shelveset HEAD
    

<сильные > Преимущества

  • Это позволяет сохранить историю изменений в TFS, не требуя от вас изменения в наборе изменений, создать полку для отмены отмены ранее измененного набора изменений.

  • Поскольку полка была создана из ветки в Git, вы можете удалить эту ветку и по-прежнему сохранить свою историю Git -TFS.

Недостатки

  • Это не чистое решение TFS

Ответ 4

Это не невозможно. С технической точки зрения, вы можете это сделать, хотя вы, возможно, и не захотите. Я разрешу читателю решить.

Вы можете сделать это в новой рабочей области.

  • Получить соответствующий набор изменений (новый код)
  • Переместите всю папку источника в папку temp. (не перемещайте папку $tf). Исходное дерево теперь должно быть пустым.
  • Получить предыдущий набор изменений.
  • Зеркальное копирование нового кода поверх старого
  • Сделайте Reconcile.

Теперь вы можете создать Shelveset.

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

В этом примере я указываю папку из корня под названием "Src". Измените его корневую папку.

md tmpws
cd tmpws
tf vc workspace /new /noprompt tmpws /location:local /permission:private

tf vc get "$/Src" /version:C2222 /recursive /noprompt

cd ..
md tmp
move "tmpws\Src" tmp

cd tmpws
tf vc get "$/Src" /version:C1111 /recursive /noprompt  /force /overwrite

cd ..
robocopy "tmp\Src" "tmpws\Src" /mir

tf vc reconcile /promote /adds /deletes /diff /recursive /noprompt

tf vc shelve /replace /noprompt mychange 

tf vc undo "$/Src" /recursive /noprompt
tf vc workspace /delete tmpws

cd ..
rmdir /q /s tmp
rmdir /q /s tmpws