将提交的文件拆分并推送到两个不同的分支

split and push committed files to two different branches

我想用 VuePress 创建一个网站并用 Github 页面部署它。幸运的是,VuePress 能够生成一个包含所有必需的 .html 文件的 dist 文件夹。此文件夹位于(从根目录开始)./docs/.vuepress/dist,因此我可以从该文件夹中获取所有文件并进行部署。

遗憾的是Github页面只能从master分支部署文件

https://help.github.com/en/articles/configuring-a-publishing-source-for-github-pages

并且无法为构建文件配置特定文件夹。我想到了以下解决方案:

在 master 分支旁边创建一个 "dev" 分支,并将 dist 文件夹中的文件保留在 master 分支中,并将项目放在 dev 分支中。

我开始学习在终端上使用 Git 并创建了一个 publish.sh 文件来提交并将项目推送到 Github存储库。

git add *
git commit -m "."
git push origin master

如何增强我的 shell 脚本以执行以下操作(如果可能)

git add *
git commit -m "."

git push -- all files -- origin dev

git push -- all files of the dist folder -- origin master

也许在 dist 文件夹中添加一个额外的 repo,它将同步到 Github Pages repo,只包含相关文件。

可以用:

$ cd dist
$ git init
$ git remote add origin <github-pages-repo>
$ git add .
$ git commit -m 'initial commit'
$ git push origin master

您可以通过让两个沙箱指向同一个 GitHub 存储库来做到这一点,一个是检出您的 dev 分支,您可以在其中修改文件,另一个是您的 master 分支签出,用于更新 dist 文件。

这里我假设 <repo> 已经存在于 GitHub,但它可能有也可能没有分支。

在编辑代码的地方设置 dev 分支:

git clone <repo> repo.dev
cd repo.dev
git checkout -b dev  # remove -b if origin/dev exists
# edit, commit, edit, commit, edit, commit
git push --set-upstream origin dev # remove --set-upstream if you removed -b above

设置您的 master 分支以发布您的代码:

cd ..
git clone <repo> repo.dist
cd repo.dist
git checkout -b master # remove -b if origin/master exists
# copy the .vuepress/dist directory into this sandbox as required for deployment
git add .
git commit -m 'initial dist'
git push --set-upstream origin master # remove --set-upstream if you removed -b above

现在,下次您想进行更改时:

cd ../repo.dev
# edit, commit, edit, commit, edit, commit
# make vuepress update repo.dist/.vuepress/dist,
# possibly by symlinking it from your repo.dev sandbox.
cd ../repo.dist
git commit -a -m'updated dist'
git push

现在,这个解决方案恰恰有@NitsanAvni 在对他的回答的评论中提到的弱点:masterdev 分支没有任何共同点,甚至没有它们的初始提交。所以这可能并不比拥有两个回购协议好,但它确实把东西放在一起,我认为这可能很方便。

注意:您需要两个单独的沙箱,即使您只有一个远程仓库,否则不可能在同一个沙箱中同时拥有不同分支的 up-to-date 视图。