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

<p>я преподаю третий обязательный вводный курс в отделе cs. одно из моих домашних заданий просит студентов ускорить код, который они написали для предыдущего задания. фактор десять ускорений являются обычными; факторы 100 или 1000 не являются неслыханными. (для ускорения в 1000 раз вы должны были сделать ошибки новичка с помощью malloc ().)</p><p>программы улучшены по последовательности небольших изменений. я прошу студентов записать и описать каждое изменение и последующее улучшение.</p><p>пока вы улучшаете программу, ее также можно сломать. разве не было бы приятно отступить?</p><p>вы можете видеть, куда я иду с этим: мои студенты очень выиграют от контроля версий. но есть несколько предостережений:</p><ul> <li>наша компьютерная среда заблокирована. все, что зависит от центрального хранилища, является подозрительным.</li> <li>наши студенты невероятно перегружены. вы называете это не просто занятиями, а работой, спортом, музыкой. для них, чтобы использовать новый инструмент, это должно быть невероятно легко и иметь очевидные преимущества.</li> <li>наши студенты работают в основном в парах. получение бит назад и вперед между счетами проблематично. может ли эта проблема быть решена с помощью распределенного контроля версий?</li> <li>сложность - враг. я знаю, что создание репозитория cvs слишком затруднительно - у меня все еще есть проблемы, потому что я делаю это только один раз в год. мне сказали, что svn еще сложнее.</li> </ul><p>вот мои комментарии к существующим системам:</p><ul> <li>я думаю, что централизованный контроль версий (cvs или svn) исключен, потому что у наших студентов нет административных привилегий, необходимых для создания репозитория, которым они могли бы поделиться с другим студентом. (мы застряли с правами доступа к файлам unix.) кроме того, установка на cvs или svn слишком сложна.</li> <li>даркс легко настроить, но не совсем понятно, как вы делитесь. darcs send (для отправки патчей по электронной почте) выглядит многообещающе, но не ясно, как ее настроить.</li> <li>вводная документация для git не для начинающих. как и в случае с настройкой cvs, у меня есть проблемы.</li> </ul><p>я запрашиваю предложения о том, какой источник-контроль использовать с начинающими студентами. я подозреваю, что мы можем найти ресурсы, чтобы положить тонкий слой поверх существующей системы и упростить существующую документацию. у нас, вероятно, нет ресурсов для написания новой документации.</p><p>итак, что действительно легко <strong> настроить </strong>, <strong> зафиксировать </strong>, <strong> вернуть </strong> и <strong> поделиться изменениями с партнером </strong>, но объединение или объединение не должно быть простым работать в масштабе?</p><p>ключевым ограничением является то, что <strong> программные пары должны иметь возможность делиться работой друг с другом и только друг с другом </strong>, и <strong> пары меняются каждую неделю </strong>. наша инфраструктура - linux, solaris и windows с файловым сервером netapp. я сомневаюсь, что мой ит-персонал хочет создать группу unix для каждой пары студентов. есть ли более простое решение, которое я упустил?</p><p>(спасибо за принятый ответ, который побеждает других за отличную ссылку на <a href="http://www-cs-students.stanford.edu/~blynn/gitmagic/">git magic</a> , а также за полезные комментарии.)</p>

<p>я бы сказал, что git может соответствовать всем требованиям:</p><ul> <li>поскольку это распределенная система, вам не нужно иметь центральный репозиторий, репозитории существуют с исходным каталогом.</li> <li>легко создавать файлы патчей, которые можно отправлять по почте и применять.</li> <li>хотя может показаться, что использовать git сложно, основные идеи фиксации, объединения, добавления и удаления файлов не так сложны для изучения.</li> </ul><p>взгляните на этот сайт <a href="http://www-cs-students.stanford.edu/~blynn/gitmagic/ch01.html">git magic</a> или даже этот совет сайта <a href="http://gitready.com/">gitready</a> </p>

<p>второй выбор <a href="https://www.mercurial-scm.org/wiki/">mercurial</a> </p><p>преимущества</p><ul> <li>отличная документация.</li> <li>команда графического представления для отображения ветвления.</li> <li>кросс-платформенный.</li> <li>поставляется с графическим интерфейсом для всех платформ (tortoisehg, или thg).</li> <li>встроенный веб-сервер для просмотра проекта.</li> <li>может сохранить ваш проект на вашем флэш-накопителе. <ul> <li>работу можно сохранить, даже если только один из пары запомнил свой ноутбук. не то чтобы это когда-либо случалось.</li> </ul> </li> </ul><p>недостатки</p><ul> <li>должен установить python, если его еще нет. <ul> <li>это легко сделать, но это еще один шаг.</li> </ul> </li> <li>понимание различия между push/pull и update/commit. <ul> <li>(это общее для всех распределенных vcs).</li> </ul> </li> <li>различие между головами и кончиками.</li> <li>некоторые команды не доступны сразу; они должны быть явно включены. <ul> <li>(сообщество, как правило, считает это выгодным, так как все упрощается; некоторые не соглашаются).</li> </ul> </li> </ul>

<p>subversion прост в установке, на windows, linux и mac os x. я не знаю, в какой программе они программируют, но подключаемый модуль eclipse для subclipse довольно прост в установке и скрывает некоторые сложности хранилища.</p><p>а сложность репозитория? в любом случае это просто наличие папки с стволом, тегами и ветвями внутри каждого проекта. и у них может не быть много времени, но у них должно быть время, чтобы изучить svn (или подобное), потому что это умение хорошо смотрится в их резюме.</p>

<p>я бы посоветовал взглянуть на <a href="http://fossil-scm.org/">fossil</a> - это один исполняемый файл без зависимостей для запуска, он обрабатывает весь трафик через http, хранит все данные репозитория в одном файле, который может быть назван как угодно, и включает контроль версий вики, отслеживание ошибок и веб-сервер из коробки. о, и это полностью распределено.</p>

<p>я бы порекомендовал <a href="http://www.selenic.com/mercurial/wiki/">mercurial</a> (также называемый 'hg'). это распределенная vcs с открытым исходным кодом, и она не нуждается в центральном хранилище. использовать его изо дня в день легко. на официальном сайте достаточно документации. например, проверьте <a href="http://www.selenic.com/mercurial/wiki/index.cgi/quickstart">quickstart</a> .</p><p>решающим моментом для меня был отличный графический интерфейс для windows - <a href="http://tortoisehg.sourceforge.net/">tortoisehg</a> . кажется, это также поддерживается в linux (сам не пробовал). и, конечно же, для большинства версий linux существуют дистрибутивы командной строки.</p><p>конечно, это кажется легким с этой стороны, может быть, для занятых студентов концепция, преимущества и повседневная работа не будут такими легкими для привыкания. но, в конце концов, мгновенные коммиты, возможность вернуться к любой ревизии и автоматически создать новую ветку оттуда, а интеллектуальные diff/merge просто незаменимы.</p><p>надеюсь это поможет!</p>

<p>для реальной простоты использования для ваших студентов вы можете установить сервер svn с включенной автоматической фиксацией, предоставленной в общий доступ с помощью webdav. таким образом, они могут просто смонтировать свой каталог, используя webdav, и будут выполнять автоматическую фиксацию всякий раз, когда нажимают сохранить - доступ к истории легко осуществляется с помощью tortoisesvn, плагинов eclipse/visual studio или некоторых решений для веб-доступа, таких как viewvc. для ваших нужд ограничения доступа вы можете использовать встроенную аутентификацию subversion (смотрите <a href="http://svnbook.red-bean.com/nightly/en/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.auth">здесь</a> ), которая использует простой файл конфигурации для детального контроля доступа.</p><p>конфигурация стала намного проще (и теперь есть лучшая документация - взгляните на <a href="http://svnbook.red-bean.com/">книга svn</a> ), но она может быть несколько скопирована, если вам нужно несколько отдельных репозиториев с ограничениями доступа и веб-интерфейсом.</p><p>autocommit - это скорее решение для "моего офисного работника/начальника", который не имеет ни малейшего представления о том, что происходит внутри компьютера, и требует контроля версий для документов word. студенты, проходящие курс программирования, возможно, также должны научиться использовать приличный scm.</p><p>git и mercurial были бы хороши из-за их распределенной природы, что облегчает совместное использование - но у обоих инструментов нет интерфейсов с графическим интерфейсом, которые действительно просты в использовании (tortoisehg выглядит многообещающе, а gitk - очень хороший браузер для репозитория, но вашим учащимся все равно придется оберните их головы вокруг инструментов командной строки, чтобы в полной мере использовать инструменты). кроме того, концепция распределенных scm немного сложнее для понимания.</p><p>что касается профессионалов, вы можете использовать общедоступные решения хостинга, такие как <a href="https://github.com/">github</a> , и вам не придется беспокоиться о настройке сервера. это также делает обмен решениями действительно простым, но нарушает ваши требования "только друг с другом". но я полагаю, что вы все равно не сможете помешать им обмениваться кодом. по своему опыту работы с курсами я обнаружил, что просмотр кода и проверка его уникальности - единственный способ предотвратить копирование.</p><p>вы также можете использовать <a href="http://www.codicesoftware.com">plasticscm</a> , который имеет действительно приятные интерфейсы для многих ide и (по крайней мере, сайт требует) бесплатных лицензий для образовательных учреждений.</p>

<p>я не вижу причин для настройки системы контроля версий. ознакомьтесь с условиями использования, например, <a href="http://www.google.com/accounts/tos">код google</a> и погрузиться в.</p><p>один из студентов cs, и я использовал его в прошлом году, и он прекрасно работает, и единственным условием является подключение к интернету :-)</p>

<p>darcs - превосходная dvcs, особенно для небольших проектов, например, для классов cs. хотел бы я, чтобы меня познакомили с darcs или git в колледже, и я также благодарю вас за то, что вы представили его своим ученикам.</p><p>я использую git на ежедневной основе. это очень надежная dvcs, но, возможно, немного излишняя для небольших проектов.</p><p>выберите, какая из этих систем контроля версий действительно хороша.</p>

<p> <a href="http://bazaar-vcs.org/">bazaar</a> , <a href="http://www.selenic.com/mercurial/wiki/">mercurial</a> и <a href="http://git.or.cz/">git</a> звучат подходящими для вашего случая - тривиально создавать репозитории, и все, что ученикам нужно поделиться, это доступ для чтения на файловая система для репозиториев друг друга.</p>

<p><code>darcs send</code> тривиален для настройки - когда вы запускаете <code>darcs send <remote repo></code>, он ищет в <code>\_darcs/prefs/email</code> удаленного репозитория, чтобы решить, куда отправить сообщение. если там ничего нет, он предлагает пользователю вместо этого.</p><p>получатель патча просто сохраняет файл и запускает <code>darcs apply <patch file></code> в соответствующем репо.</p><p>таким образом, каждый студент может иметь свои собственные репозитории со своим адресом электронной почты в <code>\_darcs/prefs/email</code> и обмениваться патчами по электронной почте.</p>

<p>у меня был очень хороший опыт с <strong>базар</strong>. как и git/mercurial, он распространяется. он без сервера - вам не нужен демон, установленный на сервере, на котором размещен репозиторий, даже если вы обращаетесь к нему удаленно (т. е. он может работать как общий ресурс ftp/sftp).</p><p>распределенная vcs является наиболее гибкой. вы можете извлечь ветку из более традиционного "центрального" репозитория и получить все преимущества от возможности раскошелиться на свою маленькую разработку отдельно от центрального сервера и т.д., а затем, возможно, отодвинуть изменения обратно.</p><p>существуют инструменты импорта для других vcs, таких как subversion, хотя я не пробовал их.</p>

<p>что касается разрешений, внешняя служба не потребует времени от ит-персонала вашего университета.</p><p>например, <a href="http://bitbucket.org/">bitbucket</a> (с использованием mercurial) теперь разрешает неограниченное количество частных репо до 5 пользователей. я предполагаю, что каждая новая недельная пара студентов работает над новым проектом вместе, что означает, что они могут просто инициализировать репозиторий, добавить другого пользователя, и они уходят.</p><p>если они не работают над новым проектом каждую неделю, разрешения нужно будет удалить и добавить, и я рекомендую им иметь несколько репозиториев (по одному на учетную запись) в bitbucket, чтобы у каждого ученика был постоянный доступ. (в любом случае, это было бы хорошей идеей, но только для недельных проектов может быть проще иметь одну учетную запись студента, имеющую репо, а другую - с разрешения.)</p><p>что касается vcs, я полагаю, что mercurial лучше всего подойдет для ваших платформ - tortoisehg особенно полезен для новых пользователей, если они не знакомы (и у вас нет времени на их изучение) интерфейсов командной строки.</p><p>в зависимости от вашей ситуации, преимущество dvcs заключается в том, что их копия на сервере университета (если она есть) представляет собой полноценное репо. вам или тп может быть удобно иметь доступ, который должен быть проще в настройке и будет длиться весь семестр, а не меняться еженедельно.</p>

<p>настройка хранилища subversion тривиальна; я часто настраиваю его как одноразовую вещь для небольших проектов (таких как разработка кода для ответа на stack overflow!), и я сомневаюсь, что у любого другого, кто вообще мог бы изучить систему scm, возникли бы проблемы с этим.</p><pre><code>$ 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. </code></pre><p>тем не менее, обмен, безусловно, является проблемой. если ученики всегда работают вместе, когда работают одновременно, они могут использовать usb-накопитель, так как они могут просто отключить его и передавать его туда и обратно, когда нужно, и человек, который собирается программировать один позже, может просто держаться за это. это не совсем удобно, хотя.</p><p>другой вариант, поскольку все они работают в общей системе unix, - создать каталог с установленным, но не считанным битом для остальной части группы (или всех пользователей) и использовать имя репозитория s3cr3t для этого репо. тот, который знают только двое студентов. передача этого секретного имени профу позволит ему в любое время изучить репозитории ученика. ("итак, вы отправили задание вовремя, но система электронной почты потеряла его? позвольте мне просто посмотреть на время этого коммита…"). сценарий может помочь установить это.</p><p>на самом деле, чем больше я об этом думаю, тем больше мне это нравится. в определенном смысле это проще, чем git-решение, потому что ученику не нужно иметь дело с раздачей патчей (или забывать это делать), и ученику придется сталкиваться с слияниями до его фиксации, а не после хранилище (с последующей возможностью откладывать работу с этим на неопределенный срок).</p>

<p>обновление: шесть лет спустя я бы никогда не подумал об использовании subversion для чего-либо еще. git - это путь. так что, хотя я все еще думаю, что svn немного "проще", просто больше не стоит учить.</p><p>я использовал cvs, svn, bazaar и git (в таком порядке), и я должен сказать студентам, что svn - это путь. на самом деле, пока я руководил ta, мы внедрили svn вместо старого "сценария отправки", который представлял собой сценарий tar и электронной почты. labstaff установил репозиторий на основе apache svn-dav и, используя файл authz, ta и инструктор могли контролировать разрешения для каталогов для каждого студента и групповых проектов на очень детальном уровне, оставляя студентам очень простой путь к их первому коммиту. смотрите <a href="http://www.cs.utk.edu/~cs360/svn.html">мой учебник</a> (учетные данные вырваны последними ta .. хм ..)</p><p>что касается использования subversion без вмешательства системных администраторов, я делал это также в условиях группового проекта, где никто из членов моей группы никогда не использовал subversion прежде, и большинство из них совершали с очень небольшим беспорядком (все, кроме одного) , я также написал учебное пособие по настройке такого безопасного общего хранилища только с базовым ssh-доступом <a href="http://colin.mollenhour.com/2008/09/setup-an-svn-repo-on-a-school-server/">здесь</a> .</p><p>я определенно <strong> не согласен </strong> с тем, что git - лучшая vcs для новичков, у которых достаточно пустых взглядов при упоминании любой системы vcs, не говоря уже о mac-daddy- написанный самим линусом vcs king, git. это просто неправда, что git не более сложен, чем svn, и отсутствие только зрелых <em> n00b </em> инструментов является достаточной причиной, чтобы не использовать его в этом сценарии. я только начал использовать git для нового проекта, который я разрабатываю в netbeans, и уже столкнулся с серьезными ограничениями при интеграции netbeans. в течение одного семестра вы не собираетесь использовать какую-либо функциональность, которую svn не предоставляет, так что git - это излишество.</p>

<p>subversion в windows может быть столь же простым, как и установка tortoisesvn. для его использования есть некоторая кривая обучения (особенно, если вы никогда ранее не использовали элемент управления версиями), но вы могли бы помочь этому, посвятив ему половину урока и предоставив им слайды powerpoint для загрузки.</p><p>что касается централизации - я слышал о сайтах, которые предлагают бесплатный хостинг проектов svn. быстрый поиск google появился <a href="https://opensvn.csie.org/">эта</a> страница, но есть, конечно, больше.</p>

<p>если вы ищете что-то действительно удобное для настройки, то почему бы не воспользоваться бесплатным хостингом svn, вам не нужно ничего настраивать!</p><p>к сожалению, двое старших, которых все бы указали на то, что вы - assembla, unfuddle, отказались от поддержки своего бесплатного хостинга (или, по крайней мере, если вы хотите, чтобы они были приватными), но вы все равно можете использовать <a href="http://www.origo.ethz.ch/">origo</a> this дать вам как открытый, так и закрытый хостинг.</p><p>преимущество этого состоит в том, что вы можете владеть всеми проектами и следить за ними, и легко контролировать людей, которые имеют доступ, и вам не нужно беспокоиться о правильности создания репозиториев.</p><p>если вы идете по этому пути и хотите устранить сложность, то вы должны использовать svn-приложение с графическим интерфейсом, чтобы сделать обучение почти тривиальным (так как я сомневаюсь, что произойдет много слияний). я бы порекомендовал <a href="http://tortoisesvn.tigris.org/">tortoisesvn</a> , прямо в контекстное меню windows explorer.</p>

<p>я бы сказал, что вам лучше всего попытаться поработать с вашим ит-отделом, чтобы настроить систему/метод для ваших студентов, чтобы они легко создавали новые репозитории svn/cvs.</p><p>возможно, вы могли бы заставить отдел ит предоставить вам привилегии, необходимые для создания репозиториев для ваших студентов, даже если они не будут давать привилегии самим студентам. вероятно, вы могли бы довольно легко написать несколько сценариев для массового создания репозиториев из списков студентов в начале семестра.</p>

<p>rcs для linux.</p><p>я не нашел ничего проще, чем rcs для widows, но не все порты rcs работают хорошо, поэтому вы должны попробовать их, что делает его непростым. windows просто не проста для разработчиков. порт для windows из <a href="http://www.cs.purdue.edu/homes/trinkle/rcs/">http://www.cs.purdue.edu/homes/trinkle/rcs/</a> довольно хорош.</p>