#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