Можно ли создать полочный сет из diff двух версий одной ветки только некоторыми операциями в tfs/tfpt?
например создать набор полок из (набор изменений 2013 -> набор изменений 2034)
Можно ли создать полочный сет из diff двух версий одной ветки только некоторыми операциями в tfs/tfpt?
например создать набор полок из (набор изменений 2013 -> набор изменений 2034)
Нет, это невозможно. Наборы изменений и полки — это разные вещи, с разными целями. Вероятно, вы могли бы написать плагин, который будет делать то, что вам нужно (получить набор изменений, проверить файлы, отложить файлы).
Можно создать набор полок из набора изменений с некоторыми ограничениями. Мне нужно было откатить изменение из ветки, чтобы удалить его из релиза, но его не было ни в одной другой ветке, поэтому я хотел сохранить изменение в наборе полок. Я достиг этого, как показано ниже:
Вы можете применить этот метод к случаю, описанному в вопросе, но это потребует много ручных усилий, поскольку его придется повторять для каждого набора изменений. Это также создаст много беспорядка в TFS, так как вам также придется проверять откаты откатов.
Это возможно. Технически говоря, вы можете это сделать, хотя можете и не хотеть. Я позволю читателю решить.
Вы можете сделать это в новом рабочем пространстве.
Теперь вы можете создать набор полок.
Если вы сможете сосредоточиться на определенной папке, то она будет работать быстрее, и вы сможете ее автоматизировать. Вот примеры командных строк, которые сделают это. Я только что попробовал, и это сработало для меня.
В этом примере я указываю на папку из корня под названием «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
tfpt unshelve /migrate
) переместите полку в другую рабочую область/ветку.
- person xr280xr; 10.09.2019
Хотя это решение не включает чистое решение TFS, оно не включает в себя исправление истории набора изменений TFS, как это делает ответ Ли Ричардсона.
Вы можете использовать Git-TFS для клонирования репозитория или ветки TFS, а затем создать новую ветку из предыдущей фиксации ( TFS check-in), повторно примените изменения из нового коммита и опубликуйте их как полку:
Найдите в 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 в чистоте.
Недостатки
Каждый коммит будет создавать полочный набор. Таким образом, мы можем найти набор полок, созданный во время инициации коммита. Это будет иметь точно такие же изменения. Нам не нужно создавать новый набор полок.