русский
440 Views
Nothing is f*cked
Simple
15.03.12 13:16  Baseless merge in TFS
Структура проекта у нас на работе весьма интересная.
Так как поддерживается две версии (одна для Visual Studio 6, а другая - для Visual Studio 2008), которые между собой не совместимы (не компилируются другим компилятором), приходится держать одну из них как ветку от другой. Если делается изменение в старой версии, оно сливается через TFS в новую. С этим более-менее все в порядке.
Недавно был релиз, и, как обычно, релизная ветка была отпочкована от основной. Естественно, с версиями для обоих компиляторов. Казалось бы, они и в новой (релизной) ветке останутся папой и сыном, и можно будет сливать из старой версии в новую и там. А вот х...й! TFS знать ничего не желает об их предполагаемом родстве, а сливать через гуй можно только ветки, которые друг с другом в родстве.
Погуглив, я выяснил, что в TFS это возможно только из командной строки:
tfs /baseless src dst /recursive

где src и dest - намапленные пути на диске.
Проблема в том, что TFS заявляет каждый файл как конфликт (еще бы, общей исходной точки-то нет). Слава богу, в моем случае можно везде выбрать версию цели. Было бы удивительно, если бы это можно было сделать из гуя, поэтому когда окошко конфликтов появится, его нужно закрыть, а потом выполнить в консоли следующую команду (перейдя до этого в правильную папку, конечно):

tf resolve /auto:KeepYours /recursive .

После этого можно заливать изменения в TFS и сливать через гуй.
После нормальной системы (Mercurial) вся эта ... воспринимается как страшный сон.

#1