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

Posted

技术标签:

【中文标题】将提交的文件拆分并推送到两个不同的分支【英文标题】:split and push committed files to two different branches 【发布时间】:2019-09-29 05:21:05 【问题描述】:

我想用 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

【问题讨论】:

你可以试试这样的***.com/a/28252200/1548376 【参考方案1】:

也许在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

【讨论】:

所以你认为只有一个 repo 是不可能的? 我想这是可能的,但可能需要跳过一些环节才能修改文件夹结构。这两个分支也没有任何共同之处。就好像它们无论如何都在单独的回购中。我不会推荐它。【参考方案2】:

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

这里我假设&lt;repo&gt; 已经存在于 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 分支没有任何共同之处,甚至它们的初始提交也没有。所以这可能并不比拥有两个 repos 更好,但它确实可以将所有东西放在一起,我可以看到这很方便。

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

【讨论】:

以上是关于将提交的文件拆分并推送到两个不同的分支的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在具有不同哈希的两个分支中有相同的提交

Git冲突处理测试

git 创建分支并推送到远程

将EBCDIC转换后的文件和pdf文件合并为一个文件并推送到大型机

git 创建分支并推送到远程分支

按文件类型拆分 git 分支或提交