Git 导出所有日志记录到文件中
git log --after="2018-08-21 00:00:00" --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset - 【%an】 %C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)%Creset' >commit20200521_graph.log
git log统计
统计一段时间
git log --after="2018-05-21 00:00:00" --before="2018-05-25 23:59:59"
查看提交记录修改文件
git log -p -U1 --word-diff --since ="2018-07-19 00:00:00" --until="2018-07-19 23:00:00" --name-only --oneline --reverse
查看简要提交信息
git log --oneline --since ="2018-07-19 00:00:00" --until=="2018-07-19 23:00:00"
导出操作日志
git log --pretty=format:"%h:%an 提交信息:%s" --since ="2018-07-19 00:00:00" --until="2018-07-19 23:00:00"
git log --after="2018-08-21 00:00:00" --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset - 【%an】 %C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)%Creset'
git log 参数
格式化git提交日志
选项 说明
-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 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 提交说明
demo例子:
git log --no-merges --after="2018-08-17 10:00:00" --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%h - 【%an】%d %s (%cd)'
Git 导出所有日志记录到文件中git log --after="2018-08-21 00:00:00" --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset - 【%an】 %C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)%Creset' >commit20200521_graph.loggit log统计统计一段时间git log --a.
$ python3
git
2csv.py <LOCAL>
文件
将保存在创建的output目录
中
。 数据
中
包括哈希,作者详细信息,日期,提交的主题和正文,如下所示。
sha,author,date,subject,body
2fd46a531d8ce6db70e38e259b5c5debc29900a9,First Last <me>,Mon Dec 23 21:30:30 2019 -0800,Update file again,This was tricky.,
117a7df2f87ed999813de921ce9dd2e58f868fc
导出
日志
到
文件
:
git
log --pretty=format:"%ai,%an:%s" --since="100 day ago" >> ~/Desktop/commit.log
git
log --date=iso --pretty=format:'"%h","%an","%ad","%s"' >> ~/Desktop/commit.csv
git
log 参数配置
显示格式和内容
-p 或 --patch
显示每次提交所引入的差异
-n n为数字
1 起步 1
1.1 关于版本控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 本地版本控制系统 . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 集
中
化的版本控制系统 . . . . . . . . . . . . . . . . . . . . 1
1.1.3 分布式版本控制系统 . . . . . . . . . . . . . . . . . . . . . 2
1.2
Git
的历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3
Git
基础要点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 直接快照,而非比较差异 . . . . . . . . . . . . . . . . . . . 4
1.3.2 近乎所有操作都可本地执行 . . . . . . . . . . . . . . . . . . 5
1.3.3 时刻保持数据完整性 . . . . . . . . . . . . . . . . . . . . . 5
1.3.4 多数操作仅添加数据 . . . . . . . . . . . . . . . . . . . . . 5
1.3.5 三种状态 . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 安装
Git
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.1 从源代码安装 . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.2 在 Linux 上安装 . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.3 在 Mac 上安装 . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.4 在 Windows 上安装 . . . . . . . . . . . . . . . . . . . . . . 8
1.5 初次运行
Git
前的配置 . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.1 用户信息 . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.2 文本编辑器 . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.3 差异分析工具 . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.4 查看配置信息 . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6 获取帮助 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2
Git
基础 13
2.1 取得项目的
Git
仓库 . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 从当前目录初始化 . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2 从现有仓库克隆 . . . . . . . . . . . . . . . . . . . . . . . 14
2.2
记录
每次更新到仓库 . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.1 检查当前
文件
状态 . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2 跟踪新
文件
. . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.3 暂存已修改
文件
. . . . . . . . . . . . . . . . . . . . . . . 16
2.2.4 忽略某些
文件
. . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.5 查看已暂存和未暂存的更新 . . . . . . . . . . . . . . . . . . 18
2.2.6 提交更新 . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.7 跳过使用暂存区域 . . . . . . . . . . . . . . . . . . . . . . 21
2.2.8 移除
文件
. . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.9 移动
文件
. . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3 查看提交历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1 限制输出长度 . . . . . . . . . . . . . . . . . . . . . . . . 28
2.3.2 使用图形化工具查阅提交历史 . . . . . . . . . . . . . . . . . 29
2.4 撤消操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4.1 修改最后一次提交 . . . . . . . . . . . . . . . . . . . . . . 29
2.4.2 取消已经暂存的
文件
. . . . . . . . . . . . . . . . . . . . . 30
2.4.3 取消对
文件
的修改 . . . . . . . . . . . . . . . . . . . . . . 31
2.5 远程仓库的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.1 查看当前的远程库 . . . . . . . . . . . . . . . . . . . . . . 32
2.5.2 添加远程仓库 . . . . . . . . . . . . . . . . . . . . . . . . 32
2.5.3 从远程仓库抓取数据 . . . . . . . . . . . . . . . . . . . . . 33
2.5.4 推送数据到远程仓库 . . . . . . . . . . . . . . . . . . . . . 33
2.5.5 查看远程仓库信息 . . . . . . . . . . . . . . . . . . . . . . 34
2.5.6 远程仓库的删除和重命名 . . . . . . . . . . . . . . . . . . . 35
2.6 打标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.6.1 列显已有的标签 . . . . . . . . . . . . . . . . . . . . . . . 35
2.6.2 新建标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6.3 含附注的标签 . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6.4 签署标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.6.5 轻量级标签 . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.6.6 验证标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.6.7 后期加注标签 . . . . . . . . . . . . . . . . . . . . . . . . 38
2.6.8 分享标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.7 技巧和窍门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.7.1 自动完成 . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.7.2
Git
命令别名 . . . . . . . . . . . . . . . . . . . . . . . . 41
2.8 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3
Git
分支 43
3.1 何谓分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2 基本的分支与合并 . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.1 基本分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.2.2 基本合并 . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2.3 冲突的合并 . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.3 分支管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.4 分支式
工作
流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.1 长期分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.4.2 特性分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.5 远程分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.5.1 推送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.5.2 跟踪分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.5.3 删除远程分支 . . . . . . . . . . . . . . . . . . . . . . . . 62
3.6 衍合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.6.1 衍合基础 . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.6.2 更多有趣的衍合 . . . . . . . . . . . . . . . . . . . . . . . 64
3.6.3 衍合的风险 . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4 服务器上的
Git
69
4.1 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.1.1 本地协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 69
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.1.2 SSH 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 70
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.1.3
Git
协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 71
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.1.4 HTTP/S 协议 . . . . . . . . . . . . . . . . . . . . . . . . . 72
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2 在服务器部署
Git
. . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2.1 将纯目录转移到服务器 . . . . . . . . . . . . . . . . . . . . 73
4.2.2 小型安装 . . . . . . . . . . . . . . . . . . . . . . . . . . 74
SSH 连接 . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.3 生成 SSH 公钥 . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.4 架设服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.5 公共访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.6 网页界面
Git
Web . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.7 权限管理器
Git
osis . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.8
Git
进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.9
Git
托管服务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.9.1
Git
Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.9.2 建立账户 . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.9.3 建立新仓库 . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.9.4 从 Subversion
中
导入项目 . . . . . . . . . . . . . . . . . . 89
4.9.5 开始合作 . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.9.6 项目页面 . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.9.7 派生(forking)项目 . . . . . . . . . . . . . . . . . . . . . 92
4.9.8
Git
Hub 小节 . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.10 小节 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5 分布式
Git
95
5.1 分布式
工作
流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.1.1 集
中
式
工作
流 . . . . . . . . . . . . . . . . . . . . . . . . 95
5.1.2 集成管理员
工作
流 . . . . . . . . . . . . . . . . . . . . . . 96
5.1.3 司令官与副官
工作
流 . . . . . . . . . . . . . . . . . . . . . 97
5.2 为项目作贡献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.2.1 提交指南 . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.2.2 私有的小型团队 . . . . . . . . . . . . . . . . . . . . . . . 99
5.2.3 私有团队间协作 . . . . . . . . . . . . . . . . . . . . . . . 104
5.2.4 公开的小型项目 . . . . . . . . . . . . . . . . . . . . . . . 108
5.2.5 公开的大型项目 . . . . . . . . . . . . . . . . . . . . . . . 112
5.2.6 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.3 项目的管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.3.1 使用特性分支进行
工作
. . . . . . . . . . . . . . . . . . . . 115
5.3.2 采纳来自邮件的补丁 . . . . . . . . . . . . . . . . . . . . . 115
使用 apply 命令应用补丁 . . . . . . . . . . . . . . . . . . . 115
使用 am 命令应用补丁 . . . . . . . . . . . . . . . . . . . . 116
5.3.3 检出远程分支 . . . . . . . . . . . . . . . . . . . . . . . . 118
5.3.4 决断代码取舍 . . . . . . . . . . . . . . . . . . . . . . . . 118
5.3.5 代码集成 . . . . . . . . . . . . . . . . . . . . . . . . . . 119
合并流程 . . . . . . . . . . . . . . . . . . . . . . . . . . 120
大项目的合并流程 . . . . . . . . . . . . . . . . . . . . . . 122
衍合与挑拣(cherry-pick)的流程 . . . . . . . . . . . . . . . 122
5.3.6 给发行版签名 . . . . . . . . . . . . . . . . . . . . . . . . 123
5.3.7 生成内部版本号 . . . . . . . . . . . . . . . . . . . . . . . 124
5.3.8 准备发布 . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.3.9 制作简报 . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.4 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
6
Git
工具 127
6.1 修订版本(Revision)选择 . . . . . . . . . . . . . . . . . . . . . . 127
6.1.1 单个修订版本 . . . . . . . . . . . . . . . . . . . . . . . . 127
6.1.2 简短的SHA . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.1.3 关于 SHA-1 的简短说明 . . . . . . . . . . . . . . . . . . . . 128
6.1.4 分支引用 . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6.1.5 引用
日志
里的简称 . . . . . . . . . . . . . . . . . . . . . . 129
6.1.6 祖先引用 . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.1.7 提交范围 . . . . . . . . . . . . . . . . . . . . . . . . . . 132
双点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
多点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
三点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.2 交互式暂存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
6.2.1 暂存和撤回
文件
. . . . . . . . . . . . . . . . . . . . . . . 134
6.2.2 暂存补丁 . . . . . . . . . . . . . . . . . . . . . . . . . . 136
6.3 储藏(Stashing) . . . . . . . . . . . . . . . . . . . . . . . . . . 137
6.3.1 储藏你的
工作
. . . . . . . . . . . . . . . . . . . . . . . . 138
6.3.2 从储藏
中
创建分支 . . . . . . . . . . . . . . . . . . . . . . 139
6.4 重写历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.4.1 改变最近一次提交 . . . . . . . . . . . . . . . . . . . . . . 140
6.4.2 修改多个提交说明 . . . . . . . . . . . . . . . . . . . . . . 141
6.4.3 重排提交 . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.4.4 压制(Squashing)提交 . . . . . . . . . . . . . . . . . . . . . 143
6.4.5 拆分提交 . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.4.6 核弹级选项: filter-branch . . . . . . . . . . . . . . . . . . 144
从所有提交
中
删除一个
文件
. . . . . . . . . . . . . . . . . . 144
将一个子目录设置为新的根目录 . . . . . . . . . . . . . . . . 145
全局性地更换电子邮件地址 . . . . . . . . . . . . . . . . . . 145
6.5 使用
Git
调试 . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
6.5.1
文件
标注 . . . . . . . . . . . . . . . . . . . . . . . . . . 146
6.5.2 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . 147
6.6 子模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
6.6.1 子模块初步 . . . . . . . . . . . . . . . . . . . . . . . . . 149
6.6.2 克隆一个带子模块的项目 . . . . . . . . . . . . . . . . . . . 151
6.6.3 上层项目 . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.6.4 子模块的问题 . . . . . . . . . . . . . . . . . . . . . . . . 153
6.7 子树合并 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
6.8 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
7 自定义
Git
157
7.1 配置
Git
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.1.1 客户端基本配置 . . . . . . . . . . . . . . . . . . . . . . . 157
core.editor . . . . . . . . . . . . . . . . . . . . . . . . . 158
commit.template . . . . . . . . . . . . . . . . . . . . . . . 158
core.pager . . . . . . . . . . . . . . . . . . . . . . . . . 159
user.signingkey . . . . . . . . . . . . . . . . . . . . . . . 159
core.excludesfile . . . . . . . . . . . . . . . . . . . . . . 159
help.autocorrect . . . . . . . . . . . . . . . . . . . . . . 159
7.1.2
Git
中
的着色 . . . . . . . . . . . . . . . . . . . . . . . . . 160
color.ui . . . . . . . . . . . . . . . . . . . . . . . . . . 160
color.* . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.1.3 外部的合并与比较工具 . . . . . . . . . . . . . . . . . . . . 160
7.1.4 格式化与空白 . . . . . . . . . . . . . . . . . . . . . . . . 163
core.autocrlf . . . . . . . . . . . . . . . . . . . . . . . . 163
core.whitespace . . . . . . . . . . . . . . . . . . . . . . . 164
7.1.5 服务器端配置 . . . . . . . . . . . . . . . . . . . . . . . . 164
receive.fsckObjects . . . . . . . . . . . . . . . . . . . . . 164
receive.denyNonFastForwards . . . . . . . . . . . . . . . . . 165
receive.denyDeletes . . . . . . . . . . . . . . . . . . . . . 165
7.2
Git
属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
7.2.1 二进制
文件
. . . . . . . . . . . . . . . . . . . . . . . . . 165
识别二进制
文件
. . . . . . . . . . . . . . . . . . . . . . . 165
比较二进制
文件
. . . . . . . . . . . . . . . . . . . . . . . 166
7.2.2 关键字扩展 . . . . . . . . . . . . . . . . . . . . . . . . . 168
7.2.3
导出
仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . 170
export-ignore . . . . . . . . . . . . . . . . . . . . . . . . 170
export-subst . . . . . . . . . . . . . . . . . . . . . . . . 170
7.2.4 合并策略 . . . . . . . . . . . . . . . . . . . . . . . . . . 171
7.3
Git
挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
7.3.1 安装一个挂钩 . . . . . . . . . . . . . . . . . . . . . . . . 171
7.3.2 客户端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . 171
提交
工作
流挂钩 . . . . . . . . . . . . . . . . . . . . . . . 171
E-mail
工作
流挂钩 . . . . . . . . . . . . . . . . . . . . . . 172
其他客户端挂钩 . . . . . . . . . . . . . . . . . . . . . . . 172
7.3.3 服务器端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . 173
pre-receive 和 post-receive . . . . . . . . . . . . . . . . . 173
update . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.4
Git
强制策略实例 . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.4.1 服务端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . 173
指定特殊的提交信息格式 . . . . . . . . . . . . . . . . . . . 174
实现基于用户的访问权限控制列表(ACL)系统 . . . . . . . . . . 175
只允许 Fast-Forward 类型的推送 . . . . . . . . . . . . . . . 177
7.4.2 Client-Side Hooks . . . . . . . . . . . . . . . . . . . . . . 179
7.5 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
8
Git
与其他系统 183
8.1
Git
与 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . 183
8.1.1
git
svn . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
8.1.2 初始设定 . . . . . . . . . . . . . . . . . . . . . . . . . . 184
8.1.3 入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
8.1.4 提交到 Subversion . . . . . . . . . . . . . . . . . . . . . . 186
8.1.5 拉取最新进展 . . . . . . . . . . . . . . . . . . . . . . . . 187
8.1.6
Git
分支问题 . . . . . . . . . . . . . . . . . . . . . . . . 188
8.1.7 Subversion 分支 . . . . . . . . . . . . . . . . . . . . . . . 189
创建新的 SVN 分支 . . . . . . . . . . . . . . . . . . . . . . 189
8.1.8 切换当前分支 . . . . . . . . . . . . . . . . . . . . . . . . 190
8.1.9 对应 Subversion 的命令 . . . . . . . . . . . . . . . . . . . 190
SVN 风格的历史 . . . . . . . . . . . . . . . . . . . . . . . 190
SVN
日志
. . . . . . . . . . . . . . . . . . . . . . . . . . 191
SVN 服务器信息 . . . . . . . . . . . . . . . . . . . . . . . 191
略 Subversion 之所略 . . . . . . . . . . . . . . . . . . . . 192
8.1.10
Git
-Svn 总结 . . . . . . . . . . . . . . . . . . . . . . . . 192
8.2 迁移到
Git
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
8.2.1 导入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
8.2.2 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . 193
8.2.3 Perforce . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8.2.4 自定导入脚本 . . . . . . . . . . . . . . . . . . . . . . . . 196
8.3 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
9
Git
内部原理 203
9.1 底层命令 (Plumbing) 和高层命令 (Porcelain) . . . . . . . . . . . . . 203
9.2
Git
对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
9.2.1 tree (树) 对象 . . . . . . . . . . . . . . . . . . . . . . . 206
9.2.2 commit (提交) 对象 . . . . . . . . . . . . . . . . . . . . . 208
9.2.3 对象存储 . . . . . . . . . . . . . . . . . . . . . . . . . . 210
9.3
Git
References . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
9.3.1 HEAD 标记 . . . . . . . . . . . . . . . . . . . . . . . . . . 213
9.3.2 Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
9.3.3 Remotes . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
9.4 Packfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
9.5 The Refspec . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
9.5.1 推送 Refspec . . . . . . . . . . . . . . . . . . . . . . . . 220
9.5.2 删除引用 . . . . . . . . . . . . . . . . . . . . . . . . . . 221
9.6 传输协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
9.6.1 哑协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
9.6.2 智能协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 223
上传数据 . . . . . . . . . . . . . . . . . . . . . . . . . . 223
下载数据 . . . . . . . . . . . . . . . . . . . . . . . . . . 224
9.7 维护及数据恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
9.7.1 维护 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
9.7.2 数据恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . 226
9.7.3 移除对象 . . . . . . . . . . . . . . . . . . . . . . . . . . 228
9.8 总结 . . . . .
多个补丁一个
文件
:
git
format-patch -提交个数 --stdout -- drivers/staging/wlags49_h2/>../wlags49_patches/all.patch
每一个补丁一个
文件
:
git
format-patch -提交个数 -o ../目录名称 -- drivers/staging/wlags49_h2/
数字设的足够大就是全部。。。
git
format-patch for all the commits to a file - Stack O
最近在提取
git
上项目的数据集,用到了一些常用的
git
命令,现做一些小结:
1.将
Git
上的项目拷贝到本地
在
git
命令行
中
,通过
git
clone ,即可将项目拷贝到本地
文件
中
,如:
$
git
clone https://
git
hub.com/jquery/jquery.
git
通过这个命令即可在本地主机生成一个和远程主机库名相同的目录,当然~如果要将该项目存放在指定目录