Мне постоянно намекают, что неплохо было бы перестать впустую поливать этот программный продукт и привести хотя бы немного конструктивной критики. Несмотря на то, что ничем таким его я не поливал, ибо все, что я до раньше сказал, было абсолютной правдой, я все же решил пойти на поводу почтенной публики и выплеснуть, наконец, все, что наболело.
Сразу отмечу, что я в основном использовал в своей работе CVS и Subversion, а также немного потыкал палочкой VSS, чтобы убедиться, что он и правда мертв, посему некоторые приколы, которые я упоминаю, могут быть и не проблемами вовсе. Так, дело привычки.
Ну, обо всем по порядку.
- Get latest version. Это не то же самое, что и чекаут. Тому, кто это придумал, нужно памятник поставить при жизни. Закопать по пояс и покрасить краской-серебрянкой. Какие грабли это способно вызвать, мне даже описывать страшно - например, какой-то файл редактируется извне студии и ни дай бог забыть ему сделать чекаут! У меня несколько раз получалась ситуация, когда такой измененный файл затолкать назад в репозиторий удавалось только при помощи dijereedo (шаманский бубен не помогал)
- Отличная, великолепная интеграция со Студией. Настолько шикарная, что работать с лепрозо, ой, репозитарием без студии не получится. Настолько великолепная, что при проблемах с соединением с TFS сервером она, интеграция, весело и намертво вешает Студию. Очень, очень удобно.
- Продолжение пункта 2 - эта интеграция по юзабилити почти сравнивается с вечно сырым Subversion-плагином для студии AnkhSVN. С TortoiseSVN не сравниваю намеренно, ибо это совершенно разные весовые категории, Студия тут даже не курит в коридоре, а скорее тихо писается в памперс.
- Встроенный стандартный diff позволяет M$ полностью подавить всех соперников в конкурсе “Обосравшиеся года” и взять первое, второе прочие места до десятого. Включать ТАКОЕ в состав якобы профессионального продукта, продающегося за большие бабки, в 21 веке могут себе позволить только наиболее отъявленные художники-авангардисты. Я к подобному искусству отношусь прохладно.
- Бранчи. Я так и не понял, есть ли это там, и, если есть, как этим пользоваться. Впрочем,то же самое можно сказать и про CVS, царствие ему небесное, но в SVN бранчинг тупой как пробка. Наверное, поэтому и работает. Впрочем, чтение гугла наводит на мысль, что брани там таки похожи на SVN-овские, но меня по традиции терзают смутные сомнения.
- Теги ревизий. Ну, знаете, бывает очень удобно - закоммитил изменения, и присвоил ревизии тег “Build 1.2.3.222-fucking-bug-fixed”. Не надо через полгода ломать голову, как вытащить код, предшествующий починке этого факин бага. Можно ли это сделать в TFS и если можно, то как, остается по сей день для меня вопросом номер два.
- Вопрос номер один же - какой альтернативно одаренный товарищ придумал shelves? Ребята, это, по сути, аналог временной папки где-то на диске, куда Вася Пупкин может временно скинуть свое художество, если боится, что за коммит этого в основное дерево коллеги оторвут ему все выступающие части тела. Так вот - подобной хуйни в системе контроля версий в принципе быть не должно! Ибо провоцирует на неправильное использование оной. Как это должно выглядить в нормальном мире - Васисуалий Пупкинофф проводит глобальный рефакторинг части ядра системы. Естетственно, коммитить промежуточные результаты в основную ветвь означает провоцировать разные веселые дискуссии с другими программистами, не разделяющими Васиного оптимизма по поводу грядущих изменений в ядре, посему Вася, не мудрствуя глюкаво, заводит себе отдельную ветку aka бранч и тихо сам с собою или с другими маньяками ведет себе рефакторинг там. В определенный момент измененное ядро полностью проходит все функциональные и юнит тесты и принимается решение о слиянии альтернативной ветки с основной. Даже в SVN это делается достаточно просто.
В TFS же народ просто провоцируется на использование полок. “Сань, посмотри, я тут придумал хрень такую” - “Положи в shelf” - “Ок” и понеслось. Дело в том, что эти полки не предназначены для работы с кодом - это именно свалка всякой фигни без признаков версионности, но основная опасность состоит в том, что если эти ребята в определенный момент захотят код, пролежавший на полке, включить в основную ветку, то их с очень большой вероятностью ждет очень большой сюрприз - сделать это средствами TFS окажется решительно невозможно - либо будут постоянные сообщения вроде “This project already contains pending changes” либо еще что-то совсем малопонятное. Я наступил на такие грабли, и в итоге файлы пришлось добавлять в лепрозорий через весьма ректальные обходные пути. - Куча всяких вроде бы мелочей, но мелочей таких, без которых коммерческий продукт подобного плана сегодня не имеет права на существование. Например, в случае обломанного check-in комментарий безвозвратно теряется. Ребята, и Черепашка и AnkhSVN не просто запоминают последний введенный комментарий, и услужливо подставляют его на место при следующем коммите после облома, но еще и ведут историю комментариев! Неужели это было так сложно сделать? Лучше бы не делали эти дурацкие полки, честное слово!
- Определенна, и очень забавная особенность - вот открыт у меня солюшен в студии. Известный нам по предудущим пунктам Васисуалий внял мольбам и зачекинил свои изменения, проигнорировав полки. Я храбро кликаю правой кнопкой мыши (ненавижу гуевую мышевозню, честное слово! svn update - наше все!) и командую “Latest version! Get!”. Студия, не выдержав такой наглости, начинает задавать вопросы вроде “Тут Вася проект в солюшен добавил. Его качать?”. Блядь, какого ответа они ожидают? Какие тут вообще могут быть варианты, а? Если это солюшен, то мне нужны все проекты из него!
- В предыдущем случае отмечено, что несмотря на положительный ответ на многозначительный вопрос о скачивании ненужных проектов, добавленных в безнадежное “решение”, Студия или ее хваленая “интеграция” норовит порой скачать только сами файлы проектов. Да, оставив все исходники на сервере. В итоге сама же и обламывается при попытке открыть такой проект.
Вот так. Это только малая толика того, что меня лично в TFS здорово напрягает. Конечно, другие системы отнюдь тоже не без проблем, но в SVN, по крайней мере, все прозрачно - если я сказал svn update, то будет именно update без закидонов, глупых вопросов с одним вариантом ответа и забытых файлов.
















по поводу полок меня терзают смутные сомнения что это они так пытались опошлить прекрасную идею spikes
О нет, Ненененене, Девид Блейн, не-не-не-не.
Какие еще spikes, вротмненоги?
Слушай, а чего ты этот AnkhSVN не к ночи будь он помянут поминаеш? Есть жыж VisualSVN.
Я его один раз поставить пытался, а он взял и упал зачем-то.