如何将GitHub wiki集成到主项目中

时间:2011-08-04 12:47:37

标签: git github wiki

我希望将所有源代码和文档保存在一个git存储库中。我已经将github页面集成到我的主项目中,现在我想对github wiki做同样的事情。

我知道github wiki是普通的git存储库。我的计划是将维基作为远程控制添加到我的主仓库并将所有内容保存在一个地方。但是在wiki repo中,一切都在根目录中,因此会使我的主项目变得混乱。

以前有人试过这个吗?处理这个问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:34)

您想将Wiki添加为submodule。相同的Wiki git repo作为远程连接,但在具有自己的.git目录的子目录中。

git submodule add git://github.com/you/proj.wiki

在主仓库的根目录中,将维基仓库添加为维基/目录中的子模块。

答案 1 :(得分:6)

我发现这一切都非常繁琐 - 在我看来,github wikis应该是主存储库的分支,或者至少应该可以做出选择。

尽管如此,我认为最好的解决方案是使用subtree merge简单将维基移动到主存储库,例如docs/wiki。例如,假设您的存储库为you/proj,您的wiki将位于:git://github.com/you/proj.wiki。然后将其合并到主仓库中,您可以:

git clone git://github.com/you/proj
cd proj
git remote add -f wiki git://github.com/you/proj.wiki
git merge -s ours --no-commit --allow-unrelated wiki/master
git read-tree --prefix=wiki/ -u wiki/master
git commit -m "Github wiki subtree merged in wiki/"

你甚至可以让wiki一边工作,欢迎那里的公众贡献,然后在你认为合适的情况下将它们放入你的主文档中。要在审核后合并新的更改,您可以:

git pull -s subtree wiki master

不幸的是,以另一种方式合并更改有点棘手,无论如何,您应该将此作为一次性操作,然后关闭Wiki,或重定向到repo源......

此外,这种方法的一个主要警告是git log wiki/Home.md(例如)实际上并未显示维基页面的历史记录。历史,但不知何故git-log无法跟踪它。这是与git子树相关的known limitation。解决此问题的另一个解决方案是执行filter-branch和定期合并,以保留历史记录。

对我来说,将wiki作为主源代码树的一部分的主要优点是可以跨代码和文档协调拉取请求和更改。通过代码发送文档,而不是假设人们只是在线阅读它,这也简单易行...

答案 2 :(得分:3)

您可以创建一个带有wiki repo的submodule,也可以定期获取并来回切换分支。

答案 3 :(得分:0)

您可以将一个 wiki 存储库的副本放入您的主存储库并并行处理它们:

$ git init
$ git remote add -m master origin git@github.com:<owner>/<repo>.git
$ git add .
$ git commit -m 'Initial commit'
$
$ cd wiki
$ git init
$ git remote add -m master origin git@github.com:<owner>/<repo>.wiki.git
$ git add .
$ git commit -m 'Initial wiki commit'
$
$ git push -uf origin master
$ cd ..
$ git push -u origin master

这种方法有点结合了其他答案中建议的子模块和子树的优点,但不会使工作流程复杂化:它允许您在主存储库中拥有 wiki 文件,在拉取请求中查看它们并轻松地将它们推送到或从维基中提取。

要将现有存储库的内容添加到另一个存储库中,您需要暂时删除 .git 文件夹(否则 Git 会将其添加为子模块):

$ mv wiki/.git/ wiki/.git__/ && git add wiki/* && mv wiki/.git__/ wiki/.git/

这只是一次性问题,以后的任何文件都可以照常添加。

请注意,Wiki 存储库的 .git 文件夹不会包含在您的主存储库中。
This answer 描述了在克隆此类存储库后如何恢复它。