Может ли кто-нибудь объяснить исходный (контроль версий) мне?

Я никогда не работал над профессиональным проектом с командой, поскольку я все еще в старшей школе. Как следствие, я никогда не подвергался воздействию всего этого "контроля версий" и "контроля источника". Они одинаковы? Как именно программа, управляющая кодом, управляет кодом? Я слышал, что вам нужно проверить код (скопировать существующий код?) И объединить его обратно (что произойдет, если кто-то изменит код, который вы не изменили, а вы измените что-то еще и объедините его? Конечно, его код не заменяемый старой версией.) И, наконец, какой лучший/простой пример этого типа программного обеспечения?

Ответы

Ответ 1

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

Именно это и является причиной контроля версий. Это был бы не очень полезный инструмент, если бы все, что он сделал, было слепо переписывать код людей, не так ли?;)

Инструменты управления источником поддерживают репозиторий со всей историей базы кода. Каждое изменение проверяется как дельта, сохраняя только то, что изменилось. Это означает, что если вы и я оба проверим версию A, а затем отредактируем файл B, а вы отредактируете файл C, и мы оба проверим, программное обеспечение для управления исходным кодом будет сравнивать различия и где конфликтов не существует (как в этом случае), просто примените оба изменения, и если возникнут конфликты (если мы оба изменили одни и те же строки кода), он отклоняет попытку регистрации и сообщает, какие две версии файла имеют конфликтующие изменения, и просит вас объединить их вручную, (обычно он также может выделять изменения, чтобы вы могли визуально видеть, что было изменено в каждой версии). Поэтому он никогда не перезаписывает изменения.

Другие задачи, которые он сделает для вас:

  • Тег конкретных версий или этапов так что вы можете легко найти их снова позже (это версия, где мы наконец, исправлена ​​раздражающая ошибка № 2524, это бета-1 и т.д.
  • Вставьте репозиторий в два, разрешая изменения, которые могут выходить из sync "temporarliy, или даже остаться отдельные продукты навсегда (подумайте о PHP одновременно поддерживает PHP4, а также работает над PHP5. В какой-то момент они просто разветвляли свою кодовую базу так, пока они начинались одинаково, они могут теперь применяйте патчи к одному без затрагивая другое). Конечно, это также могут попытаться объединить эти ветки назад (вы можете создать филиал для каждого крупного в вашем продукте, возможно, так они могут быть разработаны изолированно без ущерба для постепенные изменения, происходящие с остальной части кода, а затем, когда функция выполнена, объединить ее ветвь обратно в основной репозиторий)

Существует два основных типа инструментов управления источниками: централизованные и распределенные. Распределенные - это большая новая вещь, в то время как централизованная была с нами на протяжении десятилетий. Короче говоря, централизованный контроль версий просто означает, что есть один сервер главного репозитория, где хранятся все ветки и история изменений для каждого. Этот сервер отвечает за слияние проверок и все такое. Поэтому каждый раз, когда разработчик проверяет код или записывает его в репозиторий, это сервер, с которым он синхронизируется. Распределенные просто отбрасывают аспект "основного сервера". Вместо этого каждый раз, когда вы проверяете свой код, вы создаете новый репозиторий локально на своей собственной машине по пути, по которому вы проверяете код. Затем вы можете работать против этого локального репозитория, который выполняет все те же действия, отслеживая историю изменений, объединяя изменения и т.д., И как только вы будете готовы, вы можете объединить свой репозиторий в любой другой репозиторий. Как правило, вы, вероятно, захотите объединить его в какое-то "основное" репо, где весь код склеивается, но вы также можете объединить его в локальное репо вашего кодового разработчика, если, возможно, ему нужна эта функция, над которой вы работали, но он еще не достаточно стабилен, чтобы войти в основное репо. Таким образом, он дает вам большую гибкость и позволяет вести историю изменений вашей локальной работы, не рискуя сломать сборку в главном репозитории (в централизованной настройке, что произойдет, если вы зарегистрируете что-то, что не компилируется? Вся команда прикручивается до тех пор, пока не будет исправлена. И если вы не проверите ее, вы потеряете преимущества контроля версий, не позволяя вам вернуться к предыдущей версии, если узнаете, что вводите новые ошибки)

И, наконец, что такое лучший/простой пример такого типа программное обеспечение?

Hm, самым популярным является SVN, который старинная централизованная система, но это немного больно для установки imo. Требуется специальное программное обеспечение на сервере. Я лично очень люблю Bazaar, который распространяется, а серверный репозиторий требует только FTP-доступа и ничего больше на сервере.

Ответ 2

Эрик Синк написал хороший HOWTO управления версиями.

Отказ от ответственности: Эрик Синк является директором SourceGear, которая разрабатывает и продает несколько инструментов, связанных с контролем версий (включая SourceGear Vault). Тем не менее, Source Control HOWTO - довольно нейтральная сбалансированная запись.

Ответ 3

Я верю, что эта статья объясняет ответы на большинство ваших вопросов.

Ответ 4

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

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

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

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

Ответ 5

Все системы управления версиями в основном одинаковы. Ни один из них не сложнее в использовании, чем другой. svn commit somefile так же сложно, как git commit somefile. Они просто работают немного по-другому.

Единственная причина, по которой я начал использовать git, - это github. К тому же, единственная причина, по которой я использовал SVN над darcs (который имеет действительно приятный интерфейс командной строки), состоял в том, что я нашел хороший бесплатный SVN-сервер.

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

Некоторые ресурсы, которые могут вам пригодиться:

  • GitHub - что заставило меня начать использовать git. Он имеет очень активное сообщество и очень полезно (когда вы создаете новый репозиторий, он дает вам команды, например, нажимать на него свой код). У них есть хороший раздел guides.
  • Бесплатный screencast об использовании GitHub - объясняет множество особенностей сайтов и большую часть полезных основ
  • Gitorious - еще один хороший хостинг-сайт git для проектов с открытым исходным кодом (сам сайт тоже с открытым исходным кодом), Не совсем приятно использовать GitHub, я бы сказал, но очень хорошая альтернатива.
  • repo.or.cz - первые хостинг-сайты git. Довольно архаичный взгляд по сравнению с GitHub/Gitorious, но он работает, и хосты
  • PeepCode git эпизод - $9, но считается очень высоким. Охватывает практически все, что вам нужно знать.
  • GitCasts - серия хороших скринкастов. Начните с первого ( "Настройка, инициализация и клонирование" ), и он должен охватывать самые полезные вещи.
  • GitMagic - чрезвычайно полезно, особенно для немного более продвинутых вещей (он ответил на многие мои "Как я.." вопросы, как создать пустую ветку). Всеобъемлющее руководство (от основного материала до внутренних элементов git).
  • Git для начинающих: окончательное практическое руководство - вопрос о stackoverflow - не совсем исчерпывающий, но он туда попадает.

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

Я нашел darcs очень прост в использовании (и он CLI, и понимание того, как darcs get работал, чтобы перемещать "патчи" между репозитории. "GettingStarted" dikcs.net wiki page - это все, что мне нужно для начала работы. Единственная проблема, с которой я столкнулся, - я не мог найти любые хосты для проектов darcs...

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

Я начал изучать SVN, главным образом благодаря "введение в скринкаст Subversion" . Затем, когда я обнаружил github, я использовал git svn для импорта моего основного хранилища SVN в git

Вкратце: найдите хороший учебник или руководство для некоторой системы управления версиями, а также версию всех этих случайных проектов и фрагментов, которые у вас есть. Это будет казаться немного бессмысленным, пока вы случайно не сделаете глупые изменения и не сохраните/не закроете свой script, или случайно не удалите что-то.. Я в значительной степени использую VCS как "супер-отмену" (и для синхронизации кода между компьютерами)

Ответ 6

Управление версиями и источником одинаково. Ну, в основном. Управление версиями - это то, что делает Source Control. Он позволяет иметь несколько версий файла. Подумайте об этом, как история ревизий в Википедии. Вы можете вернуться, посмотреть, что было сделано, сравнить изменения и вернуться к предыдущему коду.

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

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

Самый простой пример - загрузить Subversion на ваш USB-накопитель и установить Tortoise SVN.

Ответ 7

Вот несколько ответов на ваши вопросы:

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

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

Если вы должны были изменить более старую версию файла, а затем обнаружите, что вы отработали старую версию (программа-источник должна уведомить вас, когда вы пытаетесь проверить свой код), вам придется объединить свои изменения в новой версии. Некоторые средства управления источниками поставляются со встроенным инструментом слияния.

Ответ 8

Отвечая на второй отправленный вами вопрос:

SVN требует централизованного хранилища, в то время как Git децентрализована, но большинство людей, которых я знаю, которые используют это, полагаются на github. Кроме того, Git используется для основной магистрали исходного кода ядра Linux, поэтому его оптимизация немного больше для очень больших базовых кодов. Кроме того, Git, похоже, имеет лучший дескриптор объединения ветвей, а затем код pre-svn 1.5.x.

Ответ 9

Версии не обязательно должны быть сложной настройкой или чем-то, что подходит только для работы в командной среде, и это не только для проектов кодирования. Все может перейти в контроль версий. Это просто вопрос не потерять ничего. я версия управляет практически каждым редактируемым файлом, включая все в моем доме/и множестве конфигурационных файлов в и т.д. И т.д., И я все версии, которые я делаю для работы (в дополнение к версиям, предоставленным для проектов). Это такая часть того, что я делаю, я думаю, что она должна предоставляться файловой системой.

Я рекомендую начинать просто и практиковать с RCS. Хотя RCS отстой для команд, он отлично подходит для управления локальными файлами пользователя только с одним автором. До сих пор не занимайтесь слияниями и веткими. Научитесь думать о сохранении файла, что означает сохранение версии. После того, как вы будете довольны RCS и согласитесь с сохранением изменений, вы можете перейти к изучению SVN или Git или любой другой реальной системы, которые гораздо более надежны и лучше подходят для командной среды.

Ответ 10

Также посмотрите на Streamed Lines, в которой описывается ряд лучших практик и анти-шаблонов управления версиями, я бы также вторая ссылка на статьи Эрика Санкса, упомянутые Майклом Бёрром