Преобразовать набор(ы) изменений в полочный набор

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

например создать набор полок из (набор изменений 2013 -> набор изменений 2034)


person orange    schedule 14.01.2014    source источник
comment
Чего вы пытаетесь добиться этим? Вероятно, есть лучший способ достичь своей цели.   -  person Daniel Mann    schedule 15.01.2014
comment
@DanielMann, я пытаюсь взять полученную полку и подать заявку в другую ветку. Я не хочу безосновательного слияния, слишком много файлов, помеченных как слияние.   -  person orange    schedule 15.01.2014


Ответы (5)


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

person Daniel Mann    schedule 14.01.2014
comment
Это возможно. Смотрите мой ответ. - person zumalifeguard; 20.08.2017

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

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

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

person Lee Richardson    schedule 14.08.2014
comment
@orange: почему бы тебе не сделать это правильным ответом? Это решает вашу проблему. - person floquet22; 24.02.2016
comment
Я только что нашел рабочий процесс с использованием Git-TFS, который позволяет вам это сделать. Завтра, надеюсь, напишу ответ. Это не 100% то, что просит человек, но это не связано с таким шатким рабочим процессом. - person Greg Burghardt; 07.07.2016

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

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

  1. Получите соответствующий набор изменений (новый код)
  2. Переместите все исходники во временную папку. (не перемещайте папку $tf). Исходное дерево теперь должно быть пустым.
  3. Получить предыдущий набор изменений.
  4. Зеркальное копирование нового кода поверх старого
  5. Проведите примирение.

Теперь вы можете создать набор полок.

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

В этом примере я указываю на папку из корня под названием «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
person zumalifeguard    schedule 20.08.2017
comment
Спасибо! Я использовал этот подход, но создал для него новое рабочее пространство, чтобы убедиться, что я случайно ничего не перепутал в своем обычном рабочем пространстве. Затем с помощью TFS Power Tools (tfpt unshelve /migrate) переместите полку в другую рабочую область/ветку. - person xr280xr; 10.09.2019

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

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

  1. Найдите в 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
    
  2. Создайте новую ветку из фиксации, которая происходит перед той, для которой вы хотите задним числом создать набор полки:

    $ git checkout -b CCCCCCC
    
  3. Проверьте изменения из коммита, для которого вы хотите создать набор полок:

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

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

    $ git tfs shelve my_retroactive_shelveset HEAD
    

Преимущества

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

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

Недостатки

  • Это не чистое решение TFS
person Greg Burghardt    schedule 08.07.2016

Каждый коммит будет создавать полочный набор. Таким образом, мы можем найти набор полок, созданный во время инициации коммита. Это будет иметь точно такие же изменения. Нам не нужно создавать новый набор полок.

person Easwar    schedule 27.10.2020