综感
小,快
乱
小工具堆叠
好也晕
推荐
Mercurial
有大工程实用
对比 Hg Bzr SVN perforce
便宜的本地分支
自由变迁
改进行为
Topic
Topic
Topic
Topic
Topic
所有內容都在本地端
真正的離線工作
Git 很快
所有的操作都是在本地端
是用 C 寫的
速度对比
Git 很小
空间占用是精心优化的
暫存區域
index/staging area
模式0
模式1
是分布式的
每个人都可以是中心仓库
而且不会太慢!
適用任何工作流程
SVN式
整合管理
司令官與副手
我們有 GitHub !
http://github.com/
社交導向的
使用者導向
容易學習
这个,,,,
关于
内容:
阅读理解\GIT使用体会/Yubao.Liu@gmail.com
解析阅读\Why Git is Better than X
作者:Zoom.Quiet
工具:xMind 3
版本:
081205 创建
081211 继续P9~15
081212 all readed
存疑
全局版本图
可能根本无法获得实体
没有办法可以收集齐全版本
基本 概念
file
directory
文件名、目录名的集合
version reversion
树 的 状 态
单向无循环图 (DAG)
非CVS中的单文件
tag label
助记字串
静态标签(static tag)
浮动标签 (float tag)
branch的分岐
版本线段
同标签中的版本集
可回溯到的版本集
术语
blob
文件
数据+长度
tree
目录
权限位
对象类型
SHA1 摘要
名字
commit
版本
tag
静态标签
轻量级的
自称: stupid content tracker
关心的文件内容的流向
不显式记录复制、移动
git文件
此路径曾经指代的文件内容变化
一个路径所牵涉到的历史
log对比
操作:
git/svn add a && commit && git/svn mv a b && commit
git log
a 会显示两次提交(一次新增,一次删除)
b 会显示一次提交
svn log
a 会显示 a 没有纳入版本控制
b 会显示两次提交
机制对比
SVN从当前目录回溯出版本历史
Git从当前版本过滤出当前目录的历史变化
引用 reference ref
head
.git/refs/heads
tag
.git/refs/tags
可以指向四种 object
tree
commit
blob
symbolic ref
.git/ 目录下的符号链接
内容为 refs:refs/.... 的普通文件
symbolic ref 跟 ref 重名时
要用 refs/heads/xxx 或者 heads/xxx
版本库
.git 目录
用于保存全局版本演化图
子集
标签
同步
pull = fetch + merge
注意
head和tag ref
只作用同一仓库
origin/master
git clone 时自动建立分支
fetch
remote update
分支
remote branch
同步对方库
不得提交
tracking branch
无参数的 git pull
不建议提交
无 厘 头 !
normal branch
理解
branch head
各自在全局版本图上的 动态标签
对象 记法
git help rev-parse
commit-ish
版本号推导字串
SHA1 摘要
含 ~ 和 ^ 记法的版本号
版本日期记法
标签对象的摘要
标签名字
分支名字
以及以上的组合
tree-ish
目录版本推导字串
同上
运用
指定某个版本 的文件树中 的内容
tree-ish:fullpath 语法
v2.6.27:init/main.c
参数
没有用 -r REV 这样的方式
要在 file 参数前面添加“--”参数
git log
参数是个 commit-ish
能够回溯到的所有版本
未必可以看到想看的
合并
fast forward
master 分支没有提交
修改head指向合并的分支
KILLed 私有分支
从全局版本图角度 看不出私有分支轨迹
停止贡献就不再有新的痕迹
svn log 式 直线分支历史
log -g xxx
log --first-parent
对fast forward的分支 失效
混乱之源 index
git 文件 逻辑地点
repository
.git
各历史文件
work tree
工作目录
仅有当前版本
index
暂存修改
实际是链接到 .git/object
cache ?
涉及功能
git add
0. 加入index
1. 修订 work tree
2. 再add
3. 入repository
git rm
从index+work tree 清除
git rm --cached 只从 index 中删除文
git commit
文件从index到repository
git commit -a
0. work tree中修订的 add 到index
1. 从index提交到repository
git checkout
0. repository 中指定版本的文件
1. 覆盖index+work tree 中文件
git reset
0. 取repository 中的 commit 版本
1. 覆盖 index 中的对应文件
git reset --hard
撤销 index 和 work tree 中的修改
git checkout -- paths
从 index 取文件覆盖 work tree 中文件
git checkout <tree-ish> -- paths
0. repository 中的 commit 版本
1. 覆盖index 以及 work tree 中文件
git status
Changes to be committed
index 中的文件状态
git commit 可将之加入repo.
stage
git add/rm
unstage
git rese
Changed but not updated
work tree 中的文件状态
git add 可将之纳入 index
untracked files
git diff
面对多样的树 diff很丰富
git diff
比较 index 和 work tre
git diff --cached tree-ish
比较 index 和 tree-ish
git diff tree-ish
tree-ish 和 work tree
git diff tree1-ish tree2-ish
比较两个 tree
tree-ish
可以是文件树的一个部分
git diff v2.6.21:init v2.6.27:init
工作 流程
GIT 太灵活 太繁复
有多种流程在使用
tip
不要往 不是自己手动建立的分支上 直接提交
处理分支
cherry-pick
rebase
建立本地仓库
git remote update
得到 remote branch
建立 normal branch
提交时
0. 更新 remote branch
1. rebase normal branch
2. push/fetch 到上游
提供给他人跟踪的 分支 策略
0. 建立专用目录
1. 修订
2. 建立分支
3. 整理修订:
git merge --squash
git cherry-pick
不向自个儿的pub分支检入! 只是 git push
目的
只牵涉到三个分支
正式库里的上游分支
本地remote branch
本地工作分支
不要往 HEAD 指向的分支 push
会导致HEAD指向变化
纠正
git reset --hard
git reset && git checkout paths...
尽量不要 回滚公开分支
使他人从这个分支上 pull 造成麻烦
常用 命令
日用类
add
-i 选项支持细调
rm
删除文件
commit
提交一个新版本
describe
将某 个版 本用最近的 tag 加上 ~ 和 ^ 记法来显示
svn
与 Subversion 的双向交互
用 GIT 来当作更强更快的SVN客户端
观察
cat-file
判断对象类型
原样或者格式化输出对象内容
对于tree
ls-tree
cat-file -p
show
grep
在指定版本的文件树里搜索包含特定模式的行
diff
看文件内容修改情况
blame
查看每一行是从哪个版本来的
log
查看版本历史
ls-files
显示 index 和 work tree 中的文件列表
常用于 Shell 编程
shortlog
统计提交情况
show-branch
显示各个分支的提交情况
status
查看 index 和 work tree 中文件状态
分支
apply
应用补丁
checkout
切换分支
撤销修改
fetch
从远端代码库同步版本图到本地代码库
修改本地库里指定的 head 同远程指向同
push
与 fetch 功能类似
动作相反
merge
分支合并
mergetool
调用第三方合并工具合并
kdiff3(最好的图形三路合并工具)
pull
不推荐用这个命令
pull = fetch + merge
stash
暂存 index 和 work tree 的状态
稍候可以再恢复
bisect
对半查找版本树中引入 bug 的版本
高效处理非线破碎的版本树
mv
重命名、移动文件或者目录
GIT 并不在版本库里记录此类操作
reset
撤销 index 和 work tree 中未提交的修改
revert
撤销已经提交的修改
协作类 Email
format-patch
将分支上的修改生成补丁序列
am
从邮箱里提取补丁并应用
imap-send
send-email
管理类
配置
config
配置 git 的行为
system 范围
/etc/gitconfig
global 范围
$HOME/.gitconfig
repository 范围
.git/config
设置命令别名
git config --global alias.b branch
仓库
init
新建一个 GIT 版本库
cherry-pick
将某次提交打个补丁应用到当前分支
从其它分支提取所需的修改
clone
复制代码库
--depth 选项可以避免复制代码库中包含的整个版本历史
-s 用以在本地硬盘进行clone 时节省空间
clean
删除工作目录中没有被 git 管理的文件
rebase
将一个分支上的版本序列提取出来在另一个分支上重新提交一遍
保证上游分支历史是直线的
remote
管理 remote branches
空间
count-objects
统计 loose object 个数以及所占空间
gc
节省磁盘空间
loose object >>> packed object
bundle
将指定版本的各种对象以及 refs 打包
用以进行 离线开发
archive
打包指定版本文件树
支持 tar 和 zip 格式
模块 功能
git module
比较复杂
不用为好,,,