【Tools】Pro Git 一二章读书笔记
第一章:Git起步
| 类别 | 基本原理 | 优点 | 缺点 |
|
本地版本控制系统
|
自己把复制整个项目,改名或加上备份时间来区别
采用某种简单的数据库来记录文件的历次更新差异
|
简单 |
有时会混淆所在的工作目录,
丢了文件毛了数据就没有后退的路
|
|
集中化的版本控制系统
|
解决在不同系统上的开发者协同工作,( Centralized Version Control Systems,简称 CVCS )
诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,
而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
|
集中管理 权限分明 |
中央服务器的单点故障。若是宕机一小时,
那么在这一小时内,谁都无法提交更新,
也就无法协同工作
|
|
分布式版本控制系统
|
Distributed Version Control System,简称 DVCS
诸如 Git,Mercurial,Bazaar 还有 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。
这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,
实际上都是一次对代码仓库的完整备份
|





作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。Git 的工作方式如下:
基本的 Git 工作流程如下所示:
1. 在工作目录中修改某些文件。
2. 对这些修改了的文件作快照,并保存到暂存区域。
3. 提交更新,将保存在暂存区域的文件快照转储到 git 目录中。
$ git config --global user.name "zhongwencool"
$ git config --global user.email zhongwencool@gmail.com
$ git config --global core.editor emacs
3.3 差异分析工具
$ git config --global merge.tool vimdiff
$ git config --list
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
#比如
$ git help config
第二章:Git基础

1. 你就能初始化一个新的代码仓库,
2. 做一些适当的配置;
3. 开始或停止跟踪某些文件;
4. 暂存或提交某些更新。我们还会展示如何让 Git 忽略某些文件,或是名称符合特定模式的文件;
5. 如何既快且容易地撤消犯下的小错误;
6. 如何浏览项目的更新历史,查看某两次更新之间的差异;
7.如何从远程仓库拉数据下来或者推数据上去。

$ git init
在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。
$ git add *.c
$ git add README
$ git commit -m 'initial project version'
$ git clone git://github.com/schacon/grit.git
$ git status
$ git add README
文件 .gitignore 的格式规范如下:
• 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

$ git diff
$ git diff --cached
$ git commit
$ git commit -m "Story 182: Fix benchmarks for speed"
$ git commit -a -m 'added new benchmarks'
$ git rm grit.gemspec
$ git rm --cached readme.txt
$ git mv file_from file_to
$ mv README.txt README
$ git rm README.txt
$ git add README
$ git log --pretty=oneline $ git log --pretty=format:"%h - %an, %ar : %s"

选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明


选项 说明
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

$ git commit --amend
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
$ git reset HEAD benchmarks.rb
$ git checkout -- benchmarks.rb
$ git remote
$ git remote -v
bakkdoor git://github.com/bakkdoor/grit.git
cho45 git://github.com/cho45/grit.git
defunkt git://github.com/defunkt/grit.git
koke git://github.com/koke/grit.git
origin git@github.com:mojombo/grit.git

$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git

现在可以用字串 pb 指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb:

$ git fetch pb
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 44 (delta 24), reused 1 (delta 0)
Unpacking objects: 100% (44/44), done.
From git://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit

$ git fetch [remote-name]
$ git push [remote-name] [branch-name]
$ git push origin master
git remote show [remote-name] 查看某个远程仓库的详细信息
$ git remote show origin
$ git remote rename pb paul
$ git remote rm paul

$ git tag
v0.1
v1.3 $ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4

$ git tag -a v1.4 -m 'my version 1.4'
$ git show v1.4
$ git tag -s v1.5 -m 'my signed 1.5 tag'
$ git tag v1.4-lw $ git show v1.4-lw
$ git push origin v1.
$ git push origin --tags
source ~/.git-completion.bash
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.unstage 'reset HEAD --'
$ git unstage fileA
$ git reset HEAD fileA
如果你觉得上面的东西太多,一下很难接受:那么其实你只想掌握git的基本操作:只要10分钟就可以: http://rogerdudler.github.io/git-guide/index.zh.html
哈哈:网上居然有个乐队叫Git Fresh... 每次看Dota搞笑视频时放的就是他们的歌:Booty Music..就是那个一直循环说Let's do it do it ,That‘s the way you like it 的歌,把git和这联系起来,那感觉好好笑。。。。

别装逼,我也会.....哈哈哈哈。。。。
【Tools】Pro Git 一二章读书笔记的更多相关文章
- [Git00] Pro Git 一二章读书笔记
记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧. Pro Git (Scott Chacon) 读书笔记: ...
- Linux内核分析 一二章读书笔记
第一章 Linux内核简介 1.Unix (1)Unix系统很简洁 (2)在Unix中,所以东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lsee ...
- 第三章 Git的入门 - 读书笔记
Android驱动月考3 第三章 Git的入门 - 读书笔记 对于Github,这是全世界最大的开源平台,你可以把你做的项目在这里开源,把你发现的一些新技术在这里开源,向全世界的开发者们分享,大家都彼 ...
- Linux内核分析第四章 读书笔记
Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这 ...
- 《Linux内核设计与分析》第四章读书笔记
<内核设计与实现>第四章读书笔记 第四章:进程调度 进程(操作系统)程序的运行态表现形式. 进程调度程序,它是确保进程能有效工作的一个内核子系统. 调度程序负责决定将哪个进程投入运行,何时 ...
- 《构建之法》第四&十七章读书笔记
<构建之法>第四&十七章读书笔记 一. 前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识 ...
- <深入理解计算机系统>第七章读书笔记
第七章读书笔记 链接 链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程.(这个文件可被加载或拷贝到存储器并执行) 链接可以执行于编译,加载或运行时. 静态链接: 两个主要任务: 1 符号 ...
- linux内核分析第3章&第18章读书笔记
linux内核分析第3章&第18章读书笔记 第三章 进程管理 进程:处于执行期的程序(目标码存放在某种存储介质上) 包含资源:可执行程序代码,打开的文件,挂起的信号,内核内部数据,处理器状态, ...
- Pro Git 第一章 起步 读书笔记
Pro Git 笔记 第1章 起步 1.文件的三种状态. 已提交:文件已经保存在本地数据库中了.(commit) 已修改:修改了某个文件,但还没有提交保存.(vim) 已暂存:已经把已修改的文件放在下 ...
随机推荐
- [置顶] 第一天初试linux
1).unix linix macos android 的区别 Unix是要收费的,而linix是一种开源免费的unix ,macos 和andorid又是linux的一种,macos闭源,仅仅是 ...
- Linux 普通用户su命令切换控制
1.编辑配置文件/etc/pam.d/su .将下面配置文件"#“去掉: # auth required pam_wheel.so use_uid 改成 a ...
- document.all的用法详解
all[] 已经被 Document 接口的标准的 getElementByid() 方法和 getElementsByTagName() 方法以及 Document 对象的 getElementsB ...
- 万网免费主机wordpress快速建站教程-域名申请
在上一篇文章中,小伙伴们已经申请好了万网的免费主机,接下来教大家如何申请域名. 由于万网免费主机要绑定在阿里备案的域名,现在以万网的域名注册为例子. 首先进入万网域名注册页面(http://www.n ...
- PHPSession-完全PHP5之session篇
http://blog.csdn.net/masterft/article/details/1640122 1.什么是session? Session的中文译名叫做“会话”,其本来的含义是 ...
- 【转帖】客户端通过 HTTP 请求和响应 的 Header 信息总结
请求Header原帖地址:http://technique-digest.iteye.com/blog/1174581 响应Header原帖地址:http://blog.pfan.cn/hurongl ...
- Core Canvas–Day1
绘制 1.坐标系统: canvas的坐标以左上角为原点,如图 可对canvas的坐标系统进行变换,变换的方式有 平移translate 旋转rotate 缩放scale 创建自定义的变换方式,切变 2 ...
- 11_关于SqlMapperConfig.xml
[简述] SqlMapConfig.xml是Mybatis的全局配置文件,配置内容如下: 1.properties---------属性 2.settings-----------全局配置参数 3.t ...
- 2015 Multi-University Training Contest 1 题解&&总结
---------- HDU 5288 OO’s Sequence 题意 给定一个数列(长度<$10^5$),求有多少区间[l,r],且区间内有多少数,满足区间内其它数不是他的约数. 数的范围$ ...
- Java LoggingAPI 使用方法
因为不想导入Log4j的jar,项目只是测试一些东西,因此选用了JDK 自带的Logging,这对于一些小的项目或者自己测试一些东西是比较好的选择. Log4j中是通过log4j.properties ...