1
1
=== 使用 Git 调试
2
2
3
3
Git 也提供了两个工具来辅助你调试项目中的问题。
4
- 由于 Git 被设计成适用于几乎所有类型的项目,这些工具是比较通用的,但它们可以在出现问题的时候帮助你找到 bug 或者错误 。
4
+ 由于 Git 被设计成适用于几乎所有类型的项目,这两个工具相当通用,但它们往往可以在出现问题时帮助你找到 bug 或者原因 。
5
5
6
6
[[r_file_annotation]]
7
7
==== 文件标注
8
8
9
9
如果你在追踪代码中的一个 bug,并且想知道是什么时候以及为何会引入,文件标注通常是最好用的工具。
10
- 它展示了文件中每一行最后一次修改的提交 。
11
- 所以,如果你在代码中看到一个有问题的方法,你可以使用 `git blame` 标注这个文件,查看这个方法每一行的最后修改时间以及是被谁修改的 。
12
- 这个例子使用 `-L` 选项来限制输出范围在第12至22行:
10
+ 它能显示任何文件中每行最后一次修改的提交记录 。
11
+ 所以,如果你在代码中看到一个有问题的方法,你可以使用 `git blame` 标注这个文件,查看这个方法每一行的最后修改时间以及作者 。
12
+ 下面这个例子使用 `-L` 选项来限制输出范围在第12至22行:
13
13
14
14
[source,console]
15
15
----
@@ -28,11 +28,11 @@ $ git blame -L 12,22 simplegit.rb
28
28
----
29
29
30
30
请注意,第一个字段是最后一次修改该行的提交的部分 SHA-1 值。
31
- 接下来两个字段的值是从提交中提取出来的——作者的名字以及提交的时间——所以你就可以很轻易地找到是谁在什么时候修改了那一行 。
31
+ 接下来两个字段的值是从提交中提取出来的——作者的名字以及提交的时间——所以你就可以很轻易地知道是谁在什么时候修改了那一行 。
32
32
接下来就是行号和文件内容。
33
- 注意一下 `^4832fe2` 这个提交的那些行,这些指的是这个文件第一次提交的那些行 。
34
- 这个提交是这个文件第一次加入到这个项目时的提交 ,并且这些行从未被修改过。
35
- 这会带来小小的困惑,因为你已经至少看到三种 Git 使用 `^` 来修饰一个提交的 SHA-1 值的不同含义,但这里确实就是这个意思。
33
+ 注意一下 `^4832fe2` 这个提交的几行,它们指的是这个文件第一次提交时的那些行 。
34
+ 这个提交是此文件第一次加入到这个项目时的提交 ,并且这些行从未被修改过。
35
+ 这会带来小小的困惑,因为目前你至少已经看到三种 Git 使用 `^` 来修饰一个提交的 SHA-1 值的不同含义,但这里确实就是这个意思。
36
36
37
37
另一件比较酷的事情是 Git 不会显式地记录文件的重命名。
38
38
它会记录快照,然后在事后尝试计算出重命名的动作。
@@ -74,7 +74,7 @@ ad11ac80 GITPackUpload.m (Scott 2009-03-24 150)
74
74
你重新查看了你的代码,发现这个问题是可以被重现的,但是你不知道哪里出了问题。
75
75
你可以用二分法来找到这个问题。
76
76
首先执行 `git bisect start` 来启动,接着执行 `git bisect bad` 来告诉系统当前你所在的提交是有问题的。
77
- 然后你必须告诉 bisect 已知的最后一次正常状态是哪次提交,使用 `git bisect good [good_commit]`:
77
+ 然后你必须使用 `git bisect good [good_commit]`,告诉 bisect 已知的最后一次正常状态是哪次提交 :
78
78
79
79
[source,console]
80
80
----
@@ -108,7 +108,7 @@ Bisecting: 1 revisions left to test after this
108
108
----
109
109
110
110
这个提交是正常的,现在 Git 拥有的信息已经可以确定引入问题的位置在哪里。
111
- 它会告诉你第一个错误提交的 SHA-1 值并显示一些提交说明,以及哪些文件在那次提交里修改过 ,这样你可以找出引入 bug 的根源:
111
+ 它会告诉你第一个错误提交的 SHA-1 值并显示一些提交说明,以及哪些文件在那次提交里被修改过 ,这样你可以找出引入 bug 的根源:
112
112
113
113
[source,console]
114
114
----
@@ -124,7 +124,7 @@ Date: Tue Jan 27 14:48:32 2009 -0800
124
124
f24d3c6ebcfc639b1a3814550e62d60b8e68a8e4 M config
125
125
----
126
126
127
- 当你完成这些操作之后,你应该执行 `git bisect reset` 重置你的 HEAD 指针到最开始的位置,否则你会停留在一个很奇怪的状态 :
127
+ 当你完成这些操作之后,你应该执行 `git bisect reset` 重置你的 HEAD 指针到最开始的位置,否则你会停留在一个奇怪的状态 :
128
128
129
129
[source,console]
130
130
----
@@ -142,5 +142,5 @@ $ git bisect start HEAD v1.0
142
142
$ git bisect run test-error.sh
143
143
----
144
144
145
- Git 会自动在每个被检出的提交里执行 `test-error.sh` 直到找到第一个项目不正常的提交 。
145
+ Git 会自动在每个被检出的提交里执行 `test-error.sh`,直到找到项目第一个不正常的提交 。
146
146
你也可以执行 `make` 或者 `make tests` 或者其他东西来进行自动化测试。
0 commit comments