我已经在我的 git 项目工作目录中的/docs
目录中从 javadoc 生成了文档。
我想通过将其提交到我的存储库的gh-pages
分支来github.io
提供此文档(这将使它自动在http://username.github.io/projectname
中可用)。
不过,不知道该怎么做。如果我使用git checkout
切换到gh-pages
,我的工作目录的所有内容都将切换到gh-pages
的内容,对吗?这将从中删除/docs
目录。
我可以在其他地方复制/docs
并在切换到 gh-pages 后将其复制到工作目录,但这是否意味着我每次想要更新文档时都必须检查复制/docs
、切换分支、再次复制、提交、切换回master
分支的手动过程?我认为有一个更好的解决方案,但我不知道它可能是什么。
你必须添加文档目录,git add - A,然后做"git commit -m "Test msg" --dry-run",检查,确保目录没有被排除在外 在 git 忽略中,
Git 状态还会检查正在跟踪的内容
然后需要推送,并设置要推送到的上游分支。
git add -A,添加项目目录中的所有内容
您可以使用 git worktree 命令来管理多个文件夹中的多个工作树(而无需多次克隆存储库):
- 一个用于您的
master
分支和通常的发展
一个用于 - 您的
gh-pages
分支,一个用于您生成的文档的内容
这样,当您从第一个工作树生成文档时,您可以请求在第二个工作树中生成该文档输出。生成后,转到第二个文件夹,添加、提交和推送。
可以手动创建树并提交对象,而不会影响工作目录或索引。例如
#!/bin/sh -e
. "$(git --exec-path)/git-sh-setup"
STAGE=$(mktemp -t gh-pages.XXXXXXXX)
trap 'rm -f "${STAGE}"' EXIT
GIT_INDEX_FILE=${STAGE} git read-tree --empty
git ls-files -s -z docs | GIT_INDEX_FILE=${STAGE} git update-index -z --index-info
TREE=$(GIT_INDEX_FILE=${STAGE} git write-tree)
COMMIT=$(git commit-tree -p refs/heads/gh-pages -m 'Updated docs' "${TREE}")
git update-ref refs/heads/gh-pages "${COMMIT}"
此脚本将向gh-pages
分支添加新提交,该分支包含docs
下的所有当前暂存文件(没有其他文件)。
我使用它(我放入在 master 中提交的脚本)来达到相同的结果,并且效果很好!
git commit -am "Save local changes"
git checkout -B gh-pages
git add -f docs
git commit -am "Rebuild website"
git filter-branch -f --prune-empty --subdirectory-filter docs && git push -f origin gh-pages && git checkout master