Я встретил ту же проблему. Выбранное решение мне очень помогло, но я считаю необходимым добавить точность, чтобы сделать функциональный код вопроса: определить лямбда-функцию вне цикла. Кстати, значение по умолчанию не требуется.
foo = lambda d: lambda : self.root.change_directory(d)
for d in directorys:
self.command["cd " + d] = (foo(d))
я услышал, что необходимо проверить код (скопируйте существующий код?) и слияние это въезжает задним ходом (что происходит, если кто-то изменяет код, который Вы не изменили, и Вы изменяете что-то еще и объединяете его в? Конечно, его код не заменяется Вашей более старой версией.)
, Который является точно причиной управления версиями. Это действительно не был бы очень полезный инструмент, если бы все, что это сделало, было вслепую перезаписать код людей, не так ли? ;)
инструменты Управления исходным кодом поддерживают репозиторий со всей историей кодовой базы. В каждом изменении регистрируются как дельта, сохраняя , что изменилось . Это означает, что, если Вы и я и проверяем версию A, и я затем редактирую файл B, и Вы редактируете файл C, и мы регистрируемся, программное обеспечение управления исходным кодом сравнит различия и где никакие конфликты не существуют (как в этом случае), просто применяют оба изменения, и если конфликты происходят (если мы изменили те же строки кода), это отклоняет предпринятую регистрацию и говорит Вам, которые две версии файла имели конфликтующие изменения и просят, чтобы Вы объединили их вручную. (обычно это также может выделить изменения, таким образом, Вы видите визуально, что было изменено в каждой версии). Таким образом, это никогда не перезаписывает изменения.
Другие задачи это сделает для Вас:
существует два основных вида инструментов управления исходным кодом, централизованных и распределенных. Распределенный большая новая вещь , в то время как централизовано был с нами в течение многих десятилетий. Короче говоря, централизованное управление версиями просто означает, что существует один сервер главного репозитория, где все ответвления и история изменений для каждого хранятся. Этот сервер ответственен за слияние checkins и все это. Так каждый приводить к таймауту разработчика проверяет код или передает его репозиторию, это - сервер, против которого он синхронизирует. Распределенные просто угробили "основной сервер" аспект этого. Вместо этого каждый раз, когда Вы проверяете свой код, Вы создаете новый репозиторий локально на Вашей собственной машине в пути, к которому Вы проверяете код. Затем можно работать против этого локального репозитория, который делает весь одинаковый вещи, отслеживая историю изменений, объединяя изменения и так далее, и после того как Вы готовы, можно объединить репозиторий в, ну, в общем, любой другой репозиторий. Как правило, Вы, вероятно, захотите объединить его в некоторый "основной" repo, где весь код склеен, но можно также объединить его в локальный repo codeveloper, если, возможно, ему нужна та функция, Вы продолжали работать, но это еще не достаточно стабильно для входа в основной repo. Таким образом, это дает Вам намного больше гибкости и позволяет Вам поддерживать историю изменений своей локальной работы, не рискуя повреждением сборки в главном репозитории (в централизованной установке, что происходит, если Вы регистрируетесь в чем-то, что не компилирует? Вся команда завинчена, пока она не фиксируется. И если Вы не делаете , регистрируют его, Вы теряете преимущества управления версиями, препятствуя тому, чтобы Вы возвращались к предыдущей версии, если Вы узнаете представление новых ошибок)
И, наконец, каков лучший/самый легкий пример этого типа программного обеспечения?
гм, самым популярным является легко SVN, который старомодная централизованная система, но это - что-то вроде боли для установки imo. Требует специального программного обеспечения на сервере. Я лично довольно люблю Базар , который распределяется, и репозиторий сервера только требует доступа FTP и ничего иного на сервере.
Системы управления версиями не только для многочисленных команд! У отдельного разработчика, работающего над проектом хобби, есть много для получения от управления версиями их кода.
Большинство систем управления версиями центрируется вокруг понятия репозиторий , которым управляет система и никогда не затрагивают непосредственно. Когда Вы хотите отредактировать файл, Вы копируете его с репозитория, вносите Ваши изменения, затем передаете его обратно. Система управления версиями определяет различия между Вашей новой версией и старой версией, затем хранит Вашу новую версию в репозитории. Но, в случае, если Вы завинтили, более старые версии, идя полностью назад в начало, всегда восстановимы.
Большинство систем управления версиями достаточно умно для слияния изменений от нескольких разработчиков на том же файле, пока изменения не влияют на ту же часть файла. Конфликт слияния может произойти и вызвать головные боли, как бы то ни было.
Для начала работы я рекомендую, чтобы Вы установили что-то простое и свободное как Подверсия и прошли их очень подробный книга , которая имеет примеры и объяснения различных функций, большинство которых работает сравнительно в других системах управления версиями.
Eric Sink записал хорошее ПРАКТИЧЕСКОЕ РУКОВОДСТВО Управления исходным кодом .
Правовая оговорка: Eric Sink является принципалом SourceGear, который разрабатывает и продает несколько связанных с управлением исходным кодом инструментов (включая Хранилище SourceGear). Однако ПРАКТИЧЕСКОЕ РУКОВОДСТВО Управления исходным кодом является довольно нейтральной, сбалансированной рецензией.
Управление версиями и Управление исходным кодом являются тем же. Ну, главным образом. Управление версиями - то, что делает Управление исходным кодом. Это позволяет Вам иметь несколько версий файла. Думайте о нем как история пересмотра Википедии. Можно возвратиться, видеть то, что было сделано, сравните изменения и откатывайте к предыдущему коду.
программа обычно использует некоторый собственный механизм для слежения за этими файлами (так как они - просто текст, это обычно не жестко), и это отслеживает изменения, внесенные каждый раз, когда файл перепроверен в.
, При попытке объединить файл, въезжают задним ходом, это было изменено, большинство Систем управления исходным кодом покажет Вам разность файлов, и можно принять решение объединить его вручную или автоматически (в зависимости от того, насколько мощный Система управления исходным кодом).
самый легкий пример к Подверсия загрузки на Вашу Карту памяти , и установите черепаха SVN также.
Все системы управления версиями являются в основном тем же.. Ни один не больше трудно использовать, чем другой.. svn commit somefile
является столь же трудным как git commit somefile
.. Они просто вся работа немного по-другому.
единственная причина я начал использовать мерзавца, из-за github. До этого единственная причина я использовал SVN по darcs (который имеет действительно хороший интерфейс командной строки), был то, потому что я нашел хороший, свободный сервер SVN.
В настоящее время я рекомендовал бы мерзавцу. Не потому что это лучше, или потому что некоторый другой VCS хуже, но потому что существует много действительно хороших руководств и много действительно хороших проектов с помощью него.
Некоторые ресурсы можно найти полезным:
Однако это не важно, какую систему управления версиями Вы выбираете, действительно..
я нашел darcs действительно простой в использовании (и это - CLI, и понимающий, как darcs get
работал для перемещения "патчей" между репозиториями. страница "GettingStarted" darcs.net wiki была обо всем, что я должен был начать. Единственная проблема, которую я имел, была, я не мог найти хосты к darcs проектам...
SVN прост в использовании, но он централизовал архитектуру, действительно не соответствовал, как я использовал его, и вещи как ветвление (который тривиален в мерзавце), является трудным. Почти каждое действие требует общения с центральным сервером, и я не хотел выполнять локальный сервер SVN. Это также в основном не работает офлайн на ноутбуке, например.
я начал изучать SVN, главным образом благодаря [1 116] "введение в скринкаст Подверсии" . Затем, когда я обнаружил GitHub, я использовал git svn
для импорта моего основного репозитория SVN в мерзавца
Короче говоря: Найдите хорошее учебное руководство или ведите для некоторой системы управления версиями и версии все те случайные проекты и отрывки, которые Вы имеете. Это будет казаться немного бессмысленным, пока Вы случайно не внесете некоторое глупое изменение и сохраните/закроете Ваш сценарий или случайно удалите что-то.. Я в значительной степени использую VCS в качестве "суперотмены" (и для синхронизации кода между компьютерами)
Вот некоторые ответы на Ваши вопросы:
Управление исходным кодом является местом, где все совместно используют их код. Когда Вы хотите внести изменение, Вы "проверяете" код и изменяете его. В то время как Вам проверили его, никто больше не может внести изменения в него (таким образом препятствование тому, чтобы Вы изменили более старую версию файла). Когда Вы сделаны, Вы перепроверяете файл в управление исходным кодом, создавая новую версию (это - часть управления версиями управления исходным кодом). В любом моменте времени можно ресинхронизировать локальную копию кодовой базы с последними версиями всех файлов, держа Вас в курсе.
программное обеспечение Some, которое делает это, использует систему изменения. Это означает, что существует единственная копия файла, который, каждый раз, когда в этом регистрируются, сохранен как последовательность изменений в том файле. Другие системы хранят несколько копий файла и присоединяют информацию о версии к файлу.
, Если необходимо было изменить более старую версию файла и затем обнаружить, что Вы отделались от старой версии (программа управления исходным кодом должна уведомить Вас, когда Вы пытаетесь зарегистрироваться в своем коде), затем необходимо было бы объединить изменения с более новой версией. Некоторые инструменты управления исходным кодом идут с созданным в инструменте слияния.
Ответ на второй вопрос Вы отправили:
SVN требует централизованного репозитория, в то время как Мерзавец децентрализован, но большинство людей, которых я знаю, кто использует его, полагается на GitHub. Также Мерзавец используется для основной соединительной линии исходного кода ядра Linux, таким образом, его оптимизировал немного больше для очень больших кодовых баз. Также у Мерзавца, кажется, есть лучший дескриптор на ответвлении, объединяющемся затем pre-svn 1.5.x код.
Также смотрите на Переданная потоком бумага Строк , она описывает много лучших практик и антишаблонов управления версиями, я был бы также второй ссылка на статьи Erik Sinks упомянутый Michael Burr
Управление версиями не должно быть сложной установкой, ни чем-то, что только подходит для работы в среде команды, и это не только для кодирования проектов. Что-либо может войти в управление версиями. Это - просто вопрос не желания проиграть что-либо . Я присваиваю версию управлению фактически каждый файл, в котором я редактирую, включая все в моем доме / и много файлов конфигурации и т.д. / и в другом месте и я присваиваю версию всему, что я делаю для работы (в дополнение к управлению версиями, предусмотрел проекты). Это - такая часть того, что я делаю, я думаю, что это должно быть обеспечено файловой системой.
я рекомендую запуститься простой и практика с RCS. Хотя RCS сосет для команд, это очень хорошо для управления файлами локального пользователя только с единственным автором. Просто еще не интересуйтесь слияниями и ответвлениями. Учитесь думать о том, чтобы сохранить файл как значение сохранения версии. После того как Вы довольны RCS и принимаете преимущество сохранения изменений, можно переместиться до изучения SVN или Мерзавца или любого другого реальный система, которые намного более устойчивы и лучше удовлетворенный для сред команды.