Какая система управления версиями является тривиальной для настройки и использования для игрушечных проектов?

Я преподаю третий необходимый вступительный курс в отделе CS. В одном из моих домашних заданий ученикам предлагается ускорить код, который они написали для предыдущего задания. Фактор десяти ускорений является обычным делом; факторы 100 или 1000 не являются неслыханными. (Для ускорения 1000 раз вы должны были совершить ошибки новобранец с помощью malloc().)

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

Пока вы улучшаете программу, ее также можно разбить. Было бы неплохо отступить?

Вы можете увидеть, где я собираюсь: мои ученики выиграют от контроля версий. Но есть некоторые оговорки:

  • Наша вычислительная среда заблокирована. Все, что зависит от центрального хранилища, является подозрительным.
  • Наши студенты невероятно перегружены. Не просто классы, но рабочие места, спорт, музыка, вы называете это. Чтобы использовать новый инструмент, он должен быть невероятно легким и иметь очевидные преимущества.
  • Наши студенты больше всего работают парами. Проблемы с битами между учетными записями являются проблематичными. Может ли эта проблема также быть решена с помощью распределенного контроля версий?
  • Сложность - это враг. Я знаю, что создание репозитория CVS слишком затруднительно. У меня все еще есть проблемы, потому что я делаю это только один раз в год. Мне сказали, что SVN еще сложнее.

Вот мои комментарии к существующим системам:

  • Я считаю, что центральный контроль версий (CVS или SVN) исключается из-за того, что наши ученики не имеют административных прав, необходимых для создания репозитория, который они могут разделить с одним другим учеником. (Мы застряли с разрешениями файлов Unix.) Кроме того, настройка на CVS или SVN слишком сложна.
  • darcs легко настраивается, но не очевидно, как вы делитесь вещами. darcs send (отправлять патчи по электронной почте) кажется многообещающим, но не ясно, как его настроить.
  • Вводная документация для git не для начинающих. Как и установка CVS, у меня есть проблемы с.

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

Итак, что действительно легко настроить, зафиксировать, вернуть и поделиться изменениями с партнером, но не нужно легко объединять или работать в масштабе?

Ключевое ограничение состоит в том, что пары программирования должны иметь возможность обмениваться друг с другом и только друг с другом, а пары меняются каждую неделю. Наша инфраструктура - Linux, Solaris и Windows с фильтром netapp. Я сомневаюсь, что ИТ-персонал хочет создать группу Unix для каждой пары студентов. Есть ли более легкое решение, которое я пропустил?

(Спасибо за принятый ответ, который превосходит остальных из-за его отличной ссылки на Git Magic, а также полезные комментарии.)

Ответ 1

Я бы сказал, что что-то вроде Git может соответствовать счету:

  • Как это распределенная система, вам не нужно иметь центральный репозиторий, репозитории существуют с исходным каталогом
  • Легко создавать файлы исправлений, которые могут быть отправлены по почте и применены.
  • Хотя может показаться, что Git сложно использовать, основные идеи компиляции, слияния, добавления и удаления файлов не так уж трудны.

Посмотрите на этот сайт Git Магия или даже этот сайт подсказки GitReady

Ответ 2

Второй выбор Mercurial

Преимущества

  • Отличная документация.
  • Команда графического представления для отображения ветвления.
  • Кросс-платформенный.
  • Поставляется с графическим интерфейсом для всех платформ (TortoiseHG или thg).
  • Встроенный веб-сервер для просмотра проекта.
  • Может поддерживать ваш проект на вашем пальцевом пальце.
    • Работа может быть сохранена, даже если вспомнить только одного члена пары их ноутбук. Не то, чтобы это когда-либо происходило.

Недостатки

  • Необходимо установить Python, если он еще не существует.
    • Легко сделать, но это еще один шаг.
  • Понимание различия между push/pull vs update/commit.
    • (Это относится ко всем распределенным VCS).
  • Различие между головами и советами.
  • Некоторые команды недоступны сразу; они должны быть явно включен.
    • (Обычно это считается выгодным для сообщества, поскольку оно упрощает процесс, некоторые другие не согласны).

Ответ 3

Subversion прост в установке, на windows, linux и mac os x. Я не знаю, в какую программу они программируются, но плагин подзапроса для Eclipse довольно прост в установке и скрывает некоторые сложности с репозиторией.

И сложность хранилища? Это так просто, если у вас есть багажник, теги и ветки в каждом проекте. И у них может не быть много времени, но они должны получить время, чтобы изучить SVN (или подобное), потому что это умение, которое хорошо выглядит на их резюме.

Ответ 4

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

Ответ 5

Я бы рекомендовал Mercurial (также называемый "hg" ). Это распределенная VCS с открытым исходным кодом и не нуждается в центральном репозитории. Использовать его изо дня в день легко. На официальном сайте достаточно документации. Например, проверьте QuickStart.

Решающим моментом для меня был отличный графический интерфейс для Windows - TortoiseHg. Кажется, он также поддерживается в Linux (не пробовал себя). И, конечно же, для большинства версий Linux существуют дистрибутивы командной строки.

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

Надеюсь, это поможет!

Ответ 6

Для реальной простоты использования для ваших учеников вы можете установить сервер SVN с включенной автозагрузкой, совместно использующий webdav. Таким образом, они могут просто монтировать свою директорию с помощью WebDAV и автоматически запускать каждый раз, когда они нажимают на сохранение. Доступ к истории легко с помощью TortoiseSVN, плагинов Eclipse/Visual Studio или некоторых решений для веб-доступа, таких как ViewVC. Для ваших ограничений ограничения доступа вы можете использовать встроенную аутентификацию subversion (смотрите здесь) - в которой используется простой файл конфигурации для мелкозернистого контроля доступа.

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

Autocommit больше подходит для "моего офисного работника/босса", у которого нет понятия, что происходит внутри компьютера, требуется контроль версий для текстовых документов. Студенты, берущие курс программирования, должны, возможно, также научиться использовать приличный SCM в любом случае.

Git и Mercurial было бы хорошо из-за их распределенной природы, что облегчает обмен данными, но оба инструмента не имеют интерфейсов GUI, которые действительно удобны в использовании (TortoiseHg выглядит многообещающим, а gitk - очень хорошим браузером в репозитории, но ваш студентам все равно пришлось бы обернуть головы инструментами командной строки, чтобы в полной мере использовать инструменты). Также концепция распределенного SCM немного сложнее понять.

На стороне pro вы можете использовать общедоступные хостинг-решения, такие как GitHub и не нужно беспокоиться о настройке сервера. Это также облегчает обмен решениями, но нарушает ваши требования "только друг с другом". Но я думаю, вы не сможете остановить их от обмена кодом в любом случае, по моему опыту работы с курсом, который я нашел, глядя на код и проверяя, что он уникален - единственный способ предотвратить копирование.

Вы также можете использовать PlasticSCM, который имеет действительно приятные интерфейсы для большого количества IDE и (по крайней мере, требования сайта) бесплатные лицензии для образовательных учреждения.

Ответ 7

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

Студент колледжа CS, и я использовал его в прошлом году, и он отлично работает, и единственным предварительным условием является подключение к Интернету: -)

Ответ 8

Bazaar, Mercurial, и Git звук, подходящий для вашего случая, - тривиальный для создания репозиториев, и всем студентам нужно поделиться доступом для чтения в файловой системе репозитории друг друга.

Ответ 9

Darcs - отличный DVCS, особенно для небольших проектов, таких как для классов CS. Хотелось бы, чтобы меня познакомили с Дарком или Git в колледже, и я также рекомендую вам представить его своим ученикам.

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

Сделайте выбор, любая из этих систем управления версиями действительно хороша.

Ответ 10

У меня был очень хороший опыт работы с Bazaar. Подобно Git/Mercurial, он распространяется. Он безсерверный - вам не нужен демон, установленный на сервере, на котором размещен репозиторий, даже если вы используете его удаленно (т.е. Он может работать как общий FTP/SFTP-ресурс).

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

Есть инструменты импорта для других VCS, таких как Subversion, хотя я их не пробовал.

Ответ 11

darcs send тривиально для настройки - при запуске darcs send <remote repo> он смотрит в _darcs/prefs/email удаленного репо, чтобы решить, куда отправить письмо. Если там ничего нет, тогда он запрашивает пользователя.

Получатель патча просто сохраняет файл и запускает darcs apply <patch file> в соответствующем репо.

Таким образом, каждый ученик может просто иметь свои собственные репозитории со своим собственным адресом электронной почты в _darcs/prefs/email и обмениваться патчами по электронной почте.

Ответ 12

Что касается разрешений, внешняя служба не потребует времени от ИТ-персонала вашего университета.

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

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

Что касается VCS, я считаю, что Mercurial лучше всего подходит для ваших платформ. TortoiseHg особенно хорош для новых пользователей, если они не знакомы (и у вас нет времени для их изучения) интерфейсы командной строки.

В зависимости от вашей ситуации преимущество DVCS заключается в том, что их копия на университетском сервере (если таковая имеется) является полноценным репо. Вам может быть удобно, чтобы вы или TA получили доступ, который должен быть проще в настройке и продлится весь семестр, а не еженедельно.

Ответ 13

Настройка репозитория subversion тривиальна; Я часто ставил одно для небольших проектов (например, разрабатывал код для ответа на Stack Overflow!), И я сомневаюсь, что любой, кто мог бы изучить SCM-систему вообще, будет иметь проблемы с этим.

$ svnadmin create /home/cjs/repo
$ mkdir my-project
$ cd my-project
$ vi hello.c
  [...hack hack hack...]
$ svn import -m 'Initial project import.' file:///home/cjs/repo
Adding         hello.c

Committed revision 1.

Тем не менее, разделение, безусловно, является проблемой. Если ученики всегда работают вместе, когда они работают одновременно, они могут использовать USB-накопитель, так как они могут просто отключить его и передать его туда и обратно, когда нужно приходить, и тот, кто собирается программировать в одиночку, может просто висеть на Это. Это не совсем удобно.

Другой вариант, поскольку все они работают в общей системе Unix, заключается в создании каталога с битом выполнения, но не с чтением, установленным для остальной группы (или всех пользователей), и использованием имени s3cr3t для репо под тем, что знают только два студента. Передача этого секретного имени профессору позволила бы ему в любое время исследовать студенческие репозитории. ( "Итак, вы отправили задание вовремя, но система электронной почты потеряла его? Позвольте мне просто взглянуть на время этого коммита..." ). script может помочь установить это.

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

Ответ 14

ОБНОВЛЕНИЕ: Шесть лет спустя я никогда не стал бы использовать подрывную деятельность для чего-либо снова. Git - путь. Итак, хотя я все еще думаю, что SVN немного "проще", это просто не стоит больше учить.

Я использовал CVS, SVN, Bazaar и Git (в этом порядке введения), и я должен сказать студентам, что SVN - это путь. Фактически, когда я был руководителем TA, мы внедрили SVN в качестве замены старого "submit script", который был tar и электронной почтой script. Labstaff настраивает репозиторий на основе Apache SVN-DAV и использует файл authz. TA и инструктор могут контролировать разрешения для каталогов и групповых проектов для каждого студента на очень мелкомасштабном уровне, оставляя ученикам очень простой путь к их первой фиксации. См. мой учебник (учетные данные, вырванные из последних ТП.. хмм..)

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

Я определенно не согласен, что Git - лучший VCS для начинающих, испытавших пустые взгляды, достаточно упомянуть о какой-либо системе VCS, не говоря уже о Mac-Daddy-by-Linus- сам король VCS, git. Это просто неверно, что Git не является более сложным, чем svn, и отсутствие зрелых инструментов n00b достаточно, чтобы не использовать его в этом сценарии. Я только начал использовать Git для нового проекта, который я разрабатываю в Netbeans, и уже столкнулся с серьезными ограничениями интеграции Netbeans. За один семестр вы не собираетесь использовать какие-либо функции, которые svn не предоставляет, поэтому Git является излишним.

Ответ 15

Subversion в Windows может быть так же просто, как настроить TortoiseSVN. Для его использования есть немного кривой обучения (особенно если вы никогда не использовали элемент управления версиями до этого), но вы можете помочь ему, выделив ему половину урока и предоставив некоторые слайды для PowerPoint для их загрузки.

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

Ответ 16

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

К сожалению, два старших, которые каждый указал бы вам на Assembla, Unfuddle, отказались от поддержки своего бесплатного хостинга (или, если хотите, чтобы вы их закрыли), но вы все равно можете использовать Origo, это дает вам как открытый, так и закрытый хостинг.

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

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

Ответ 17

Я бы сказал, что лучше всего попытаться работать с вашим ИТ-отделом, чтобы настроить систему/метод для ваших студентов, чтобы легко создавать новые хранилища SVN/CVS.

Вероятно, вы могли бы получить ИТ-отдел, чтобы предоставить вам привилегии, необходимые для создания репозиториев для ваших учеников, даже если они не будут давать предпочтения самим ученикам. Вы, вероятно, довольно легко могли бы написать несколько сценариев для массового создания репозиториев из списков студентов в начале семестра.

Ответ 18

RCS для Linux.

Я не нашел ничего проще, чем RCS для Widows, но не все порты RCS работают хорошо, поэтому вы должны попробовать их, что делает его непростым. Для разработчиков просто не просто. Порт Windows из http://www.cs.purdue.edu/homes/trinkle/RCS/ довольно хорош.