pythoncamp0

写给六个月前的自己——关联 GitHub 和 GitBook

解题思路

一. 搞定 GitHub

见 GitHub 章节。

二. 搞定 GitBook

见 GitBook 章节。

三. 关联两者

1.确认已经在 GitHub 中建立了库。

2.确认已经在 GitBook 中建立了 book 。

3.关联库和 book 。

思路小结

经过上面三个大步骤你会发现 GitHub 和 GitBook 的关联已经完成了。

也许你会说,这么笼统的教程谁能懂呢?确实,这只是希望能以程序员思维自居的我写的一个解决思路,抵达终点的路程当然磕磕碰碰,到处找教程、到处碰壁。作为一个新入门的学习者自然有非常多的细节不明白,我也是那样过来的,所以我准备了具体步骤。

但我仍然希望你能够按照上面的思路自己折腾一遍,这样也许你以后遇到问题就能够首先分解为几个大步骤,每个步骤再进行分解,逐一找到解决的办法,就像编程过程中程序员遇到问题时写方法和调用方法一样。

沿着这个思路,当你还是会遇到没有办法解决的问题时,那通常已经是一个非常细节的问题,任何一个过来人都能明白你的问题出在哪里并帮你指出来,而不是同样一头雾水,无法帮助你。

具体步骤

1. 注册并登陆 GitHub

2. 新建一个库,右上方的+号下拉,点击 New repository。

取一个炫酷的库名,我用 name做示范。

点击 Create repository 你就得到了一个你命名的库。

3. 用 GitHub 登陆 GitBook 。

4. 验证邮箱。右上角下拉,点击 Accout Setting 。

输入邮箱和自己设定的密码,点击左下角 Save 。验证过邮箱中 GitBook 发送的邮件后,会得到'This email is verified.'的信息。

5.新建一个 book ,右上方的+号或+Creat a new book 。

取一个炫酷的名字,我用的是和待关联库相同的名字name 。

点击 Create book 你得到了一个你命名的 book 。

输入 ‘你的 GitHub 账户名/库名’,点击右下角 Save。

会得到如图 ' Book configuration has been updated!'信息。

7.点击 Edit 开始写你的 book 吧。保存并你打开 GitHub 中的库,会发现你所编辑的内容已经同步到 README.md 中了。

8.手动解决不同步问题

原因:

  • gitbook 的图书仓库和 github 源内容仓库无法自动同步
  • gitbook 有可接触的 git 仓库
  • gitbook 的图书仓库,没有 github 仓库那些丰富的管理/分享/传播功能

目标:

  • 希望原先图书管理流程不变
  • github 仓库专注图书的管理/编辑/协同...
  • gitbook 专注图书的编译/发布

所以:

  • 人工解决 github 和 gitbook 仓库不同步问题
  • 同时/接连 将图书内容 push 到两个仓库就好!

技术上

github

  • 使用 ssh 认证, 不用口令
  • 通过 git/ssh 协议高速交互 拓展阅读

gitbook

  • 只能使用 https 协调交互
  • 只能使用 明文 帐号+口令 认证
  • 如果,图书发布 URI 是:
    • https://www.gitbook.com/book/[帐号]/[图书名]/details
    • 则对应的仓库应该是:
    • https://git.gitbook.com/[帐号]/[图书名].git

操作上

  • 已经创建好 github 图书仓库, gitbook 图书实例
  • 并将 github 仓库 clone 到本地: /path/2/[图书名]
  • 进入 vim 命令,输入 vi ./.git/config
  • 则应该可以看到 /path/2/[图书名]/.git/config 有以下配置声明
[remote "origin"]
    url = [email protected]:OpenMindClub/[图书名].git
    fetch = +refs/heads/*:refs/remotes/origin/*
  • 那么就可以手工增订为:
[remote "book"]
    url = https://git.gitbook.com/[帐号]/[图书名].git
    fetch = +refs/heads/*:refs/remotes/origin/*
[remote "hub"]
    url = [email protected]:OpenMindClub/[图书名].git
    fetch = +refs/heads/*:refs/remotes/origin/*
[remote "origin"]
    url = [email protected]:OpenMindClub/[图书名].git
    fetch = +refs/heads/*:refs/remotes/origin/*
  • 回到仓库根目录,测试:
$ git remote -v
book    https://git.gitbook.com/[gitbook帐号]/[图书名].git (push)
book    https://git.gitbook.com/[gitbook帐号]/[图书名].git (fetch)
hub [email protected]:[github账号]/[图书名].git (push)
hub [email protected]:[github账号]/[图书名].git (fetch)
origin  [email protected]:[github账号]/[图书名].git (push)
origin  [email protected]:[github账号]/[图书名].git (fetch)

手工双推

用两次 git 操作,完成两个仓库的内容发送:

$ git pu hub
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (16/16), 3.29 KiB | 0 bytes/s, done.
Total 16 (delta 3), reused 0 (delta 0)
To [email protected]:OpenMindClub/[图书名].git
   8c3c8b6..f27428a  master -> master

$ git pu book
Counting objects: 20, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (16/16), 3.29 KiB | 0 bytes/s, done.
Total 16 (delta 3), reused 0 (delta 0)
To https://[用户名]:[口令]@git.gitbook.com/[帐号]/[图书名].git
   8c3c8b6..f27428a  master -> master

代码常见冲突解决办法

  • 如:希望保留本地改动,并且同时并入Github网页上的改动, 处理方法如下:

    git stash

    git pull

    git stash pop

    然后可以使用git diff -w +文件名 来确认代码自动合并的情况.

  • 反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

    git reset --hard

    git pull