使用git子树推送到项目根目录



我目前正在处理一个github页面项目,并将网站生成到名为dev的分支上名为dist的文件夹中。我想把dist的内容推送到master分支。我在谷歌上找到了github子树,我可以使用以下命令将dist目录推送到master

git subtree push --prefix dist origin master

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

这不是一件容易的事(除了做一些git filter-branch魔术)

如果你看过"为GitHub页面配置发布源",你应该直接在gh-pages分支中生成你的网站。

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

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

但是,对于用户页面

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

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

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

当您在dev分支中时,您可以将master分支声明为子模块(请参阅此处了解过程),因此它将作为"子文件夹"可见(例如"dist"子文件夹,但该子文件夹实际上是master上的同一Git repo)

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

最新更新