在git中,将文件夹部署到分支的最简单方式是什么?

8

我在master分支中有一个名为public/的文件夹,最简单的方法是将其内容复制到另一个分支(如gh-pages)的根目录中?


请查看我的相关答案写作 - krlmlr
3个回答

6
Generate GitHub pages in a submodule这篇文章中,Blind Gaenger (Bernd Jünger)介绍了一个非常棒的技巧,即将一个分支(branch)作为另一个分支的子模块(submodule)
因此,如果你的public内容位于自己的孤立分支(就像gh-pages的内容通常保存在它自己的孤立分支中一样),那么你可以:
  • master分支中将public声明为主repo的一个子模块
  • gh-pages中将相同的public声明为主repo的一个子模块
因此,在master分支中进行的任何更改都可以在切换到gh-pages分支后进行更新(git submodule update)。
我并不是说这是您当前设置的解决方案,因为它涉及从您的主要内容中删除public,并将其添加回其自己的分支中(也就是说,其他解决方案可能更加简单),但这是一种有趣的共享公共目录的方法。
cd yourRepo
git symbolic-ref HEAD refs/heads/public
rm .git/index
mv public ..
git clean -fdx
mv ../public/* .
git add .
git commit -m "public content in orphan branch public"
git push origin public

但是,一旦你创建了一个孤立分支来包含那些 (public) 内容,将该分支内容作为子模块添加到其他分支的技巧如下:

$ git checkout master
$ git submodule add -b public git@github.com:user/repo.git public
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    new file:   .gitmodules
#    new file:   public
#
$ git commit -m "added public as submodule"
$ git push

您可以重复这个步骤,将其应用到您的gh-pages分支上。

这将创建一个名为“public”的目录,当您切换到mastergh-pages时均会出现。
在这两种情况下(都是切换),执行git submodule update就足以获取public子模块的最新进展。
并且像处理子模块一样,在public目录中进行修改后,请确保您已经处于其“public”分支上,并进行提交和推送,然后返回上一级目录,并再次添加-提交。


2016年8月更新:更简单的 GitHub Pages 发布现在允许您将页面文件保存在同一分支的子文件夹中(不再需要gh-pages):

现在您可以在存储库设置中选择源,GitHub Pages 将在那里查找您的内容。

因此,子模块技巧不再是通过同一分支显示两种类型内容的必要条件。


谢谢,我根据你的想法使用了一些组合。我确实喜欢子模块拆分!感谢你的帮助。 - Steven Lu
自己注意:如果你已经在“master”分支中有一些版本化的内容,希望用它来初始化“gh-branch”,可以参考这个链接:https://dev59.com/eWkv5IYBdhLWcg3wdQdT#10591668 - VonC
1
A+ 保持此答案最新。 - Steven Lu

1
git checkout --orphan branch_name
git rm -rf .
git checkout master -- public

公共文件在主目录下吗?


是的,public 在主分支的根目录中,但是 -r 似乎不是 git checkout 的已知开关。 - Steven Lu

0
cp -r public/* ./
git add .
git stash
git checkout gh-pages
git stash apply

这不会基于 master 创建一个分支吗?我需要完全清除该分支,并仅保留 public/ 内容。 - Steven Lu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接