我正在使用django开发一个项目。我正在使用git来控制它的版本。
我想使用一些可重复使用的django应用程序,例如django-mailer为该项目。我打算分叉github repo并将其克隆到项目文件夹。但这将在另一个内部带来一个git repo。我也不确定是否需要分叉。
您如何处理类似的情况?任何最佳做法?
答案 0 :(得分:5)
使用virtualenv(甚至更好的virtualenvwrapper)加上pip plus requiremens.txt可以让你保持环境清洁。
requirement.txt允许您使用git repo作为应用程序源,甚至可以指定要使用的特定版本/标记/分支。
答案 1 :(得分:5)
如果你想在Git仓库中使用Git仓库,你应该考虑Git submodules。 Git子模块提供了一种方法,可以在您自己的内部包含一个单独的Git repo,并管理它在您的代码库中保留的版本。
基本工作流程如下:
git submodule add
命令添加所需的任何其他存储库。例如,git submodule add https://github.com/jtauber/django-mailer.git
会在您的项目中放置一个django-mailer
文件夹;如果需要,您可以像git clone
一样指定替代名称。git status
您要提交的内容。git commit -m "Your message"
以提交您已完成的工作。稍后,如果您需要更新子模块(git repo中的git repo),则直接导航到它并执行标准git pull origin master
。如果有更新,请返回到您的父项目,执行标准git add
和git 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基础知识的博客文章,如果感兴趣,我可以发送一个链接。