Ответ 1
Нет, это невозможно. Изменения и полки - разные вещи, с разными целями. Возможно, вы могли бы написать плагин, чтобы сделать то, что вам нужно (получить набор изменений, проверить файлы, отложить файлы).
Можно ли создать полку из разницы двух версий одной ветки только некоторыми операциями в tfs/tfpt?
например. создать полку из (changeet 2013 → changeet 2034)
Нет, это невозможно. Изменения и полки - разные вещи, с разными целями. Возможно, вы могли бы написать плагин, чтобы сделать то, что вам нужно (получить набор изменений, проверить файлы, отложить файлы).
Можно создать полку из набора изменений с некоторыми ограничениями. Мне нужно было отменить переход от ветки, чтобы удалить ее из релиза, но она не была в какой-либо другой ветке, поэтому я хотел сохранить изменения на полке. Я достиг этого как ниже:
Вы можете применить эту технику к случаю, описанному в вопросе, но это будет много усилий вручную, так как это нужно было бы повторить для каждого набора изменений. Это также создаст массу беспорядков в TFS, так как вам придется также проверять откаты откат.
В то время как это решение не включает в себя чистое решение 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.
Недостатки
Это не невозможно. С технической точки зрения, вы можете это сделать, хотя вы, возможно, и не захотите. Я разрешу читателю решить.
Вы можете сделать это в новой рабочей области.
Теперь вы можете создать 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