7

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

4

3 回答 3

5

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

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

  • 在分支中声明public为主仓库的子模块master
  • 声明与你的主仓库的子模块相同的公共gh-pages

public因此,您在分支中时在子模块中所做的任何修改都可以在切换到分支后master更新( ) !git submodule updategh-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 <file>..." to unstage)
#
#    new file:   .gitmodules
#    new file:   public
#
$ git commit -m "added public as submodule"
$ git push

您可以为您的gh-pages分支重复该步骤。

这将创建一个目录“ public”,在您结帐mastergh-pages.
在这两种情况下(两种结帐),agit submodule update都足以恢复public对子模块所做的最新演变。
和往常一样,当涉及到子模块时,一旦你在public目录中进行了修改,确保你在它的' public'分支上,提交并推送,然后返回上面的一个目录,并再次添加提交。


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

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

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

于 2012-08-21T05:56:49.223 回答
1
git checkout --orphan branch_name
git rm -rf .
git checkout master -- public

在 master 的根目录中是 public 吗?

于 2012-08-21T04:47:48.893 回答
0
cp -r public/* ./
git add .
git stash
git checkout gh-pages
git stash apply
于 2012-08-21T04:35:47.760 回答