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

push with git subtree to project root

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

git subtree push --prefix dist origin master

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

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

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

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

在这两种情况下,Git中心页面将呈现该内容。

然而,对于 User Page:

If your site is a User or Organization Page that has a repository named <username>.github.io or <orgname>.github.io, you cannot publish your site's source files from different locations.
User and Organization Pages that have this type of repository name are only published from the master branch.

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

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

当您在 dev 分支中时,您可以将 master 分支声明为子模块(参见 here for the procedure),这因此将显示为 "subfolder"(例如“dist”子文件夹,但该子文件夹实际上是您在 master 上的相同 Git 存储库)

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