将忽略的 dist 文件夹部署到 GitHub 页面
Deploying ignored dist folder to GitHub Pages
我为 JavaScript 库创建了一个 Git 存储库。该存储库还包含一个使用捆绑库的演示网站,该库在 dist/
文件夹中生成。我现在想将该网站部署到 GitHub Pages。
但是,我的 .gitignore
中有 dist/
文件夹,我希望它保持忽略状态。
有没有办法自动生成 gh-pages
分支,它应该包含 dist/
,但不包含 master
分支?
总结您的背景:
- 您当前的分支是
master
- 您有一个
dist/
文件夹被忽略且未被跟踪
- 它包含可以静态提供的网站源代码
- 您想使用
gh-pages
分支在 GitHub 页面上发布此 dist/
文件夹。
执行此操作的最简单方法似乎是遵循此 gist 中建议的工作流程
以及 documentation of Yeoman.
但请注意,这依赖于高级命令 git subtree 并且要求 dist/
文件夹也不会被忽略并在 master
上被跟踪。
然后您可以按照有关 configuration of GH Pages' publishing source.
的文档进行操作
这是否解决了您的问题,或者您是否真的希望将两个分支分开并且 master
分支中没有 dist/*
文件?
在后一种情况下,问题更复杂(因为工作树中未跟踪或忽略的文件可能会阻碍进程...)但您可能想看看 this project ,它是基于 git subtree
的解决方案的替代方案,并且基于 Bash 脚本。
(注意:我没有测试这个 "git-directory-deploy" 解决方案;它在我上面提到的 gist 中被建议。)
提交此脚本并在构建您的 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 -
我用它 ;-)
或者,可以使用 Travis CI 或其他持续集成工具自动创建构建并将生成的文件部署到 gh-pages
分支:GitHub Pages Deployment
感谢 this blog post,我终于找到了一种方便的方法来 从另一个分支 上的 git 忽略的子文件夹中伪造提交。我个人用它在发布专用分支中发布一个内置的 npm 包。
使用这样的解决方案非常灵活,保留历史记录(无需强制推送),但涉及更多git 内部:
#!/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
我为 JavaScript 库创建了一个 Git 存储库。该存储库还包含一个使用捆绑库的演示网站,该库在 dist/
文件夹中生成。我现在想将该网站部署到 GitHub Pages。
但是,我的 .gitignore
中有 dist/
文件夹,我希望它保持忽略状态。
有没有办法自动生成 gh-pages
分支,它应该包含 dist/
,但不包含 master
分支?
总结您的背景:
- 您当前的分支是
master
- 您有一个
dist/
文件夹被忽略且未被跟踪 - 它包含可以静态提供的网站源代码
- 您想使用
gh-pages
分支在 GitHub 页面上发布此dist/
文件夹。
执行此操作的最简单方法似乎是遵循此 gist 中建议的工作流程 以及 documentation of Yeoman.
但请注意,这依赖于高级命令 git subtree 并且要求 dist/
文件夹也不会被忽略并在 master
上被跟踪。
然后您可以按照有关 configuration of GH Pages' publishing source.
的文档进行操作这是否解决了您的问题,或者您是否真的希望将两个分支分开并且 master
分支中没有 dist/*
文件?
在后一种情况下,问题更复杂(因为工作树中未跟踪或忽略的文件可能会阻碍进程...)但您可能想看看 this project ,它是基于 git subtree
的解决方案的替代方案,并且基于 Bash 脚本。
(注意:我没有测试这个 "git-directory-deploy" 解决方案;它在我上面提到的 gist 中被建议。)
提交此脚本并在构建您的 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 -
我用它 ;-)
或者,可以使用 Travis CI 或其他持续集成工具自动创建构建并将生成的文件部署到 gh-pages
分支:GitHub Pages Deployment
感谢 this blog post,我终于找到了一种方便的方法来 从另一个分支 上的 git 忽略的子文件夹中伪造提交。我个人用它在发布专用分支中发布一个内置的 npm 包。
使用这样的解决方案非常灵活,保留历史记录(无需强制推送),但涉及更多git 内部:
#!/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