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

什么';在git中将文件夹部署到分支的最简单方法是什么?,git,Git,我的母版分支中有一个名为public/的文件夹,将其内容复制到另一个分支的根目录(例如gh pages)最简单的方法是什么 cp -r public/* ./ git add . git stash git checkout gh-pages git stash apply 在master的根目录中是public吗?中演示了一个非常好的技巧 是将一个分支声明为另一个分支的子模块 因此,如果您的public内容在其自己的孤立分支中(例如gh页面内容通常保存在其自己的孤立分支中),那么您可以:

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

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

在master的根目录中是public吗?

中演示了一个非常好的技巧 是将一个分支声明为另一个分支的子模块

因此,如果您的
public
内容在其自己的孤立分支中(例如
gh页面
内容通常保存在其自己的孤立分支中),那么您可以:

  • public
    声明为
    master
    分支中主回购的子模块
  • gh页面
因此,当您在
master
分支中时,在子模块
public
中所做的任何修改都可以在切换到
gh页面
分支后更新(
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页面
分支重复该步骤

这将创建一个目录“
public
”,在您签出
master
gh页面时显示这两个目录
在这两种情况下(都是签出),一个
git子模块更新
就足以恢复在
public
子模块上完成的最新进展。
和往常一样,当涉及到子模块时,一旦您在
public
目录中进行了修改,请确保您位于其“
public
”分支上,提交并推送,然后返回上面的一个目录,再次添加提交


2016年8月更新:现在允许将页面文件保存在同一分支的子文件夹中(不再需要
gh页面
):


因此,不再需要使用子模块技巧使这两种类型的内容通过同一分支可见。

这会不会创建一个基于
master
的分支?我需要完全清除该分支,并且只包含
public/
内容。是的,
public
位于master的根目录中,但是
-r
似乎不是已知的切换到
git checkout
谢谢,我使用了基于您想法的组合。我确实喜欢子模块突破!感谢您的帮助。self注意:如果您希望使用
master
中的某些内容来初始化
gh分支
:A+用于更新此答案,请参阅和A。
$ 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