你如何使用git管理django上的分叉可重用应用程序

时间:2011-03-22 13:16:43

标签: django git fork

我正在使用django开发一个项目。我正在使用git来控制它的版本。

我想使用一些可重复使用的django应用程序,例如django-mailer为该项目。我打算分叉github repo并将其克隆到项目文件夹。但这将在另一个内部带来一个git repo。我也不确定是否需要分叉。

您如何处理类似的情况?任何最佳做法?

3 个答案:

答案 0 :(得分:5)

使用virtualenv(甚至更好的virtualenvwrapper)加上pip plus requiremens.txt可以让你保持环境清洁。

requirement.txt允许您使用git repo作为应用程序源,甚至可以指定要使用的特定版本/标记/分支。

答案 1 :(得分:5)

如果你想在Git仓库中使用Git仓库,你应该考虑Git submodules。 Git子模块提供了一种方法,可以在您自己的内部包含一个单独的Git repo,并管理它在您的代码库中保留的版本。

基本工作流程如下:

  1. 在“父”项目中,使用git submodule add命令添加所需的任何其他存储库。例如,git submodule add https://github.com/jtauber/django-mailer.git会在您的项目中放置一个django-mailer文件夹;如果需要,您可以像git clone一样指定替代名称。
  2. 这会自动克隆repo,默认情况下会检出其主分支。它还会将此信息添加到您的Git repo索引中,因此您将看到是否运行git status您要提交的内容。
  3. 在您的“父”项目中(不在子模块内),运行git commit -m "Your message"以提交您已完成的工作。
  4. 稍后,如果您需要更新子模块(git repo中的git repo),则直接导航到它并执行标准git pull origin master。如果有更新,请返回到您的父项目,执行标准git addgit commit以提交您的回购依赖于较新版本的子模块的事实。

    现在,如果您稍后将项目克隆到其他位置,默认情况下子模块不会同时删除它们的代码;您的父项目只存储您的子模块应该在哪些提交,而不是它们的实际代码。在这种情况下,您需要使用以下命令初始化然后更新子模块:

    git submodule init
    git submodule update
    

    现在你的子模块也应该有他们的代码。

    所有这些都在Git community book中详细说明。还有一个很好的video on Blip.tv显示了git子模块的工作流程。

答案 2 :(得分:2)

我个人使用buildout + mr.developer,它可以下载git / mercurial repos并将这些应用程序添加到egg文件夹中。

只有当您想根据自己的需要更新该应用程序时才需要分叉,如果它的工作正常,则不需要分叉(只需克隆)。如果您不希望其他人更新该应用程序(它可能会崩溃),简单的复制/粘贴/或_clone_without_auto_updates / fork就可以完成这项工作。

要在存储库中处理存储库(开始?),对我来说最好的做法是使用像buildout这样的东西,也许结构会(它应该)完成这项工作。

P.S。我将发布关于buildout基础知识的博客文章,如果感兴趣,我可以发送一个链接。