{"title":"Django源代码库","version":"5.2","locale":"zh-hans","docname":"internals/git","url":"/zh-hans/5.2/internals/git/","canonical":"https://djangodocs.dev/zh-hans/5.2/internals/git/","summary":"当将Django应用程序部署到真实的生产环境中时，你几乎总是想使用“Django的正式打包发行版”。 不过，如果你想尝试即将发布的开发版本中的代码，或者想参与Django的开发，就需要克隆一个Django源代码库。 本文介绍了代码存储库的布局方式，以及如何使用和查找其中的内容。 高级概述 Link to this…","html":"<h1>Django源代码库<a class=\"heading-anchor\" href=\"#the-django-source-code-repository\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>当将Django应用程序部署到真实的生产环境中时，你几乎总是想使用“Django的正式打包发行版”。</p>\n<p>不过，如果你想尝试即将发布的开发版本中的代码，或者想参与Django的开发，就需要克隆一个Django源代码库。</p>\n<p>本文介绍了代码存储库的布局方式，以及如何使用和查找其中的内容。</p>\n<section id=\"high-level-overview\">\n<h2>高级概述<a class=\"heading-anchor\" href=\"#high-level-overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django 源代码仓库使用 <a class=\"reference external\" href=\"https://git-scm.com/\">Git</a> 跟踪代码随时间的变化，因此您需要在计算机上安装 Git 客户端（一个名为 <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span></code> 的程序），并熟悉 Git 的基本工作原理。</p>\n<p>Git 的网站提供了各种操作系统的下载。该网站还包含大量的 <a class=\"reference external\" href=\"https://git-scm.com/doc\">文档</a>。</p>\n<p>Django 的 Git 仓库位于在线地址 <a class=\"reference external\" href=\"https://github.com/django/django\">github.com/django/django</a>。它包含了所有 Django 版本的完整源代码，您可以在线浏览。</p>\n<p>Git 仓库包含了几个 <a class=\"reference external\" href=\"https://github.com/django/django/branches\">分支</a> :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">main</span></code> 包含了即将成为下一个打包发布版本的 Django 的主要开发代码。这是大多数开发活动的焦点所在。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B.x</span></code> 是进行发布准备工作的分支。它们也用于在功能版本的初始发布后根据需要进行的错误修复和安全发布。</p></li>\n</ul>\n<p>Git 仓库也包含 <a class=\"reference external\" href=\"https://github.com/django/django/tags\">tags</a> 。这些是 Django 从 1.0 版本开始打包发行的确切版本。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">archive/</span></code> 前缀下还存在许多标签，用于 <a class=\"reference internal\" href=\"#archived-feature-development-work\"><span class=\"std std-ref\">已归档的工作</span></a>。</p>\n<p><a class=\"reference external\" href=\"https://www.djangoproject.com/\">Djangoproject.com</a> 网站的源代码可以在 <a class=\"reference external\" href=\"https://github.com/django/djangoproject.com\">github.com/django/djangoproject.com</a> 上找到。</p>\n</section>\n<section id=\"the-main-branch\">\n<h2>主要分支<a class=\"heading-anchor\" href=\"#the-main-branch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>如果你想尝试下一版 Django 的开发代码，或者想通过修复错误或开发新功能来贡献于 Django，你需要从主要分支获取代码。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>在 2021 年 3 月之前，主要分支被称为 <code class=\"docutils literal notranslate\"><span class=\"pre\">master</span></code>。</p>\n</aside>\n<p>请注意，这将获取 <em>完整</em> 的 Django：除了包含 Python 代码的顶级 <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> 模块外，你还将获得 Django 的文档、测试套件、打包脚本和其他各种组件的副本。Django 的代码将在你的克隆中作为一个名为 <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> 的目录存在。</p>\n<p>要尝试使用你自己的应用程序来运行开发中的代码，请将包含克隆的目录放在你的 Python 导入路径上。然后，<code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> 语句寻找 Django 的时候会在你的克隆中找到 <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> 模块。</p>\n<p>如果你打算在 Django 的代码上工作（比如修复错误或开发新功能），你可以停在这里阅读，然后转到 <a class=\"reference internal\" href=\"/zh-hans/5.2/internals/contributing/\"><span class=\"doc\">Django 贡献文档</span></a>，其中包括首选的编码风格以及如何生成和提交补丁等内容。</p>\n</section>\n<section id=\"stable-branches\">\n<h2>稳定分支<a class=\"heading-anchor\" href=\"#stable-branches\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django 使用分支来准备 Django 的发布。每个主要发布系列都有自己的稳定分支。</p>\n<p>这些分支可以在仓库中找到，以 <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B.x</span></code> 分支的形式存在，并将在第一个 alpha 版本被标记后创建。</p>\n<p>例如，在 <em>Django 1.5 alpha 1</em> 被标记后不久，分支 <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/1.5.x</span></code> 被创建，所有进一步准备代码以发布最终版本 1.5 的工作都在那里进行。</p>\n<p>这些分支还提供 bug 修复和安全支持，如 <span class=\"xref std std-ref\">支持的版本策略</span> 中所描述的那样。</p>\n<p>例如，在发布 Django 1.5 后，分支 <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/1.5.x</span></code> 只接收安全性和关键稳定性 bug 的修复，最终以 Django 1.5.1 等版本发布。而 <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/1.4.x</span></code> 只接收安全性和数据丢失问题的修复，而 <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/1.3.x</span></code> 则不再接收任何更新。</p>\n<aside class=\"admonition-historical-information admonition\">\n<p class=\"admonition-title\">历史信息</p>\n<p>这个处理 <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B.x</span></code> 分支的策略是从 Django 1.5 发布周期开始采用的。</p>\n<p>以前，这些分支直到发布后才会创建，而稳定工作是在主仓库分支上进行的。因此，在最终发布之前，无法提交关于下一版 Django 的新功能开发工作。</p>\n<p>例如，在 Django 1.3 发布不久之后，分支 <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/1.3.x</span></code> 被创建。该版本的官方支持已经到期，因此不再由 Django 项目直接维护。然而，所有类似命名的分支仍然存在，有兴趣的社区成员偶尔会使用它们来提供旧版 Django 的非官方支持。</p>\n</aside>\n</section>\n<section id=\"id1\">\n<h2>标签(Tags)<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>每个 Django 发布版本都会被发布者打上标签并签名。</p>\n<p>这些标签可以在 GitHub 的 <a class=\"reference external\" href=\"https://github.com/django/django/tags\">tags</a> 页面上找到。</p>\n<section id=\"archived-feature-development-work\">\n<span id=\"id3\"></span><h3>已归档的特性开发工作<a class=\"heading-anchor\" href=\"#archived-feature-development-work\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition-historical-information admonition\">\n<p class=\"admonition-title\">历史信息</p>\n<p>自从 Django 在 2012 年转向 Git 后，任何人都可以克隆仓库并创建自己的分支，从而减轻了在源代码仓库中创建官方分支的需要。</p>\n<p>如果您正在探索存储库的历史，例如，如果您试图了解一些功能是如何设计的，则下面的部分非常有用。</p>\n</aside>\n<p>由于特性开发分支的性质，它们往往是临时的。有些特性分支会产生成功的功能，这些功能会合并到 Django 的主分支中，成为官方版本的一部分，但也有些不会；无论哪种情况，总会有一个时间点，分支不再由任何开发人员积极维护。在这个时候，分支被视为已关闭。</p>\n<p>Django 曾经使用 Subversion 版本控制系统进行维护，但这个系统没有标准的方法来表示已关闭的分支。作为一种解决方法，不再维护的 Django 分支被移动到了 <code class=\"docutils literal notranslate\"><span class=\"pre\">attic</span></code> 中。</p>\n<p>在 <code class=\"docutils literal notranslate\"><span class=\"pre\">archive/</span></code> 前缀下存在许多标签，以维护对这些以及其他具有历史兴趣的工作的引用。</p>\n<p>以下在 <code class=\"docutils literal notranslate\"><span class=\"pre\">archive/attic/</span></code> 前缀下的标签引用了最终成为 Django 本身一部分的分支的末尾：</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">boulder-oracle-sprint</span></code>: 为 Django 的对象关系映射器添加了对 Oracle 数据库的支持。这个功能自 1.0 版本以来一直是 Django 的一部分。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">gis</span></code>: 为 Django 的对象关系映射器添加了对地理/空间查询的支持。这已经是自 1.0 版本以来的 Django 的一部分，作为捆绑的应用程序 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.gis</span></code>。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">i18n</span></code>: 为 Django 添加了 <a class=\"reference internal\" href=\"/zh-hans/5.2/topics/i18n/\"><span class=\"doc\">国际化支持</span></a>。这已经是自 0.90 版本以来的 Django 的一部分。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">magic-removal</span></code>:对Django的对象关系映射器的内部和公共api进行了重大重构。从0.95版本开始，Django就加入了这个功能。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">multi-auth</span></code>: 对 <a class=\"reference internal\" href=\"/zh-hans/5.2/topics/auth/\"><span class=\"doc\">Django 捆绑的身份验证框架</span></a> 进行了重构，添加了对 <a class=\"reference internal\" href=\"/zh-hans/5.2/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">身份验证后端</span></a> 的支持。这已经是自 0.95 版本以来的 Django 的一部分。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">new-admin</span></code>: 对 <a class=\"reference internal\" href=\"/zh-hans/5.2/ref/contrib/admin/\"><span class=\"doc\">Django 捆绑的管理应用程序</span></a> 进行了重构。这从 Django 0.91 版本开始成为 Django 的一部分，但在 Django 1.0 版本发布之前被另一个重构所取代。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">newforms-admin</span></code>: Django 捆绑的管理应用程序的第二次重构。这从 Django 1.0 版本开始成为 Django 的一部分，并且是当前版本的 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> 的基础。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">queryset-refactor</span></code>: Django 对象关系映射器内部的重构。这从 Django 1.0 版本开始成为 Django 的一部分。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">unicode</span></code>: Django 内部的重构，以在 Django 和 Django 应用程序的大多数地方一致使用基于 Unicode 的字符串。这从 Django 1.0 版本开始成为 Django 的一部分。</p></li>\n</ul>\n<p>此外，在 <code class=\"docutils literal notranslate\"><span class=\"pre\">archive/attic/</span></code> 前缀下的以下标签引用了已关闭的分支的末尾，但其代码从未合并到 Django 中，它们旨在实现的功能也从未完成：</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">full-history</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">generic-auth</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">multiple-db-support</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">per-object-permissions</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">schema-evolution</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">schema-evolution-ng</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">search-api</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sqlalchemy</span></code></p></li>\n</ul>\n<p>最后，在 <code class=\"docutils literal notranslate\"><span class=\"pre\">archive/</span></code> 前缀下，仓库包含了 <code class=\"docutils literal notranslate\"><span class=\"pre\">soc20XX/&lt;project&gt;</span></code> 标签，引用了在 2009 年和 2010 年 Google 夏季编程活动期间为 Django 工作的学生使用的分支末尾。</p>\n</section>\n</section>","rootId":"the-django-source-code-repository","toc":[{"title":"高级概述","anchor":"high-level-overview","children":[]},{"title":"主要分支","anchor":"the-main-branch","children":[]},{"title":"稳定分支","anchor":"stable-branches","children":[]},{"title":"标签(Tags)","anchor":"id1","children":[{"title":"已归档的特性开发工作","anchor":"archived-feature-development-work","children":[]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Django内部","url":"/zh-hans/5.2/internals/"}],"prev":{"docname":"internals/deprecation","title":"Django废弃时间表","url":"/zh-hans/5.2/internals/deprecation/"},"next":{"docname":"internals/howto-release-django","title":"How to release Django","url":"/zh-hans/5.2/internals/howto-release-django/"},"formats":{"html":"/zh-hans/5.2/internals/git/","markdown":"/zh-hans/5.2/internals/git.md","json":"/zh-hans/5.2/internals/git.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/internals/git.txt","official":"https://docs.djangoproject.com/zh-hans/5.2/internals/git/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}