将提交的文件拆分并推送到两个不同的分支
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 在对他的回答的评论中提到的弱点:master
和 dev
分支没有任何共同点,甚至没有它们的初始提交。所以这可能并不比拥有两个回购协议好,但它确实把东西放在一起,我认为这可能很方便。
注意:您需要两个单独的沙箱,即使您只有一个远程仓库,否则不可能在同一个沙箱中同时拥有不同分支的 up-to-date 视图。
我想用 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 在对他的回答的评论中提到的弱点:master
和 dev
分支没有任何共同点,甚至没有它们的初始提交。所以这可能并不比拥有两个回购协议好,但它确实把东西放在一起,我认为这可能很方便。
注意:您需要两个单独的沙箱,即使您只有一个远程仓库,否则不可能在同一个沙箱中同时拥有不同分支的 up-to-date 视图。