Как вы управляете вашими разветвленными многоразовыми приложениями на django с помощью git - PullRequest
2 голосов
/ 22 марта 2011

Я занимаюсь разработкой проекта с использованием django. Я использую git для управления версиями.

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

Как вы справляетесь с подобным сценарием? Какие-нибудь лучшие практики?

Ответы [ 3 ]

5 голосов
/ 22 марта 2011

Использование virtualenv (или, что еще лучше, virtualenvwrapper) плюс pip plus requiremens.txt позволит вам поддерживать чистоту среды.

require.txt позволяет использовать git repo в качестве источника приложения, и даже вы можете указать конкретную версию / тег / ветвь для использования.

5 голосов
/ 22 марта 2011

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

Основной рабочий процесс выглядит следующим образом:

  1. Внутри вашего«родительский» проект, добавьте любые другие репозитории, которые вы хотите, с помощью команды git submodule add.Например, git submodule add <a href="https://github.com/jtauber/django-mailer.git" rel="nofollow">https://github.com/jtauber/django-mailer.git</a> поместит папку django-mailer в ваш проект;при желании вы можете указать альтернативное имя, как вы делаете с git clone.
  2. Это автоматически клонирует репо и по умолчанию извлекает его основную ветвь.Он также добавляет эту информацию в индекс вашего репозитория Git, так что вы увидите, если вы запустите git status, что вам есть что зафиксировать.
  3. В вашем «родительском» проекте (не внутри подмодуля), запустите git commit -m "Your message" чтобы совершить то, что вы сделали.

Позже, если вам нужно обновить подмодуль (git-репо в вашем git-репо), перейдите к нему напрямую и выполните стандартный git pull origin master,Если есть обновления, вернитесь в ваш родительский проект, выполните стандартные git add и git commit, чтобы зафиксировать тот факт, что ваш репо зависит от более новой версии подмодуля.

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

git submodule init
git submodule update

Теперь ваши подмодули также должны иметь свой код.

Все это подробно описано в Git Community Book .На Blip.tv также есть хорошее видео, показывающее рабочий процесс подмодуля git.

2 голосов
/ 22 марта 2011

Я лично использую buildout + mr.developer, который может загружать репозитории git / mercurial и добавлять эти приложения в папку eggs.

Форкинг требуется только в том случае, если вы хотите обновить это приложение в соответствии с вашими потребностями, если оно работает нормально, разветвление не требуется (просто клонирование). Если вы не хотите, чтобы это приложение обновлялось другими пользователями (чтобы оно могло что-то аварийно завершить), просто выполните копирование / paste / or_clone_without_auto_updates / fork.

Для работы с репозиторием в репозитории (начало?) Для меня лучше всего использовать что-то вроде buildout, может быть, Fabric (хорошо бы) должен был выполнить эту работу.

P.S. Я опубликую статью в блоге об основах buildout, я мог бы прислать последнюю ссылку, если интересно.

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