我创建了一个JavaScript库的Git仓库。 该仓库还包含一个演示网站,该网站使用生成在dist/
文件夹中的捆绑库。 现在,我想将该网站部署到GitHub Pages。
但是,我在.gitignore
中有dist/
文件夹,并希望它保持被忽略的状态。
是否有一种方法可以自动生成应包含dist/
的gh-pages
分支,但使其不出现在master
分支中?
我创建了一个JavaScript库的Git仓库。 该仓库还包含一个演示网站,该网站使用生成在dist/
文件夹中的捆绑库。 现在,我想将该网站部署到GitHub Pages。
但是,我在.gitignore
中有dist/
文件夹,并希望它保持被忽略的状态。
是否有一种方法可以自动生成应包含dist/
的gh-pages
分支,但使其不出现在master
分支中?
提交此脚本,并在构建dist
后调用它:
#!/bin/sh
git commit -am "Save uncommited changes (WIP)"
git branch --delete --force gh-pages
git checkout --orphan gh-pages
git add -f dist
git commit -m "Rebuild GitHub pages"
git filter-branch -f --prune-empty --subdirectory-filter dist && git push -f origin gh-pages && git checkout -
我为此而使用它 ;-)
git checkout --orphan gh-pages
后,你可以添加 git reset
?否则,主分支上所有已跟踪的文件(不仅是 dist 文件夹中的)都将提交到 gh-pages 分支中(当然,最终的 git filter-branch ...
命令将清除 dist 文件夹外的内容,但我认为在孤立检出后执行 git reset
更符合惯例)。 - ErikMDgit checkout --orphan gh-pages
之后最好不要进行git reset
,因为如果在dist
文件夹和仓库根目录中都存在一个文件(例如README.md
),那么git filter-branch ...
命令将会引发错误:error: Untracked working tree file 'README.md' would be overwritten by merge.
- ErikMD#!/usr/bin/env bash
# Environment
BUILD_DIR="dist"
RELEASE_BRANCH="gh-pages"
VERSION="$(jq -r ".version" package.json)"
# Script
git fetch origin $RELEASE_BRANCH
git add -f $BUILD_DIR
tree=$(git write-tree --prefix=$BUILD_DIR)
git reset -- $BUILD_DIR
identifier=$(git describe --dirty --always)
commit=$(git commit-tree -p refs/remotes/origin/$RELEASE_BRANCH -m "Deploy $identifier as v$VERSION" $tree)
git update-ref refs/heads/$RELEASE_BRANCH $commit
git tag -a "v$VERSION" -m "Release tag for $VERSION" $commit
git push --follow-tags origin refs/heads/$RELEASE_BRANCH
总结一下您的情况:
master
dist/
文件夹gh-pages
分支在 GitHub Pages 上发布这个 dist/
文件夹。最简单的方法似乎是按照这个 gist 和 Yeoman 文档 中建议的工作流程进行操作。
但请注意,这依赖于高级命令 git subtree 并要求 dist/
文件夹在 master
上不被忽略和跟踪。
您可以按照GH Pages发布源的配置文档进行操作。
这是否解答了您的问题,或者您真的想将两个分支分开,并且在master
分支中没有dist/*
文件?
如果是后一种情况,问题就更加复杂(因为工作树中未跟踪或被忽略的文件可能会阻碍该过程...),但您可以看一下此项目, 这是一个基于Bash脚本的git subtree
解决方案的替代方案。
(注意:我没有测试过这个“git-directory-deploy”解决方案;它是我上面提到的gist中提出的建议。)
.gitignore
文件可能不同;代码和文档分支中的.gitignore
文件肯定是不同的。提示2:您可以添加并提交被忽略的文件:git add --force
。 - phd