【问题标题】:push with git subtree to project root使用 git subtree 推送到项目根目录
【发布时间】:2019-01-16 04:31:32
【问题描述】:

我目前正在开发一个 github pages 项目并将网站生成到名为 dist 的文件夹中,该文件夹位于名为 dev 的分支上。我想将 dist 的内容推送到 master 分支。谷歌搜索我找到了 github 子树,我可以使用以下命令将 dist 目录推送到 master

git subtree push --prefix dist origin master

问题是这会推送整个目录。所以master分支有一个名为dist的目录,包含dist/index.html等。相反,我想将dist的所有内容推送到master分支。这样主分支包含index.html 和所有其他内容。如何做到这一点?

【问题讨论】:

    标签: git github subtree


    【解决方案1】:

    这并不容易(除了做一些git filter-branch魔术)

    如果您查看“Configuring a publishing source for GitHub Pages”,您应该直接在gh-pages 分支中生成您的站点。

    或者,您可以留在master 分支中,但在docs/ 文件夹中生成而不是dist

    在这两种情况下,GitHub 页面都会呈现该内容。

    但是,对于User Page

    如果您的站点是用户或组织页面,其存储库名为 <username>.github.io<orgname>.github.io,则您无法从不同位置发布站点的源文件。
    具有此类型的用户和组织页面的存储库名称仅从 master 分支发布

    在这种情况下,反转您的工作流程:

    • dev 分支上开发您的网站,
    • master 分支上生成您的网站

    当您在dev 分支中时,您可以将master 分支声明为子模块(请参阅here for the procedure),因此它将作为“子文件夹”可见(对于例如一个“dist”子文件夹,除了这个子文件夹实际上是你在master上的同一个Git repo)

    像往常一样生成您的站点(在dist),进入dist,添加,提交和推送(该子文件夹是一个子模块,它将推送到其关联的分支:master
    然后回到你的项目repo文件夹(dist的父级,当前在dev分支),添加、提交和推送(记录子模块dist的新状态)

    【讨论】:

    • 我之前遇到了一些合并冲突的问题,并运行了命令 git push origin git subtree split --prefix docs master:master --force 奇怪地工作,因为它只是推送了文档的内容。但是,我真的不想每次都运行它。
    • @Marc 当然,但不推荐使用子树将一组生成的文件与 GitHub 页面一起发布:使用我在答案中提到的官方文档分支或文件夹之一。
    • 问题是如果你有一个用户页面你不能使用文件夹 och gh-pages 分支出于某种原因............
    • @Marc Indeed:“如果您的站点是用户或组织页面,其存储库名为 <username>.github.io<orgname>.github.io ,则您无法从不同位置发布站点的源文件。用户和组织页面具有此类存储库名称的仅从 master 分支发布。"
    • @Marc 我已经编辑了答案,提出了一个替代方案,可以保留您当前的工作方式(在dist 子文件夹中生成网站)
    猜你喜欢
    • 2012-04-22
    • 2011-10-22
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2019-08-19
    • 2010-09-21
    相关资源
    最近更新 更多