对于github.io上的页面,通常在主存储库上使用名为gh-pages
的分支来发布与特定存储库关联的网站。
在我当前的项目中,我执行以下步骤来更新github.io上托管的文档。
html
目录移动到临时目录。gh-pages
分行。git commit
和git push
gh-pages
分支。master
分行。 是否可以一步将html
目录的内容提交到gh-pages
分支?
请注意,我不希望将html
目录的内容添加到master
分支,因为它是生成的内容而不是源。
我已经查看了this question和this question,但他们似乎无法解决此问题。
这实际上并不是this question的重复,因为这个问题涉及整个树替换而不是添加单个文件,我相信前一个操作可以比后者更清晰地完成。
答案 0 :(得分:1)
在新的本地仓库中再次克隆远程仓库。
检查此新存储库中的分支gh_pages
。
使用您已经拥有的repo进行开发,就像现在使用它一样。
使用Doxygen在开发存储库的主分支上构建API文档,就像现在一样。如果可能,请配置进程以在存储第二个本地存储库的目录中生成输出。否则,在生成文档后,将生成的文档移动到第二个本地存储库。
在第二个存储库(文档存储库)中运行git add .; git commit; git push
。
每次需要时重复最后两步。
答案 1 :(得分:0)
我编写了以下脚本以避免使用其他工作目录,尽管@ axiac的答案是解决此问题的有效方法。
#!/bin/bash
# This script will take a directory and replace the contents of a non-current
# branch with it.
if [ "$#" -ne 3 ]; then
echo \
"Usage: replace-branch <top level directory> <branchname> <commit message>"
exit
fi
root="$1"
branch="$2"
msg="$3"
# First check if the index is polluted, since we will be using it.
save=HEAD
indexDiverges=$(git diff-index --cached $(git rev-parse HEAD))
if [[ -n "$indexDiverges" ]]; then
save=$(git write-tree)
fi
# Create a new index
git read-tree --empty
GIT_WORK_TREE=$root git add .
# Check whether the index is actually different from the target.
isDuplicateCommit=$(git diff-index --cached $(git rev-parse $branch))
if [[ ! -n "$isDuplicateCommit" ]]; then
echo "The branch already matches the state we are trying to commit!"
git read-tree $save
exit
fi
# Write the index out to a new tree
tree=$(git write-tree)
# Commit with the given commit message to the other branch
commithash=$(echo "$msg" | git commit-tree $tree -p $(git rev-parse $branch))
# Move the branch pointer.
git update-ref $(git show-ref --heads "$branch" | awk '{print $2}') \
"$commithash"
# Restore the index to its previous state
git read-tree $save
我还决定稍微升级一下并将其放在GitHub上,并附带示例用法。