Как объединить новые файлы в другую ветку в TFS?

#tfs

#tfs

Вопрос:

Хорошо, в TFS у нас есть основная магистральная ветвь и другая ветвь, назовем ее вторичной. Мы создали новый файл в магистрали, но при попытке объединить этот конкретный файл, он не дает нам возможности объединить с вторичной веткой. Мы предполагаем, что это потому, что аналогичный файл не существует во вторичном.

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

Здесь мы объединяем файл, который существует во вторичном. Как вы можете видеть, в выпадающем списке перечислены все три наши ветки (вторичная на самом деле является средней): введите описание изображения здесь

Теперь, когда я пытаюсь объединить файл, который был создан в магистрали после того, как был разветвлен вторичный, вторичный больше не указан в качестве целевой ветви. введите описание изображения здесь

Комментарии:

1. Можете ли вы привести нам пример команды слияния tf, которую вы запустили? было похоже на это? : tf merge $/ trunk $ / вторичный / рекурсивный

2. Вновь созданный файл уже зарегистрирован?

3. Извините, мы здесь не эксперты по TFS. Мы взаимодействуем с TFS через VS2010. Через Team Explorer мы нашли файл в магистрали, который мы хотим объединить, затем щелкните по нему правой кнопкой мыши и выберите «Разветвление и объединение> Объединить …». Итак, я не уверен, в какую команду это переводится. Кстати, мы пытаемся объединить только этот конкретный файл. @PVitt: Да, новый файл возвращен в магистраль.

Ответ №1:

попытка объединить этот конкретный файл

Чтобы понять TFS, полезно помнить, что единицей изменения является набор изменений, и именно наборы изменений (а не файлы) регистрируются и объединяются.

Мы предполагаем, что это потому, что аналогичный файл не существует во вторичном

Это правильно — в версии (номер набора изменений), в которой находится целевая ветка, этот файл просто не существует, поэтому объединять не с чем.

В общем, вы ничего не получаете, выбирая конкретный файл в диалоговом окне слияния источников — как говорится, он просит вас выбрать источник и выделить ветви. Укажите ветви в их корне, выберите Selected changesets only , и TFS покажет вам список наборов изменений, которые существуют в источнике, но не были объединены с целью. Если вам нужен только тот, который добавил этот новый файл, вы можете выбрать его в этом списке.

Комментарии:

1. Итак, когда вы выбираете определенный файл в Team Explorer и щелкаете правой кнопкой мыши «Ветвление и объединение> Объединить …», что именно он пытается объединить, если вы ограничены наборами изменений?

2. Я полагаю, что это предложило бы вам все наборы изменений, которые включают этот файл. Но я когда-либо объединял только из главы иерархии, так что это всего лишь предположение.

Ответ №2:

Я думаю, что это должно быть возможно через графический интерфейс VS следующим образом:

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

Можно утверждать, что это ограничение TFS на самом деле имеет смысл:

  • Если вы внесли дополнительные изменения в файлы, вы тем самым защищены от взлома вашей вторичной ветки.
  • Если вы не внесли дополнительных изменений в какие-либо другие файлы, все равно имеет смысл объединить ваши, поскольку слияние будет содержать только ваш новый файл.

Комментарии:

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

2. Если вы обвиняете TFS в «протекционизме», я абсолютно согласен с вами, но именно так это и работает.

3. Я полагаю, что причина этого заключается в том, что, если вы просто «объединяете» рассматриваемый файл, он не находится ни в какой другой ветке, но когда вы объединяете его родительскую папку (папку / ветку), то есть изменение содержимого происходит в папке, которая находится в другой ветке.

4. -1 Хотя этот ответ работает, он недостаточно объясняет, почему это происходит

5. Спасибо за обходной путь. Я мог бы также привести аргумент, что операции слияния требуют большого внимания и сосредоточенности, и мне нравится полностью контролировать ситуацию и быть тем, кто решает, что объединяется, а что нет. Я лично считаю, что TFS безмозглая, и наряду с Visual Source Safe является живым доказательством того, что Microsoft не может разработать надлежащее программное обеспечение.

Ответ №3:

«Теперь, когда я пытаюсь объединить файл, который был создан в магистрали после того, как вторичный был разветвлен, вторичный больше не указан в качестве целевой ветви».

Для этого щелкните правой кнопкой мыши на файле в проводнике управления версиями и выберите «Ветка» вместо «Объединить». Затем появится диалоговое окно для указания цели.

Как правило, вам лучше объединить магистральную и вторичную, а не ее фрагменты (проще поддерживать согласованность ветки с течением времени).

Комментарии:

1. Мне кажется, это помогает. Объединение родительского каталога, как предложено в принятом ответе, не помогло.

Ответ №4:

Я думаю, причина в том, что вы не можете объединить то, что не было разветвлено. Обратите внимание, что если вы объединяете папку, содержащую новый файл, это говорит о том, что действие [merge, branch] указывает на то, что вы разветвляете новый файл в результате слияния родительской папки. Насколько я могу судить, выбор файла> Слияние и ветвление> Ветка вместо слияния, похоже, является решением. Единственное отличие, которое я вижу, — это то, что в истории затем перечислены [ветка], а не [слияние, ветка]. После того, как вы создали ветку файла в своей вторичной ветке, вы можете объединить изменения в файле между ветвями.

Ответ №5:

Вы могли бы попробовать использовать команду слияния TF