• 核心思想: 观察.git目录的变化。

git in git

如何方便的查看.git目录的变化?
一个简单的方式是利用git仓库本身,即git in git

流程

1
2
3
$ cd .git
$ git init
$

要探究的问题

index到底是什么东西?
多次index会自动合并为一个吗?还是会保留多次index的历史?

commit后到底是什么?

stash存到哪了?

1
2
3
4
5
6
7
8
9
10
11
12
13
# 删除远程分支
git push origin --delete <branchName>

# 删除tag
git push origin --delete tag <tagname>


##### 创建分支
# 创建一个orphan的分支,这个分支是独立的
git checkout --orphan gh-pages
# 删除原来代码树下的所有文件
git rm -rf .
rm \'.gitignore\'

利用branch管理自己的project和需要PR的project

主要目的也是为了不和自己的修改绞在一起产生混乱。比如我从next仓库fork到我自己的仓库,然后我做了一些只用于我自己的个性化修改,这时候我的master分支和远程master分支之间的变动越来越大了。
然后我碰到一个适用于所有人的变动,这时候想提交个pr,最好的方式显然是切换到远程master分支,然后做修改,之后提交到一个新的分支,再然后就可以去github上提交pr了,不会把自己master上的一些修改混到里面
不过如果自己master和远程master始终保持完全一致的话倒是可以直接提交到自己master上,然后直接用自己master分支提交pr – by tsanie

为什么要用branch,什么时候用?

比如next项目,我没权限,只能fork下来用。
如果不用branch,我在自己的master上修改,时间久了,与remote差异越来越大。我想更新功能,可以在remote上pull下来。但是我想提交change到remote呢,这就出问题了。因为提交commit首先要checkout到remote的master。

最好的方式是有一个branch跟remote同步,用这个branch与remote交互。

如果没有提交PR到remote的需求,可以不用branch。

说一下特殊情况。

我用两个git账号(俩仓库俩master),一个做pull用,一个给remote提PR用。
那我是不是就没必要设置branch了。

如何pull remote到local?

Merging an upstream repository into your fork

https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/

如何 merge本地分支到master

git checkout master
git pull origin master
git merge test
git push origin master

有冲突怎么办?

老简单了
https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line/

##

如何实现移动端的git?.git目录很大

比如用git管理日志,或者代码,每次都需要打开电脑记录,比较麻烦。
方式:

  1. 采用dropbox同步git项目,不包含.git
    1.

改进git

了解为知笔记的同步策略,dropbox的同步策略。如何解决冲突的?如何轻客户端的?

github cdn服务

GitHub CDN服务

方式一: github仓库

github提供raw的方式访问源文件。(git gist 都适用)

github的文件地址

https://github.com/xu-song/async-rl/blob/master/resources/episode_reward.png  # blob

文件绝对地址

https://github.com/xu-song/async-rl/raw/master/resources/episode_reward.png  # raw
https://raw.githubusercontent.com/xu-song/async-rl/master/resources/episode_reward.png # raw的url经过 浏览器重定向后的路径 (被包了一层html标签)
https://raw.githubusercontent.com/xu-song/async-rl/master/resources/episode_reward.png?sanitize=true # 浏览器重定向后的路径 (真正的文件绝对路径,可用于<img src=""> 标签引用)
https://user-images.githubusercontent.com/  # issue和comment中上传的图片
https://rawgit.com/  # 贴你github上的文件地址,就能自动变成CDN地址(而且是SSL的)

方式二: issue和comment里上传的图片存在这

- https://user-images.githubusercontent.com   
- 文件上传的格式有限制

方式三:github release

  1. github release 这里适宜放大文件,比如模型文件,数据文件

其他

知乎: 关于连接返回的content-type
github提供的raw链接返回的content-type都是text/plain,浏览器会拒绝执行这样的js和css的。
可以用RawGit 这个网站来绕开text/plain的限制
购买github的cdn服务也是可以的

TODO: 检查一下content-type,分别对js,css,py,jpg测试。即用github分别host图片,js,py试试

知乎:关于浏览器解析content-type
浏览器在解析资源文件的时候会判断content-type头,这个http头定义了设备如何处理将要加载的资源,比如text/html就是让浏览器加在解析html,其中text/plain是纯文本,浏览器设备不会做任何处理,而只有application/javascript或者application/x-javascript(JavaScript 脚本)text/css(CSS样式表)这样表明是资源文件的浏览器设备才会做相应处理加在

TODO:测试一下呗

repo的raw_data VS

  • 每次有人请求raw_data,github 都要去访问这个 repo,查找要求的数据——比起普通的静态文件和 gist,这些操作的系统开销显然要大很多。 (gist也是repo啊,跟raw无关吗?)
  • 源码仓毕竟不同于文件服务器,请求一次的代价很大
  • github 的策略中,当对 raw data 的请求过于频繁时会返回 403 错误。
  • 比如。

总结以下”12306订票助手拖垮github事件”

根本归结于插件的自动更新机制

  • 和谐期:版本自动更新,新版插件托管在任何http服务器均可 (请求压力不大)
  • 跪了:某个版本,Chrome引入安全机制:对于一个HTTPS网站,其所有引用的资源(Script和StyleSheet之类的),也必须位于HTTPS的服务器上,否则拒绝执行。自动更新跪了
  • 问题来了:哪里找HTTPS服务器?
  • Aha!:github不错,还免费
  • 又跪了:GitHub对于第三方引用的资源,正常返回的概率是很低的。就算很少人用的时候,也几乎是每请求5-6次才肯返回一次正确的内容,其它的时候,全部返回403错误。自动更新又跪了
  • Aha!:如果一次数据请求失败,那么就每五秒请求一次,直到成功。
  • 报警了:16号。于是乎,每个用户都变成了每 5s 攻击一次的“肉鸡”。被github警告了

这就是该事件,下文继续

  • ss

好处

  • 突破浏览器并发限制
  • 动静分离、提高效率
  • CDN缓存更方便

问题

  • 只存了一份吗?怎样保证数据备灾 & 不同地域的访问速度
    -

格式

mobi, azw, azw3, epub 这几种电子书格式从本质上来说都是从 HTML 文档转换而来,大多数 HTML 标签和 CSS 样式表的特性它们都支持,它们之间的主要区别在于对排版及新特性的支持与否上。

calibre只能编辑epub和azw3格式书籍。

格式转换工具:Calibre

pdf

优点,编辑方便,
缺点:

epub

epub实际上就是一个html的打包,里面的内容都是由html来进行排版,由CSS控制样式的。因此制作epub和制作网页没有太多的区别。
epub是开源格式

mobi:

amazon的格式,.mobi是压缩包,里面主要包含html和资源文件

mobi是良心格式啊,能转化为htmlz。(是工具提供的还是)

编辑mobi

  • 方式一:转化为epub
    转化为epub, 然后通过sigil或jutoh修改,之后用calibre转为mobi
  • 方式二:转化为html
    转化为htmlz,解压缩,

格式转换 信息丢失

  • 转化原理,格式A–html–格式b。如果转化成

  • azw3是升级版的mobi,转换成 mobi 后会产生丢失格式的问题

  • pdf信息量最少(比如换行),所以不要拿pdf当做转换源

做笔记

  • 方式一:在pdf中做笔记
    • 优势:做笔记方便,
    • 缺陷:pdf格式不易于操作,不易于读写
  • 方式二:在html中,利用canvas做笔记。 不影响html源码,只是添加了一堆js
    • 优势:做笔记方便,
    • 缺陷:
  • 方式三:在html中,利用标签做笔记。
    • 优势:style可以自定义。
    • 缺陷:图形的笔记不好做。

最推荐利用方式三