Notes of Git

Pro Git is an excellent book about Git, and these are my reading notes.

This is a brief notes about some points of Pro Git. It only contains first 3 chapters (contains most commonly used commands of Git). I will maintain this article and keep revising it. Hope it might helpful to you.

##Before Running Git

  • Snapshots, Not Differences
    The major difference between Git and any other VCS (Subversion and friends included) is the way Git thinks about its data. Conceptually, most other systems store information as a list of file-based changes.

  • Nearly Every Operation Is Local
    Most operations in Git only need local files and resources to operate ¡ª generally no information is needed from another computer on your network.

  • Git Has Integrity
    Git use checksum, namely, SHA-1, as a reference.

  • Three States
    Git has three main states that your files can
    reside in: committed, modified, and staged. Committed means that the data is safely stored in your local database. Modified means that you have changed the file but have not committed it to your database yet. Staged means that you have marked a modified file in its current version to go into your next commit snapshot.

    The basic Git workflow goes something like this:

    1. You modify files in your working directory.
    2. You stage the files, adding snapshots of them to your staging area.
    3. You do a commit, which takes the files as they are in the staging area and stores that snapshot permanently to your Git directory.

##Git Basics

  • Clone
    git clone git://github.com/USERNAME/REPO.git

  • Check Status
    git status

  • Trace New File
    git add FILE (The FILE edited after git add need to redo git add to store the changes)

  • Gitignore
    if you want to ignore some files, add thier patter to .gitignore. Like *.[oa] (generate while compiling)

    Glob patterns are like simplified regular expressions that shells use. An asterisk (*) matches zero or more characters; [abc]matches any character inside the brackets (in this case a, b, or c); a question mark (?) matches a single character; and brackets enclosing characters separated by a hyphen([0-9]) matches any character between them (in this case 0 through 9) .

  • Diff between staged and last commit file
    git diff --cached

  • Committing Changes
    git status before git commit. add -m flag to add commit message, -v to explicit remind every place you modified, -a to automatically stage every file that is already tracked before doing the commit, letting skip the git add part.

  • Remove
    rm FILE and git rm FILE to delete local files. git rm --cached FILE to remove files in repository.(Could use glob)

  • Move
    git mv OLD NEW to change the names.

  • Viewing History
    git log, add -p to show differences in every commits, use -2 to see lasted 2 updates, –stat abbreviated stats, –pretty customized formats.

  • Undo
    use git commit --amend to add forgetted files or reedit commit messages. (See Book 2.4.1)

  • Unstaging Staged File
    git reset HEAD FILE

  • Unmodifying a Modified File
    use git status (See Book 2.4.3)

  • Fetching and Pulling
    git fetch REMOTE-NAME pull down all the data from that remote project that you don’t have yet.

    git fetch origin fetches any new work that has been pushed to that server since you cloned (or last fetched from) it. It’s important to note that the fetch command pulls the data to your local repository and it doesn’t automatically merge it with any of your work or modify what you’re currently working on. You have to merge it manually into your work when you’re ready.

  • Push
    git push origin master will push local master branch to origin server.

  • Tagging
    git tag to add tags.-a to annotated, -m add comments, git show to check version info.

  • Git Aliases
    You can set up an alias for each command with git config. For example, using git config --global alias.ci commit to instead git commit with git ci. Useful Tips: git config --global alias.last 'log -1 HEAD' to check last commit by git last.

Git Branches

  • HEAD
    In Git, this is apointer to the local branch you’re currently on.

  • New Branch
    Because a branch in Git is in actuality a simple file that contains the 40 character SHA-1 checksum of the commit it points to, branches are cheap to create and destroy. Creating a new branch is as quick and simple as writing 41 bytes to a file (40 characters and a newline).

  • Basic Branching and Merging
    switch to a certain branch git Check -b BRANCH-B, git merge to merge to master.

  • Delete Branch
    git branch -d to delete branches. It could be failed if it was unmerged. Thus, you could use git branch -D BRANCH-B to force deleting it, and git branch --no-merged to check unmerged work.

  • Remote Branch
    You’d better read the related part of this book! It is a little comfusing but important.

  • Rebasing
    With the rebase command, you can take all the changes that were committed on one branch and replay them on another one. For example, git rebase master server checks out the topic branch (in this case,server) for you and replays it onto the base branch (master).It quite cool, read Book 3.5.1 to know more. Summed up in one line Do not rebase commits that you have pushed to a public repository.


一个RSS订阅者的自我修养

这篇文章想说什么

人在网络飘,面对浩如烟海的信息,如何有效及时地掌握自己需要的信息?有些网站和博客能提供这些。问题是,这些网站可能很多,每次从收藏夹里一个个点开既费时又费事,而且各个网站更新内容的时间又不固定,难道我们能雇一个人帮我们随时查看各个博客更新的情况么?

RSS(Rich Site Summery)就是这样一个勤恳而免费的“雇员”,帮我们查看抓取所关注的博客的更新。其次,导入笔记。订阅博客,尤其是技术博客,一项很重要的工作就是做笔记,后面会讲到如何从RSS文章导入笔记。

##RSS阅读器
国内比较流行的RSS阅读器有鲜果,抓虾,看天下…个人觉得鲜果还算凑合的,支持的博客比较多,而且能通过它查看一些墙外的博客(不通过翻墙,查看抓取的内容)。要说最棒的RSS阅读器,还得是Google Reader,尤其是在平板上通过Reeder查看更新,阅读体验是最棒的。

##做笔记
Evernote作为一款优秀的笔记软件(出于严谨的态度,我不得不去掉忍痛去掉“最”字),能完美的满足我们的要求。在Web上,Evernote提供的Chrome插件Evernote Web Clipper和Cleary能较好的把内容clip到笔记本里。前者是直接选取网页中区域(根据网页的CSS结构),后
者则能帮我们把网页里一些不相关的东西剔除掉,提取出全文feed。我们知道,针对不同的网站,需要不同的内容提取规则,之所以说Cleary是“较好的”是因为它的规则处理还有瑕疵。所以,我有时候先把笔记存进Pocket——一个保存想读文章,并能完美提取的小插件,再从Pocket导到Evernote里。或者,用FiveFilters.org提供的全文feed生成器,把网址往里一扔,OK了。

那如果在平板上呢?这时候,就要靠ifttt这个好帮手。它能神奇的在各个账号之间建立一个channel。比方说,我要让Google Reader里打星的文章都存到Evernote里,就添加这两者的账号,建一个连接,大功告成。这么牛掰的工具当然不只有这一个功能,还可以把你的Gmail, Google Calender, Dropbox, Pocket, Facebook, 甚至手机账户,都能连起来,按照自己的需求定制channel。

##纸和笔
如果只是这样做笔记,只不过是一种更有效的copy&paste,慢慢的笔记本里会积压越来越多的东西,没有时间真正吸收,沦为每天浏览博客整理笔记的机器,这样很糟糕。和菜头有篇《碎片化生存》,说的正是过多的微博和博客导致的对阅读“大部头”能力的丧失,而满足于一些科普类和推崇解决问题tricks的XXX hacks类文章。
要把笔记变成自己的东西,一定要有自己的主动参与,还是需要保持看纸质书和手写笔记的习惯。

##写出来
写博客是个很好的锻炼自己的方式。但是,普通的博客系统只能满足一部分需求,要想随心所欲自由的管理自己的博客(当然得不怕麻烦),Github+Jekyll,或者Octopress都能满足你的要求。

##博客的排版
博客的排版是个头疼的事,怎样专心于写作而不被设置字体大小,插入图片和超链接之类的事烦心是个大问题。Markdown就是为此应运而生的。此外,Emacs下强大的Org-mode也是个相当不错的选择。

##最后,分享一些我觉得不错的博客

Matrix67 www.matrix67.com

酷壳
CoolShell.com

浏忙大爆炸
blog.waterlin.org

刘未鹏 Mind Hacks
mindhacks.cn/

阮一峰的网络日志
www.ruanyifeng.com

good coders code,great reuse
www.catonmat.net/

外刊IT评论
www.aqee.net/

Planet Emacsen
planet.emacsen.org/

talich闲侃
talich.cinepedia.cn

李笑来
lixiaolai.com/

学而时嘻之
www.geekonomics10000.com/

不许联想
www.wangxiaofeng.net/

张佳玮写东西的地方
zhangjiawei.blog.tianya.cn/

西西弗斯的健忘症
lilyshen.wordpress.com/

柴静的博客
blog.sina.com.cn/chjguancha

和菜头的槽边往事
www.hecaitou.net/

吴万伟的博客
blog.163.com/wuwanwei@yeah/

马伯庸的异教徒告解室
blog.sina.com.cn/maboyong

Tear Down This Wall
http://www.bullogger.com/blogs/tdtw/


笔记:把时间当做朋友

李笑来的书《把时间当作朋友》,讲的还不错。

Chap 0 困境

  • 我们总是因纷繁的外物所打扰,以至于在deadline前惊呼“没时间了!”。人是“既勤奋又懒惰”的,我们应该管理的不是时间,而是自己

  • 要经过自己认真思考获得知识。

    人们很难接受与已有知识与经验想做的信息或观念,因为既有的知识与观念都是经过持有者反复筛选的。

  • “一切都靠积累”

Chap 1 醒悟

Chap 2 现实

  • 忍受一定程度的未知。有问题解决不了的时候,先记下来,而后继续前行。
    “foo”、”bar” 什么意思

  • 心怀“梦想”的时间越长,它的沉没成本越高。最终,很多人都在无意之间被自己的“梦想”所绑架。

  • 接受现实,用正确的方法做正确的事情。

  • 承认资源稀缺。时常把自己的一些年头记录下来,然后与这几条显示对照,看看它们是否与这些现实相符。

Chap 3 任务管理

  • 估算时间。在任务中遇到“意外”,从而开始新的征程。所以需要分辨任务的属性——它是熟悉的还是陌生的
    • 熟悉的则像WBS(Work Breakdown System)一样,细分为小步骤,注意关键点,考虑如何完美完成任务。
    • 陌生的,平静看待遇到的“意外”,尝试一次。

我们必须处理未知,而从陌生到熟悉,需要花费时间去学习,不可逾越。如《Teach yourself Programming in Ten Years》

  • 任何领域的卓越成就都必须用一生的努力才能取得;稍微低一点的代价都是换不到的。“10000小时”理论

  • 及时行动:**现在就开始!!!**迟迟不开始的最本质原因在于恐惧。

  • 直面困难,很多人只是

做出了努力的样子,或者显得比较努力而已。
因为他们回避困难。任何任务都可以被划分为相对简单的部分和相对困难的部分。我自己的看法:Eat the frog first.先做最困难的部分。

  • 人做事的动机来自于:奖励与惩罚。很多人实际上不知道自己所谓的“喜欢做某件事”实际上更可能只不过因为那件事相对简单、容易获得奖励而已。

  • 关注步骤:把任务拆分成一个个细小的捕捉,越细越好,每个小任务都能独立完成。核心是具体化细分拆解,并在此过程中反复询问为什么要这么做。

  • 时间片方法:25min工作 + 5min休息。pomotodo番茄法。关键就是拆分任务

  • 感知时间:相信我,你并不孤独。《奇特的一生》柳比歇夫的“是件-时间日志”(Event-time Log),记录事件,和该事件所花费的时间。这样遇到不好的结果的时候,更容易找到缘由

  • 再此基础上,制作预算。这个任务的完成是否对目标达成确实有益

  • 计划,可行

  • 列表。纸和笔,要随手可及。

    • 最重要的任务永远只有一个。
    • 有新鲜主意的时候,专门记载一个下一阶段任务列表中,然后专注于当前该完成的任务上。
    • 列表一旦开始执行就一定要执行到底。
  • 将要做的事情的整个过程在脑子里语言一遍甚至多遍(尤其是重要的!

  • 验收:做事之前,拿出纸笔记录下每一个预定的验收标准。

Chap 4 学习

  • 获取知识最为起初的手段就是“体验”,更高级的就是“试错”(Trial and Error)。而“阅读”,是一种非常有效的体验。

  • 哥白尼 “很多时候,人们的善良出自于软弱,而他们的残暴出只不过来自于恐惧。”

  • 自学能力的基础技能是阅读理解能力,检索能力是建立在相当熟练的阅读能力基础上的能力。

  • **写作能力在自学能力中占据着重要的地位:**写出写出简捷、有效、朴素、准确、具体的说明性说理性文章的能力。

  • 实践能力是自学能力最终能够转化为真正价值的根本。

Chap 5 思考

  • 独立思考:当别人告诉你一个结论的时候,你自己动脑重新推演一遍得到结论的过程,看看有没有漏洞,有没有不合理的地方,衡量一下那结论到底有多少道理。

  • “诉诸权威”(Wishful Thinking)与“诉诸情绪”(Authority Addiction)

  • 常见的逻辑错误(Wikipedia

    • 概念不清:学习任何知识的时候,搞清楚所有它的基础概念是最重要的。明白“计划”和“目标”并非一回事,否则会Stick to the plan而最终无法达成目标。“上学”和“学习”不是一回事,“政府”和“国家”不是一回事。
    • 拒绝接受不确定性:所有的“仓促的结论”(Hasty conclusion)也好“仓促的概括”(Hasty
      generalization)也好,“过分简单化”(Over simplification)也罢,从根源上来看,都是忽略、拒绝接受不确定性而造成的结果。再比如,所有的粗暴二分法(False dichotomy)也是拒绝接受不确定性的结果。
  • 因果关系:

    1. A不一定是B的理由
    2. A不一定是B唯一的理由
    3. A不一定是B最重要的理由
  • 双盲测试:安慰剂效应(Placebo effect)

  • 自证预言:让自己相信

  • 很多人做不到思维缜密是因为I)喜欢型拒绝思考.II)不懂如何思考。

    • 逆命题。分不清原命题和逆命题之间的区别e.g. : 1) 脑残者最好玩的地方在于他们认为别人才是脑残呢。这句话本身并不意味着说 2)”认为别人脑残的人才是脑残”
  • 举证责任:“谁主张谁举证”并不仅仅是法律术语,事实上,它的应用范围涉及到生活的方方面面。有些人提出一个观点后,要求对方进行反证。他们的逻辑是“既然你无法证明我是错的,那么我就是对
    的。”这是一种典型的逻辑错误,学称“Argument from ignorance”(或“appeal to ignorance”)。

  • 案例局限(以偏概全),对立论证,张冠李戴… …

  • 感悟与道理:Ideas are cheap.感悟≠道理。道理是普适的,而感悟只不过来自个体经验。
    e.g.成功学SB。成功者有“认知偏差”(Cognitive Biases),大脑有自我保护的功能:忘记痛苦。人普遍把成功揽到自己身上,把失败归咎于他人或者坏运气(Self-serving Bias 自利性偏差)

  • 傻念头“要是…就好了”,不要这么想。

Chap 6 交流

  • 记住要点,理清要点之间的逻辑关系。讲者内容可分为:事实和看法。

  • 一旦决定倾听,就要主动帮助讲者进入“倾诉”状态

  • 勤于反思,深刻了解经验的局限

  • 使用记录是自己能够记住更多经验:用blog。

  • 经常尝试使用类比(meaphor)跨越未知与已知的障碍。

  • 运用时间积累;耐心等待不能跨越时间的经验。

Chap 7 应用

  • 兴趣:人并不是对正在做的事情没有兴趣,而是没能力把目前正在做的事情做好。最终没有人喜欢自己做不好的事情。现在说另外一个方面。人们总说他们真正感兴趣的是别的事情。可事实上,那应该仅仅是因为他们还没开始做那件事情,所以还没有在那件事情上遭受挫折而已。因为还没有遇到过挫折,还没有证明那件事情他们做不好,所以,那件事儿对他们来讲确实具备很大的吸引力。

  • 方法:修佛有四万八千法门,重要的是策略坚持。坚持就是重复。

  • 记住痛苦:第一种办法是当你面临尴尬的时候,记得一定要拿出纸笔来,把你所遇到的尴尬记录下来—当然,最好是记录在同一个本子里。这样的记录是非常有意义的。因为它会提醒你,这是你曾经遇到过的尴尬。如果你不用纸笔记下来,那你就肯定会忘的。然后还要养成习惯,定期拿出这个本子回顾一下。这个习惯往往会使你很有成就感的,因为你知道,甚至可以清楚地看到你已经有进步了,因为那个本子里记录过的很多的错误你都不再犯了—当然,不再犯那些错误的原因是因为你在不停地提醒你自己! 另外一个办法是,在面临尴尬的时候,尽量弱化你的痛苦控制自己的情绪,不要被你的大脑的直接反应所左右。

  • 灵感:Thomas Sowell的《Knowledge and Decision》。积累(这点我做的很不错,就不做笔记了)

  • 鼓励:鼓励身边的人士一种小众但重要的美德。

  • 效率:100%的效率是不可能的。黄金分割:如果规划的时间是10个小时,用6.18小时去工作。

  • 想办法提前预知自己需要怎样的技能,然后确定那是一个自己可以通过练习真正熟练掌握的技能,而后制定长期计划。

Chap 8 积累

  • Reinhold Niebuhr 在他那著名的“The Serenity Prayer”中说:

    God grant me the serenity to accept the things I cannot
    change, the courage to change the things I can, and the
    wisdom to know the difference.
    愿上帝赐予我从容去接受我不能改变的;赐予我勇
    气去改变我能够改变的,并赐予我智慧去分辨这之
    间的区别。

  • 72法则(Rule of 72):每天增长r%,持续y天,若r*y=72,那y天后会差不多翻一番。

  • 越早醒悟越好

What I Will Do

  1. 用本子记录下每天中每个工作所用的时间(笔记本和RescueTime,后者能分析你每天在电脑前时间都花到哪儿去了)

  2. 工作约束用番茄工作法,每次专心25min,休息5min(pomotodo和iOS的30/30

  3. 有随身携带的任务记录提醒设备,比如手机。对于没有特定时间要求的,我就存在koalcat’s Clear里(是iPhone中的Clear的Android版)只设了Todo List和New Idea,记录要做的事和在做的过程中想到的新点子,切记!!不要因为新点子打断当前做的任务,一定要优先完成现在的任务!!!!对于有特定时间要求的,我用Google Calender,因为它能定时给手机发短信提醒哟!对Android手机同步也很好。

  4. 定期回顾。只有不断的回顾自己的过去反思才有意义,养成习惯,Wilbeibi,加油!!!