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

时间:2012-08-21 04:25:19

标签: git

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

3 个答案:

答案 0 :(得分:5)

Generate GitHub pages in a submodule中说明的一个非常好的技巧 Blind Gaenger (Bernd Jünger)是将分支声明为另一个分支的子模块!

因此,如果您的public内容位于其自己的孤儿分支中(例如gh-pages内容通常保存在自己的孤儿分支中),那么您可以:

  • public声明为master分支中主回购的子模块
  • gh-pages
  • 中声明与主要仓库的子模块相同的公开内容

因此,当您切换到public分支时,您在master分支中在子模块git submodule update中所做的任何修改都可以更新(gh-pages)。

我并不是说这是您当前设置的解决方案,因为它涉及从主内容中删除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 &lt;file&gt;..." 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月更新: Simpler GitHub Pages publishing 现在允许将您的网页文件保存在相同分支的子文件夹中(不再需要gh-pages) :

Now you can select a source in your repository settings and GitHub Pages will look for your content there.

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

答案 1 :(得分:1)

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

在大师的根目录中公开吗?

答案 2 :(得分:0)

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