3

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

不幸的是,Github Pages 只能从 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
4

2 回答 2

3

也许在文件夹中添加一个额外的 repo dist,它将同步到 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
于 2019-05-19T07:19:01.140 回答
2

您可以通过让两个沙箱指向同一个 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 在对他的回答的评论中提到的弱点:masteranddev分支没有任何共同点,甚至它们的初始提交也没有。因此,这可能并不比拥有两个 repos 更好,但它确实将所有东西放在一起,我可以看到这很方便。

注意:你需要两个独立的沙箱,即使你只有一个远程仓库,否则不可能在同一个沙箱中同时拥有不同分支的最新视图。

于 2019-05-21T02:25:35.627 回答