Вы управляете версией отдельных приложений или всего проекта или обоих? - PullRequest
7 голосов
/ 09 июня 2009

ОК, так что у меня есть проект Django. Мне было интересно, должен ли я поместить каждое приложение в свой собственный репозиторий git, или лучше просто поместить весь проект в репозиторий git, или мне нужно иметь репозиторий git для каждого приложения, а также репозиторий git для проект?

Спасибо.

Ответы [ 6 ]

4 голосов
/ 09 июня 2009

Мне нравятся Тома или Алекса ответов, за исключением того, что за ними нет реального обоснования
(«проще иметь один репозиторий на группу разработчиков»?
«Значительное количество людей могут быть заинтересованы в извлечении (или отслеживании изменений) отдельных приложений»
почему?)

Прежде всего, один или несколько репозиториев - это решение администрирование на стороне сервера (в терминах ресурсов сервера).
SVN легко настраивает несколько репозиториев за одним сервером, тогда как ClearCase будет иметь собственный процесс "vob_server" на VOB, что означает: вам не нужно более ста VOB на сервер (Unix) (или более 20-30 на сервере Windows).
Git специфичен: установка репозитория обходится дешево, доступ к может быть легким (через простой общий путь) или может включать процесс (демон git). Последнее решение означает: «к большому количеству репозиториев обращаются напрямую извне». (к ним можно получить косвенный доступ через субмодули, на которые ссылается суперпроект)

Затем существует администрирование на стороне клиента : насколько сложной будет конфигурация рабочего пространства, когда задействованы одно или несколько хранилищ. Как клиент может ссылаться на правильную конфигурацию ? (список меток, необходимых для ссылки на правильные файлы).
SVN будет использовать внешние, git «подмодули», и в обоих случаях это добавляет сложности.
Вот почему Том ответ может быть правильным.

Наконец, есть аспект управления конфигурацией (на который есть ссылка Ответ Алекса ). Вы можете пометить часть репо , а не?
Если вы можете (как в SVN, где вы фактически делаете svn-копию части репо), это означает, что вы можете использовать компонентный подход , где несколько групп файлов имеют свой собственный жизненный цикл, и их собственные теги (устанавливаются в индивидуальном темпе).
Но в Git это невозможно: тег ссылается на коммит, который всегда относится к репозиторию all .
Это означает «системный» подход , когда вам все равно нужен только весь проект (в отличие от «просмотра отдельных приложений - я никогда не наблюдал его в реальной жизни» из Alex's). ответ ). Если это так (если вам нужна вся система в любом случае), это не важно.

Но для тех из нас, кто мыслит в терминах «независимых групп файлов», это означает, что репозиторий git фактически представляет отдельную группу файлов (со своим собственным ритмом в терминах эволюции и тегирования) с потенциально сверх- проект, ссылающийся на эти репозитории как подмодули.
Это не ваша повседневная установка, поэтому для независимых проектов я бы порекомендовал только несколько или одно Git-репо.
Но для более сложного взаимозависимого набора проектов ... вы должны понимать, что по самому проекту Git «хранилище» представляет собой согласованный набор файлов, которые должны развиваться с той же скоростью, что и все. И не «все» всегда может поместиться в один набор файлов (если «все» достаточно сложно). Следовательно, в этом случае потребуется несколько хранилищ.
И сложный набор взаимозависимых проектов тоже происходит в реальной жизни;)

4 голосов
/ 09 июня 2009

Это действительно зависит от того, будут ли эти повторно используемые приложения на самом деле повторно использоваться вне проекта или нет?

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

YAGNI - это больше, чем просто код.

2 голосов
/ 09 июня 2009

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

Безусловно, создайте красивую структуру папок В этом репозитории. Тем не менее, одна проверка из git (возможно, из подпапки) должна дать вам все файлы, необходимые для вашего тестового сайта (python, templates, css, jpegs ...), а затем вы просто скопируете httpd.conf и так далее в завершите установку.

1 голос
/ 25 августа 2013

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

Если вас беспокоит количество частных репозиториев, посмотрите на bitbucket (если вы решили сделать их открытыми, я советую github)

Есть хороший способ включить ваши собственные приложения в проект, даже используя теги версий:

Недавно я нашел способ сделать это с помощью тегов buildout и git. (Я использовал svn: externals для включения приложения, но недавно переключился с svn на git).

Сначала я попробовал mr.developer, но, не получая этого, нашел альтернативу для mr.developer:

Я обнаружил, что gp.vcsdevlop очень прост в использовании для этой цели.

см. https://pypi.python.org/pypi/gp.vcsdevelop

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

vcs-update = True
extensions =
    gp.vcsdevelop
    buildout-versions
develop-dir=./local_checkouts

vcs-extend-develop=git+git@bitbucket.org:<my bitbucket username>/<the  app I want to include>.git@0.1.38#egg=<the appname in django>

develop = .

в этом случае оно вытесняет мое приложение и клонирует его в тег версии 0.1.38 в проект в подразделе ./local_checkouts/ и развивает его при запуске bin / buildout

Редактировать: замечание 26 августа 2013

При использовании этого решения и редактировании в этой локальной проверке приложения, используемого в проекте. Я узнал это:

вы получите это предупреждение при попытке выполнить обычную команду 'git push origin master':

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

РЕДАКТИРОВАТЬ 28 августа 2013

О работе в local_checkouts для общих приложений, включенных в gp.vcsdevelop:

(и обработать предупреждение, рассмотренное в remakr выше)

git push origin + master, похоже, испортил историю коммитов для общего кода

Итак, способ работы в директории local_checkout такой:

перейти к локальной проверке (после корзины / сборки, так что проверка является основной):

cd localcheckouts/<shared appname>

Создайте новую ветку и перейдите к ней следующим образом:

использовать git checkout -b 'issue_nr1' (например, название ветви здесь названо в честь проблемы, над которой вы работаете)

и после того, как вы закончите работать в этой ветке, используйте: (после обычных git add и git commit)

git push origin issue_nr1

после тестирования и завершения объединить ветку обратно в мастер:

Первая проверка мастера:

git checkout master

обновление (возможно, только когда другие коммиты за это время)

git pull

и слияние с мастером (где вы сейчас находитесь):

git merge issue_nr1

и, наконец, нажмите это слияние:

git push origin master

(особенно благодаря этому упрощенному руководству по git: http://rogerdudler.github.io/git-guide/) и через некоторое время, чтобы очистить ветки, вы можете удалить эту ветку

git branch -d issue_nr1
1 голос
/ 09 июня 2009

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

Если они совершенно независимы и независимы, это действительно не имеет значения. Просто для здравомыслия, простоты сборки и удобства упаковки, я предпочитаю хранить весь проект в объединенном хранилище. Тем не менее, мы обычно работаем в очень маленьких командах. Таким образом, если общий код не используется, вопрос в том, какой метод наиболее удобен и эффективен для всех заинтересованных сторон.

1 голос
/ 09 июня 2009

Я не эксперт по git, но я не верю, что подходящая стратегия будет отличаться от стратегии для hg или даже, в этом случае, svn, так что я все равно собираюсь дать оценку в 2 цента ; -).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...