Основное использование SVN

предисловие

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


фон

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

  • разработка будет происходить в окне Windows в Visual Studio с помощью плагина ANKHSVN SC.

  • Я установил SVN на сервере Windows и создал репозиторий, где я буду хранить свои проекты.

  • этот проект потребует доставки на файлы и исходный код.


вопросы

  1. Как здание решения обычно настраивается? Скажем, я импортировал начальную версию решения в репозиторий; затем я достиг некоторой вехи в своей локальной рабочей копии; я фиксирую эти изменения; что происходит потом? Должен ли я просто создать решение на своей локальной машине разработки и упаковать двоичные файлы прямо там и тогда? Как это делается в реальном мире?

  2. после возни с VS и AnkhSVN в виртуальной машине я заметил, что после проверки некоторой ревизии решение, дерево каталогов моей локальной копии получает дополнительный каталог под названием".СВН" в каждом узле. В соответствии с третьим пунктом в "фоне" я также буду доставлять исходный код вместе с двоичными файлами. Это ставит вопрос: Как получить "чистую" версию моего решения? Я должен написать скрипт, который делает уборку для меня?

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

  4. откуда вы научитесь использовать управление версиями, и сколько времени вам потребовалось, чтобы стать опытным (т. е., пока эти операции не стали второй натурой) в нем.


Я действительно хочу начать использовать управление версиями, но я боюсь, что если я начну использовать его, и я делаю что-то непреднамеренно глупо, я потеряю свой код. Любые дополнительные советы приветствуются.

10 ответов


  1. обычно упакованные двоичные файлы не хранятся в системе управления версиями. Если что, используйте для них отдельный репозиторий. На самом деле, постарайтесь держать двоичные файлы подальше от вашего репозитория, если это вообще возможно. Нет скомпилированных версий исходного кода. (см. комментарии)
  2. Get в TortoiseSVN для использования в Проводнике. Вы можете использовать экспорт опция (в отличие от checkout) для чистой версии каталога. Использовать отдельно каталог для этого.
  3. Visual Studio спросит вас, Хотите ли вы перезагрузить измененные проекты или решения. Вам нужно будет убедиться, что вы регистрируете проект одновременно с добавленным / удаленным файлом. Это не даст вам сейчас проблемы, но если бы вы работали с более чем одним человеком или если вы хотите вернуться к более ранней версии позже.
  4. вот и есть :) у меня ушло месяца регулярного использования, чтобы получить это право *

я использовал AnkhSVN в прошлом, и это приятно, но если у вас есть большие решения с большим количеством файлов, вы можете выложить немного денег за VisualSVN. Он использует TortoiseSVN (который в терминах имеет некоторые механизмы кэширования), быстрее (см. комментарий ниже об AnkhSVN 2.0). VisualSVN также немного поможет вам в настройке свойств в специальных каталогах. Он будет автоматически игнорировать bin и obj каталоги, например.
Я не большой поклонник платить за продукт, так сильно опираясь на бесплатный проект, но я должен сказать, что инвестиции того стоили.

другие люди связали некоторые хорошие источники о том, как настроить ваш репозиторий, поэтому я не буду вдаваться в это слишком много. Я обычно использую /trunk, /branches, /tags подход к себе. По крайней мере, отметьте свои версии выпуска, чтобы быстро найти их позже.

объявление 4:
Я работал с CVS (очень мало), Visual SourceSafe, Subversion и Team Foundation Server до сих пор. Я хочу попробовать Git в какой-то момент, но вы можете сделать намного хуже, чем SVN.


4) я начинаю с этого, потому что это ответит на многие Ваши вопросы: прагматический контроль версий с помощью Subversion библия для работы со SVN в моем отношении. Но в отличие от Библии, вы можете пройти через это за пару дней без спешки.

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

2) каталог - это локальный репозиторий кэша, полностью управляемый клиентом SVN. Не трогай его.

3) слияние, удаление и добавление файлов - вот что такое контроль версий. Да, SVN справится с этим изящно, и все это легко объясняется в справочной книге. Каждая редакция вашего проекта самодостаточна.


Я не могу ответить на ваши основные вопросы, потому что они очень специфичны, но когда вы говорите:

Я боюсь, что если я начну использовать его и я делаю что-то непреднамеренно. глупо, я потеряю свой код.

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


следует читать книги. Это бесплатно и имеет ответы на такие вещи, как Вопрос 2 (Ответ: экспорт).


  1. после совершения ваших личных изменений вы будете строить локально. Обычно вы строите локально и тестируете перед фиксацией. В реальном мире несколько разработчиков работают на одном SVN, и обычно есть ночная сборка, где вы можете получить обновленные двоичные файлы, и вы, конечно, перестраиваете по мере необходимости локально. В вашем случае просто перестройте, как диктует случай, принудительно отправьте исходный код, а затем зафиксируйте двоичные файлы каждый день.
  2. Это похоже на Проблема с настройками SVN и Visual Studio. Я бы проконсультировался с этими форумами за помощью.
  3. вы обычно будете обрабатывать решение на своем конце, т. е. когда вы добавляете и удаляете файлы, ваше локальное решение изменяется, и поскольку решения малы, вы также загружаете это решение в свой SVN. Любой SVN может обрабатывать добавление и удаление файлов.
  4. Я начал с кода google и субклипа, закончив Tortoise SVN. Tortoise SVN хорош, потому что он интегрируется в оболочку, поэтому вы можете разработка в любой IDE вы хотите и обрабатывать ваши локальные файлы, как локальные файлы, и просто зафиксировать их, когда это необходимо.

это только wierd прямо в начале, но SVN быстро станет второй натурой для вас. Удачи в вашем проекте.


Я поддержу рекомендацию Avihu Turzion о прагматичном контроле версий с использованием Subversion. Кроме того, проверить управление версиями Эрика Синка how-to Если вы еще не.

  1. поскольку вы единственный, кто совершает, создание и упаковка двоичных файлов локально, безусловно, является вариантом. Если этапы сборки/упаковки достаточно стандартны, автоматизируйте их, настроив систему непрерывной интеграции. TeamCity Professional-бесплатный продукт, который вы можете начните с того, что легко настроить и получить работу с Subversion.

  2. Как упоминалось другими, опция экспорта-это способ получить версию вашего решения без .файлы svn.

  3. Subversion обрабатывает создание файлов, слияние и удаление довольно гладко. С плагинами, которые вы упоминаете, особенно если вы используете что-то вроде AnhkSVN и TortoiseSVN, возможно, что подключаемый модуль сообщает как зафиксированный (по сравнению с тем, что Subversion repository фактически совершил), чтобы выйти из синхронизации. Если вы удаляете файлы или перемещаете файлы, рассматривая это полностью в командной строке (или в TortoiseSVN).

  4. Я научился использовать систему управления версиями самостоятельно, когда проработал несколько лет. Хотя я начал с Visual SourceSafe (что было ужасно), я в конечном итоге перешел к компаниям, которые использовали Subversion и/или TFS для управления версиями.

У вас гораздо больше шансов проиграть код, если вы не используете систему управления версиями, чем если вы это делаете. Ты определенно начинаешь с правильной ноги.


  1. то, как я храню свои файлы в Subversion, - это настройка каталогов Trunk/Branch/Tag, хотя я почти никогда не использую Теги. Твой ствол-это твой прочный, работающий фундамент. Ветви-это когда вам нужно "ветвить" код, работать над чем-то, а затем объединить его обратно в магистраль. Вы можете сделать это для чего-то, что, как вы знаете, займет некоторое время, и вы знаете, что вам, возможно, придется сделать некоторые быстрые исправления, которые изменяют багажник. Смысл?

    - Вы можете оформить свой последняя версия и локальная сборка или настройка среды сборки с помощью MSBuild или Cruise Control.NET или TeamCity (от парней, которые делают resharper). Это сделает сборку для вас, которую вы можете затем развернуть. Все это можно автоматизировать, это просто какая-то работа по настройке всего. Team Foundation Server обрабатывает большую часть этого.

  2. The .каталог svn настолько subversion знает, над чем вы работаете, и может сказать: "Эй, что-то изменилось, предупредите пользователя хорошей красной меткой и пусть они знают, что что-то изменилось."

  3. да SVN будет обрабатывать удаления и слияния изящно. Вы можете быть вынуждены использовать утилиту "Очистка" время от времени.

  4. я узнал управление версиями от старшего разработчика в моем первом проекте.


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

Если у вас возникли проблемы с SVN, я рекомендую вам проверить vault, который является бесплатным для одной или двух команд. (Один администратор и одна учетная запись пользователя не требуют покупки.)


как обычно настраивается построение решений? Скажем, я импортировал начальную версию решения в репозиторий; затем я достиг некоторой вехи в своей локальной рабочей копии; я фиксирую эти изменения; что происходит потом? Должен ли я просто создать решение на своей локальной машине разработки и упаковать двоичные файлы прямо там и тогда? Как это делается в реальном мире

большинство мест стандартизированы в автоматизированном процессе сборки. Как создать варьируется исходя из требований компании и проекта, но преимущества не могут быть оспорены. Последнее место, где я работал, автоматизировало 90% сборки и запускало ее по мере необходимости, но они двигались к полностью автоматизированному, когда я ушел. Это выходит за рамки вашего вопроса, но если вам интересно, вы должны посмотреть, чтобы построить автоматизацию. Некоторые общие инструменты для разработки .NET CruiseControl.NET, MSBuild, NANT. Большинство инструментов были созданы для конкретной среды разработки или языка, но легко адаптируется к другим условиям.

после возни с VS и AnkhSVN в виртуальной машине я заметил, что после проверки некоторой ревизии решения дерево каталогов моей локальной копии получает дополнительный каталог под названием ".СВН" в каждом узле. В соответствии с третьим пунктом в "фоне" я также буду доставлять исходный код вместе с двоичными файлами. Это ставит вопрос: Как получить "чистую" версию моего решения? Я должен написать сценарий оболочки, который выполняет очистку для я?

Как уже отмечалось, .svn-это кэш репозитория. При обновлении, проверке или слиянии svn сравнивает кэшированную версию с операцией, которую вы собираетесь выполнить, и только обновляет, проверяет, объединяет различия. В случае AnkhSVN он довольно хорошо интегрируется с VS и предназначен для игнорирования ненужных файлов при проверке файлов. Таким образом, у вас не должно быть проблем с проверкой временных файлов и двоичных файлов (если вы специально не добавляете их курс.)

Я часто создаю, объединяю (вручную) и удаляю файлы в своих решениях. Будет ли SVN (скорее VS и AnkhSVN) обрабатывать это изящно? Будет ли VS/AnkhSVN автоматически перезагружать решение, в котором были добавлены / удалены файлы, если я вернусь к определенной ревизии?

это сильная сторона SVN. Некоторые VCSs (такие как Visual Source Safe) делают слияние страшной операцией. SVN, с другой стороны, был специально разработан с учетом операций слияния. Наиболее обрабатываются автоматически. Если есть конфликт между объединяемыми версиями (одна и та же строка была изменена двумя разными способами), это покажет вам проблему, а остальное зависит от вас. Его очень трудно действительно удалить файл в SVN. Поэтому, если вы решите изучить старую версию, любые удаленные файлы все равно будут их.

где вы научились использовать управление версиями и сколько времени вам потребовалось, чтобы стать опытным (т. е., пока эти операции не стали второй натурой) в он.

Я слышал о VCS в колледже, но никогда не использовал его до моей первой платной позиции программирования. Это был визуальный источник безопасности. Было довольно легко изучить основы (выезд, Регистрация, комментарии, просмотр и сравнение старых версий). Ветвление я узнал позже с частным хранилищем. Это тоже было хорошо. Ветвление в VSS более подвержено ошибкам, чем большинство других VCSs. Мой текущий работодатель использует SVN, который, хотя и не является самым продвинутым VCS, сделал VSS look как взломать.

Я не могу подчеркнуть важность автоматизированной сборки достаточно. У моего нынешнего работодателя не было процесса сборки, когда я начал (все еще не для большинства проектов). Одной из первых вещей, которые я сделал с унаследованным проектом, была автоматизация всего процесса сборки. Он работает на выделенном сервере в качестве фонового процесса мониторинга SVN для изменений. Если он обнаруживает, что он запускает инкрементную сборку, которая занимает всего несколько секунд. За этим следует набор автоматизированных устройств тесты. Если все тесты завершаются успешно, двоичные файлы сбрасываются в тестовую среду для дальнейшей автоматической интеграции и тестирования системы. Я получаю уведомление на каждом этапе процесса и знаю мгновенно, если что-то не удается.


Я попытаюсь добавить некоторые комментарии, которые еще не были охвачены хорошо написанными ответами выше.

Как обычно устанавливается построение решения вверх? Скажем, я импортировал инициал вариант решения в репозиторий; далее, я достиг некоторых milestone в моей локальной рабочей копии; I фиксировать эти изменения, что произойдет тогда? Могу ли я просто построить решение на моя локальная машина разработки и упакуйте двоичные файлы прямо здесь и тогда? Как это сделано в реальности. мир?

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

тег ваших релизов. Используйте номер версии в выпуске в имени тега. Создайте свои двоичные файлы из тега и отправьте клиенту чистую копию источника, а также созданные двоичные файлы. Вам не нужно пересматривать сами двоичные файлы, потому что неизменность тегов означает, что вы всегда сможете повторно генерировать одну и ту же полезную нагрузку.

Я часто создаю, объединяю (вручную, что is) и удалять файлы в моих решениях. Будет SVN (скорее VS и AnkhSVN) справиться с этим изящно? Будет VS / AnkhSVN автоматически перезагружает решение, в котором были добавлены/удалены файлы от него, если я вернусь к определенному пересмотр?

есть несколько операций, с которыми VCS обычно имеют проблемы. Один из них-удаление пересмотренного файла с помощью Проводника Windows (aka: keyboard delete). Другой-перемещение пересмотренных файлов из одного места в репозитории в другое из Проводника Windows. Вне этих полу-редких действий SVN будет легко идти в ногу с вашими модификациями и слияниями. Для двух событий, перечисленных выше, вы можете использовать командную строку SVN, TortoiseSVN или другую помощь приложение для выполнения "SVN delete" или "SVN delete + SVN (re)add".

Btw-хороший (и бесплатный) инструмент слияния -Kdiff3.

где вы научились использовать source управления, и как долго вы стать опытным (т. е. эти операции носили второй характер.) на него.

Я узнал SVN на работе, Mercurial дома и AccuRev на работе (снова). Это может занять очень много времени, чтобы "получить" ваш первый VCS - особенно если вы учитесь в вакууме. После первого, становится легче. Я бы поставил это на порядок месяцев, а не недель.

удачи!