Легкое управление версиями для маленьких проектов (прототипы, демонстрации, и один-offs) [закрытый]

Я использую +, когда знаю, сколько строк будет объединено - но что, если у вас просто есть массив? В этом случае вы не будете знать, сколько раз применить +, поэтому у вас будет для вызова метода (или зацикливания себя, что ужасно).

Я не помню, чтобы звонил string.Concat очень часто - это определенная редкость.

Как говорит Гуффа, + в любом случае компилируется в вызовы к string.Concat - стоит знать, что string на самом деле не имеет оператора +, что может быть причиной путаницы если вы когда-нибудь попробуете использовать его в отражении!

Одно из преимуществ + состоит в том, что если все аргументы являются константными выражениями, компилятор выполнит конкатенацию за вас, так что вам не нужно делать это во время исполнения. Такое небольшое преимущество в производительности не будет значительным в большинстве кода, но всегда приятно, когда код, который я считаю наиболее читабельным , также имеет преимущество в производительности:)

7
задан Kara 12 December 2013 в 06:35
поделиться

9 ответов

Distributed Version Control Systems (Mercurial, Bazaar, Git) are nice in that they can be completely self-contained in a single directory (.hg, .bzr, .git) in the top of the working copy, where Subversion uses a separate repository directory, in addition to .svn directories in every directory of your working copy.

Mercurial and Subversion are probably the easiest to use on Windows, with TortoiseHG and TortoiseSVN; the Bazaar GUIs have also been improving. Apparently there is also TortoiseGit, though I haven't tried it. If you like the command line, Easy Git seems to be a bit nicer to use than the standard git commands.

I'd like to address point 4, common libraries, in more detail. Unfortunately I don't think any of them will be too easy to use, since I don't think they're directly supported by GUIs (I could be wrong). The only one of these I've actually used in practice is Subversion Externals.

Subversion is reasonably good at this job; you can use Externals (see the chapter in the SVN book), but to associate versions of a project with versions of a library you need to "pin" the library revision in the externals definition (which is itself versioned, as a property of the directory).

Mercurial supports something similar, but both solutions seem a bit immature: subrepository support built-in to the latest version and the "Forest Extension".

Git has "submodule" support.

I haven't seen anything like sub-respositories or sub-modules for Bazaar, unfortunately.

5
ответ дан 6 December 2019 в 06:50
поделиться

Любое из распределенных решений управления исходным кодом, похоже, соответствует вашим требованиям. Взгляните на bazaar , git или mercurial (уже упоминалось выше). Лично я использую bazaar с v0.92 и не имею никаких жалоб.

Edit: Черт возьми, посмотрев его еще раз, я почти уверен, что любое из этих трех решений обрабатывает все 6 запрошенных вами функций.

7
ответ дан 6 December 2019 в 06:50
поделиться

Как уже отмечали люди, почти любой DVCS, вероятно, будет вам хорошо служить для этого. Я подумал, что упомяну Monotone , поскольку он еще не упоминался в ветке. Он использует один двоичный файл (mtn.exe) и хранит все как файл базы данных SQLite, ничего в вашем фактическом рабочем пространстве, кроме каталога _MTN на верхнем уровне (и .mtn-ignore, если вы хотите игнорировать файлы). Чтобы дать вам быстрое представление, я поместил команды mtn, показывающие, как выполнять ваш список желаний:

  1. Позвольте мне мгновенно взглянуть на любой файл в более старой версии моего проекта. mtn cat -rt: 1.8.0 readme.txt

    • Сохраните то, что у меня есть сейчас, как версию 2.5 mtn tag $(mtn automate heads) 2.5

    • Store my data efficiently. Monotone uses xdelta to only save the diffs, and zlib to compress the deltas (and the first version of each file, for which of course there is no delta).

    • Let me keep my common library code files in a single location on my hard drive so that all my current projects can benefit from any bug fixes or improvements I make to my library. Montone has explicit support for this; quoting the manual "The purpose of merge_into_dir is to permit a project to contain another project in such a way that propagate can be used to keep the contained project up-to-date. It is meant to replace the use of nested checkouts in many circumstances."

    • However, do let me go back in time to any version of any project and see what the source code (including the library code) looked like at the time that version was released. mtn up -r t:1.8.0

    • Please don't make me store a special database server on my machine Насколько вам известно, SQLite может быть одним файлом на вашем диске, в котором Monotone хранит что-то. Нет никакого лишнего процесса или сумасшествия при запуске (SQLite встроен и работает непосредственно в том же процессе, что и остальная часть Monotone) , и вы можете смело игнорировать тот факт, что вы можете запрашивать и управлять своим репозиторием Monotone, используя стандартные инструменты, такие как программа командной строки sqlite или скрипты Python или Ruby.

0
ответ дан 6 December 2019 в 06:50
поделиться

Я бы сказал, что Mercurial вместе с TortoiseHg будут делать то, что вы хотите. Конечно, поскольку вам, кажется, не требуется много, подрывная деятельность с TortoiseSvn должна служить одинаково хорошо, если вы работаете только в одиночку, хотя я думаю, что Mercurial лучше для сотрудничества.

3
ответ дан 6 December 2019 в 06:50
поделиться

Mercurial:

  1. hg cat --rev 2.5 filename (или «Аннотировать файлы» в TortoiseHg)
  2. hg commit; hg tag 2.5
  3. Mercurial хранит (сжатые) различия (и «ключевые кадры», чтобы избежать необходимости применять десять тысяч различий подряд для поиска версии файла). Это очень эффективно, если вы не работаете с большими двоичными файлами.
  4. Свяжите библиотеку символом во всех проектах?
  5. Хорошо, теперь, когда я прочитал этот пункт, я думаю, что Mercurial Subrepos ближе к что ты хочешь. Сделайте свою библиотеку репозиторием, а затем добавьте ее в качестве подрепозитория в каждый из ваших проектов. Когда ваша библиотека обновляется, вам, к сожалению, потребуется hg pull в подрепозиториях. Но затем, когда вы делаете коммит в проекте, Mercurial запишет состояние репозитория библиотеки, так что когда вы позже проверите эту версию, чтобы увидеть, как она выглядела, вы получите правильную версию кода библиотеки.
  6. Mercurial не делает этого. не делает этого, данные хранятся в файлах.
2
ответ дан 6 December 2019 в 06:50
поделиться

Try GIT. Lots of positive comments about it on the Web.

-2
ответ дан 6 December 2019 в 06:50
поделиться

Для ваших требований я бы рекомендовал subversion .

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

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

На самом деле, если я единственный участник проекта, я никогда не хочу проверять, выписываться. Единственное, что я хочу сделать, это сказать: «Пожалуйста, сохраните то, что у меня есть, как версию 2.5».

Это делается с помощью svn copy. svn: //localhost/tags/2.5 .

Эффективно хранить мои данные. Если в моем проекте 100 Мб медиа, я не Я не хочу, чтобы это копировалось с каждой новой версией, которую я выпускаю. Копируйте только те изменения.

Предоставлено subversion.

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

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

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

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

Вам нужно только запустить svnserve , чтобы начать локальный сервер. Если вы работаете только на одной машине, вы можете даже обойтись без этого и напрямую использовать свой репозиторий.

4
ответ дан 6 December 2019 в 06:50
поделиться

Я думаю, новый продукт Fog Creek, Kiln , поможет вам довольно близко. В ответ на ваши конкретные вопросы:

  1. Это легко сделать через веб-интерфейс - вам не нужно прикасаться к вашей локальной копии или обновлению. Просто найдите нужный файл, щелкните версию, которую хотите просмотреть, и ваш код будет перед вами.
  2. Я не уверен, что вы можете делать что-то точно , например «Сохраните это как версия 2.5 ", но вы можете добавить уникальные теги к ревизиям, которые позволят вам идентифицировать специальную ревизию (где "особый" может означать все, что вам угодно).
  3. Mercurial уже отлично справляется с этим (который Kiln использует в back end), поэтому в этом отношении не должно быть никаких проблем.
  4. Создавая разные репозитории, вы можете легко получить один центральный «основной» раздел, который согласован для разных проектов (хотя я не совсем уверен, что это это то, о чем вы говорите).
  5. Я думаю, что большинство систем контроля версий позволяют вам это делать ...
  6. Kiln размещен на хосте, поэтому производительность вашей локальной машины не снижается. Код, который вы передаете в систему, хранится в безопасности .

И что самое важное, Kiln предоставляется бесплатно для двух лицензий в виде их Student and Startup Edition (которая также дает вам бесплатную копию FogBugz).

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

(Полное раскрытие информации: я стажер, в настоящее время работаю в Fog Creek)

5
ответ дан 6 December 2019 в 06:50
поделиться

Взгляните на fossil, единственный exe-файл. http://www.fossil-scm.org

2
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: