我该如何将一个特定的目录提交到与工作分支不同的分支上?

4

我有一个简单的静态网站,基于HTML 5 boilerplate,整个项目都在github存储库中。项目结构大致如下:

build
css    
img
js
publish    # this directory isn't in source control!

...

index.html & other files

基本上我所做的是运行一个构建脚本(来自HTML 5样板),编译所有HTML/CSS/JS到publish目录,该目录不在git仓库中
现在我想做的是利用GitHub pages,并能够使用publish目录输出作为GitHub页面。
GitHub页面的工作方式是,您创建一个干净的单独分支命名为gh-pages,其中包含最终内容。我想要做的是,能够按需提交当前的publish目录到gh-pages分支中,但我还想将它保留在主要的.gitignore文件中,以便它不会被推送到源代码库中。
我想这样做是为了预览项目的当前状态。
简而言之:我需要将一个目录提交到一个单独的分支,使它的根目录与该目录的内容相同。在gh-pages分支上,“publish/css”将变成“css”。

请查看我的相关答案文章 - krlmlr
1个回答

3

由于.gitignore也是有版本控制的,所以不要将publish/目录放在gh-pages分支的.gitignore文件中。然后,您只需要这样做:

ORIG_HEAD="$(git name-rev --name-only HEAD)" git checkout gh-pages && mv publish/* . && git commit -am "automatic update" && git checkout "$ORIG_HEAD"

如果你想要在根目录而不是子目录中进行操作,这会变得有些棘手。另一个选择是在不同的目录中维护相同仓库的克隆版本,该版本始终位于 gh-pages 分支上。你可以让脚本直接将文件写入该目录而不是 publish/,然后在该克隆版本中提交。


我想我可以将 publish/ 本身作为一个仓库,并直接从那里提交和推送,这样会使事情变得更简单。 - Jakub Arnold
确实可以。只要它们不在同一个分支上,将存储库作为其自身的子模块应该不会有任何问题。 - Amber

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