Можно ли перемещать папки из одного набора веток TFS в другой и сохранять ожидающие изменения? - PullRequest
0 голосов
/ 14 декабря 2018

В настоящее время наш проект TFS (TFVC, not git) содержит папку, в которой находится весь наш продукт.Эта папка содержит три ветви (Dev, Main и Release), каждая из которых, в свою очередь, содержит много различных подпроектов.Мы пытаемся реструктурировать таким образом, чтобы отдельные компоненты содержались в их собственной структуре ветвления.

Вопрос. Можно ли переместить папку, содержащуюся в ветви (не в самой ветви), вместе с соответствующей папкойв других ветвях в новый проект TFS при сохранении взаимосвязи и статуса любых необработанных наборов изменений?

Вот диаграмма нашего желаемого конечного результата:

target structure

Мы хотим переместить каждый из «Проект 1» папки (левая сторона) в свою собственную ветвящуюся структуру (правая сторона), но нам нужны любые не объединенные наборы изменений, чтобы "прийти вместе".То есть, если мы попытаемся объединиться из Dev в Main в новой структуре, нам будет представлен список (соответствующих) наборов изменений, которые не были объединены в старой структуре.

Возможно ли это?Если это так, , какую серию tf / tfvc команд нам нужно выполнить?Я углубился в Google, но потерпел неудачу - либо потому, что я не знаю, как описать это дружественным для поиска способом, либо это просто невозможно.

То, что я пробовал:

  • Прямое перемещение / переименование каждой из папок в новый проект ( предварительное создание каждой из целевых ветвей Dev / Main / Release)

    • Неизмененные наборы изменений были утеряны.
    • Все, что я получаю, - это один набор изменений "переместить / переименовать", который появляется в не объединенном списке для новых ветвей.Слияние , что вызывает перезапись всего в целевой ветви (т.е. файлы ветки релиза теперь такие же, как у dev).
    • На стороне + отложенные наборы полок "auto-follow", когда не хранится
  • Разветвление каждой папки в новую структуру (на этот раз без предварительного создания папок целевых ветвей)

    • Это создало три ветви, которые не были связаны друг с другом.
    • Мне удалось решить эту проблему путем безосновательного слияния между ними (tf merge /baseless /recursive) и получения целевых файлов ветвей в случае конфликта;с последующим переучиванием ветвей.(Как объяснено здесь )
    • В отличие от вышеизложенного, сами файлы оказались правильными (ничего не было перезаписано).
    • Неизолированные наборы изменений были утеряны.
    • Стеллажи не могут быть доставлены в исходное местоположение

Если это имеет значение,мы готовы потерять всю историю, если это единственный способ решить эту проблему.Желательно, чтобы мы хранили его, даже если бы это означало хранение «устаревшей» копии оригинала.Я не очень обеспокоен тем, что наборы полок также следуют за их источником ... у нас есть только два, которые могут быть затронуты, и мы можем обрабатывать их вручную, если это необходимо.Мы используем предварительную версию TFS 2018.

Изменить: в ответ на ответ, который был опубликован, а затем удален:

Я не собираюсь перемещать ветви, но извлекать папки глубоко внутри них в свою собственную структуру ветвей без потери ожидающих изменений.Я показываю только два уровня выше, но на самом деле они намного глубже.Я могу tf rename всю ветку в песочнице и получить ожидаемые результаты ... но я не пытаюсь переименовать ветки, а перемещение папок дает неожиданные результаты.

1 Ответ

0 голосов
/ 27 декабря 2018

Кажется, что вы можете достичь того, чего хотите, имея отношения слияния как из новых веток Dev, Main, Release , так и старых папок проекта.Я думаю, что вы можете сделать вариант второго «маршрута», который вы пробовали выше.

  1. Разветвите папку old Release> Project [x] в new Проект [x]> Ветвь релиза
  2. Ветвь новый Проект [x]> Ветвь релиза в новый Проект [x]> Основная ветвь
  3. Объединить (безосновательно) папку old Main> Project [x] (указав набор изменений, из которого разветвлен выпуск old ) в new Project [x]> Основная ветвь
  4. Ветвь нового Проекта [x]> Основная ветвь в новом Проекте [x]> Dev-ветка
  5. Объединение(безосновательно) папка old Dev> Project [x] (с указанием набора изменений, из которого old Main была разветвлена) в new Project [x]> Devbranch
  6. Повторите для других проектов

Цель состоит в том, чтобы создать новые отношения слияния ветвей (путем ветвления [new] Release для [New] Main и затем [New] Maв [Новый] Дев.На этом этапе отношения слияния установлены, и все филиалы находятся в одном состоянии.Затем мы безосновательно объединяем [старый] с [новым] для main и Dev.Для Main мы хотим поставить точку без слияния в состоянии, когда Main и Release одинаковы (в старом).Для Dev мы хотим сделать необоснованное слияние в состоянии, где Dev и Main одинаковы (в старом).Тогда могут произойти дополнительные слияния от [старого] к [новому], и они должны быть обнаружены как изменения с возможностью слияния с [нового] ​​на [новое], аналогично тому, как они находятся в [старом] на [старом]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...