Skip to content

Commit 5341427

Browse files
committed
Update libgit2.asc
1 parent fa79274 commit 5341427

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

book/B-embedding-git/sections/libgit2.asc

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
(((libgit2)))(((C)))
44
另外一种可以列入考虑的方式就是使用 Libgit2 。
5-
Libgit2 是一个致力于提供一个更好的 API 去让其它程序使用的 Git 的非依赖性的工具
6-
你可以在 http://libgit2.github.com[] 上找到它
5+
Libgit2 是一个 Git 的非依赖性的工具,它致力于为其他程序使用 Git 提供更好的 API
6+
你可以在 http://libgit2.github.com[] 找到它
77

88
首先,让我们来看一下 C API 长啥样。
99
这是一个旋风式旅行。
@@ -30,17 +30,17 @@ git_commit_free(commit);
3030
git_repository_free(repo);
3131
-----
3232

33-
首两行打开一个 Git 版本库。
33+
前两行打开一个 Git 版本库。
3434
这个 `git_repository` 类型代表了一个在内存中带有缓存的指向一个版本库的句柄。
3535
这是最简单的方法,只是你必须知道一个版本库的工作目录或者一个 `.git` 文件夹的精确路径。
3636
另外还有 `git_repository_open_ext` ,它包括了带选项的搜索, `git_clone` 及其同类可以用来做远程版本库的本地克隆, `git_repository_init` 则可以创建一个全新的版本库。
3737

38-
第二堆代码使用了一种 rev-parse 语法(要了解更多,请看 <<_branch_references>> )来得到 HEAD 真正指向的提交。
39-
返回类型是一个 `git_object` 指针,它代表了某个存在于一个版本库中的 Git 对象数据库的东西
38+
第二段代码使用了一种 rev-parse 语法(要了解更多,请看 <<_branch_references>> )来得到 HEAD 真正指向的提交。
39+
返回类型是一个 `git_object` 指针,它指代位于版本库里的 Git 对象数据库中的某个东西
4040
`git_object` 实际上是几种不同的对象的 ``父'' 类型,每个 ``'' 类型的内存布局和 `git_object` 是一样的,所以你能安全地把它们转换为正确的类型。
4141
在上面的例子中, `git_object_type(commit)` 会返回 `GIT_OBJ_COMMIT` ,所以转换成 `git_commit` 指针是安全的。
4242

43-
下一堆展现了访问一个提交的详情的方法
43+
下一段展示了如何访问一个提交的详情
4444
最后一行使用了 `git_oid` 类型,这是 Libgit2 表示一个 SHA-1 哈希的方法。
4545

4646
从这个例子中,我们可以看到一些模式:
@@ -53,8 +53,8 @@ git_repository_free(repo);
5353
5454
(((Ruby)))
5555
最后一点意味着你应该不会在使用 Libgit2 时编写 C 语言程序。
56-
但幸运的是,有许多可用的各种语言的绑定,它们可以让你更加容易地在你特定的语言和环境中操作一个 Git 版本库。
57-
我们来看一下下面这个被叫做 Rugged 的用 Libgit2 的 Ruby 绑定写成的例子,你可以在 https://github.com/libgit2/rugged[] 看到它
56+
但幸运的是,有许多可用的各种语言的绑定,让你更加容易地在你特定的语言和环境中操作 Git 版本库。
57+
我们来看一下下面这个用 Libgit2 的 Ruby 绑定写成的例子,它叫 Rugged,你可以在 https://github.com/libgit2/rugged[] 找到它
5858

5959
[source,ruby]
6060
----
@@ -66,8 +66,8 @@ tree = commit.tree
6666
----
6767

6868
你可以发现,代码看起来更加清晰了。
69-
首先, Rugged 使用异常机制,它可以收集类似于 `ConfigError` 或者 `ObjectError` 之类的东西来告知错误的情况。
70-
其次,不需要明确的资源释放,因为 Ruby 是垃圾回收的
69+
首先, Rugged 使用异常机制,它可以抛出类似于 `ConfigError` 或者 `ObjectError` 之类的东西来告知错误的情况。
70+
其次,不需要明确的资源释放,因为 Ruby 是支持垃圾回收的
7171
我们来看一下一个稍微复杂一点的例子:从头开始制作一个提交。
7272

7373
[source,ruby]
@@ -105,8 +105,8 @@ commit = repo.lookup(commit_id) # <8>
105105
<7> 在做一个提交的过程中, Rugged (和 Libgit2 )能在需要时更新引用。
106106
<8> 返回值是一个新提交对象的 SHA-1 哈希,你可以用它来获得一个 `Commit` 对象。
107107

108-
Ruby 的代码很好很简洁,另一方面因为 Libgit2 承受了重担,所以代码运行起来其实速度也不赖。
109-
如果你不是一个 Ruby 程序员,我们在 <<_libgit2_bindings>> 有说到其它的一些绑定
108+
Ruby 的代码很好很简洁,另一方面因为 Libgit2 做了大量工作,所以代码运行起来其实速度也不赖。
109+
如果你不是一个 Ruby 程序员,我们在 <<_libgit2_bindings>> 有提到其它的一些绑定
110110

111111

112112
==== 高级功能
@@ -116,7 +116,7 @@ Libgit2 有几个超过核心 Git 的能力。
116116
Libgit2 允许为自定义后端指定配置、引用的存储以及对象数据库,
117117

118118
我们来看一下它究竟是怎么工作的。
119-
下面的例子借用自 Libgit2 团队提供的后端样本集 (可以在 https://github.com/libgit2/libgit2-backends[] 上看到)。
119+
下面的例子借用自 Libgit2 团队提供的后端样本集 (可以在 https://github.com/libgit2/libgit2-backends[] 上找到)。
120120
一个对象数据库的自定义后端是这样建立的:
121121

122122
[source,c]
@@ -142,7 +142,7 @@ _(注意:这个错误被捕获了,但是没有被处理。我们希望你的
142142
<4> 打开一个版本库,并让它使用我们的 ODB 来寻找对象。
143143

144144
但是 `git_odb_backend_mine` 是个什么东西呢?
145-
嗯,那是一个你自己的 ODB 实现的构造器,并且你能在那里做任何你想做的事,如果你能正确地填写 `git_odb_backend` 结构的话
145+
嗯,那是一个你自己的 ODB 实现的构造器,并且你能在那里做任何你想做的事,前提是你能正确地填写 `git_odb_backend` 结构
146146
它看起来_应该_是这样的:
147147

148148
[source,c]
@@ -177,14 +177,14 @@ int git_odb_backend_mine(git_odb_backend **backend_out, /*…*/)
177177
其余都是随意的,这个结构的大小可以随心所欲。
178178

179179
这个初始化函数为该结构分配内存,设置自定义的上下文,然后填写它支持的 `parent` 结构的成员。
180-
阅读 Libgit2 的 `include/git2/sys/odb_backend.h` 源码以了解全部调用标志,你的特定的使用情况会帮助你决定你想支持的调用标志
180+
阅读 Libgit2 的 `include/git2/sys/odb_backend.h` 源码以了解全部调用签名,你特定的使用环境会帮你决定使用哪一种调用签名
181181

182182
[[_libgit2_bindings]]
183183
==== 其它绑定
184184

185185
Libgit2 有很多种语言的绑定。
186-
在这篇文章中,我们展现了一个使用了几个更加完整的绑定包的小例子,这些库存在于许多种语言中,包括 C++, Go, Node.js, Erlang, 以及 JVM ,它们都已经处于不同程度的成熟阶段
187-
官方收集的绑定可以在这个版本库中浏览得到:https://github.com/libgit2[] 。
186+
在这篇文章中,我们展现了一个使用了几个更加完整的绑定包的小例子,这些库存在于许多种语言中,包括 C++, Go, Node.js, Erlang, 以及 JVM ,它们的成熟度各不相同
187+
官方的绑定集合可以通过浏览这个版本库得到:https://github.com/libgit2[] 。
188188
我们写的代码将返回当前 HEAD 指向的提交的提交信息(就像 `git log -1` 那样)。
189189

190190

@@ -205,9 +205,9 @@ new Repository(@"C:\path\to\repo").Head.Tip.Message;
205205
===== objective-git
206206

207207
(((Apple)))(((Objective-C)))(((Cocoa)))
208-
如果你的应用运行在一个 Apple 平台上,你很有可能使用 Objective-C 来作为实现它的语言
208+
如果你的应用运行在一个 Apple 平台上,你很有可能使用 Objective-C 作为实现语言
209209
Objective-Git (https://github.com/libgit2/objective-git[]) 是这个环境下的 Libgit2 绑定。
210-
一个例程看起来类似这样
210+
一个例子看起来类似这样
211211

212212
[source,objc]
213213
-----
@@ -223,7 +223,7 @@ Objective-git 与 Swift 完美兼容,所以你把 Objective-C 落在一边的
223223

224224
(((Python)))
225225
Python 的 Libgit2 绑定叫做 Pygit2 ,你可以在 http://www.pygit2.org/[] 找到它。
226-
我们和例程
226+
我们的示例程序
227227

228228
[source,python]
229229
----

0 commit comments

Comments
 (0)