【发布时间】:2012-08-16 10:03:21
【问题描述】:
我的master 分支中有一个名为public/ 的文件夹,将其内容复制到不同分支的根目录(例如gh-pages)的最简单方法是什么?
【问题讨论】:
标签: git
我的master 分支中有一个名为public/ 的文件夹,将其内容复制到不同分支的根目录(例如gh-pages)的最简单方法是什么?
【问题讨论】:
标签: git
Generate GitHub pages in a submodule 中说明了一个非常好的技巧 Blind Gaenger (Bernd Jünger) 是声明一个 branch 作为 another 分支的子模块!
因此,如果您的 public 内容位于其自己的孤立分支中(例如 gh-pages 内容通常保存在其自己的孤立分支中),那么您可以:
public 声明为master 分支中主repo 的子模块gh-pages 中声明与主仓库的子模块相同的公共
因此,当您在 master 分支中时,您在子模块 public 中所做的任何修改都可以在切换到 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”,在您结帐时显示master 或gh-pages。
在这两种情况下(都结帐),git submodule update 将足以取回在 public 子模块上完成的最新演变。
和往常一样,当涉及到子模块时,一旦你在public 目录中进行了修改,请确保你在它的'public' 分支上,提交并推送,然后返回上面的一个目录,然后再次添加提交。
2016 年 8 月更新:Simpler GitHub Pages publishing 现在允许将您的页面文件保存在 same 分支的子文件夹中(不再需要 gh-pages):
因此不再需要子模块技巧来使两种类型的内容通过同一分支可见。
【讨论】:
master 中进行了版本控制,您希望用于初始化gh-branch:stackoverflow.com/a/10591668/6309
git checkout --orphan branch_name
git rm -rf .
git checkout master -- public
在master的根目录下是public的吗?
【讨论】:
public 位于 master 的根目录中,但是 -r 似乎不是到 git checkout 的已知切换
cp -r public/* ./
git add .
git stash
git checkout gh-pages
git stash apply
【讨论】:
master 的分支吗?我需要完全清除该分支,并且只有 public/ 内容。