Skip to content

Commit d0a6313

Browse files
committed
Review 09-git-and-other-scms client-tfs v2
1 parent d0485f5 commit d0a6313

File tree

1 file changed

+30
-30
lines changed

1 file changed

+30
-30
lines changed

book/09-git-and-other-scms/sections/client-tfs.asc

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

33
(((Interoperation with other VCSs, TFS)))
44
(((TFS)))((("TFVC", see="TFS")))
5-
Git 在 Windows 开发者当中变得流行起来,如果你正在 Windows 上编写代码并且正在使用 Microsoft 的 Team Foundation Server (TFS),那会是个好机会
6-
TFS 是一个包含工作项目检测与跟踪、Scrum 或其他进度支持、代码审核、版本控制的协作套件。
7-
之前这里有一点困惑*TFS* 是服务器,它支持通过 Git 与它们自定义的 VCS 来管理源代码,这被他们称为 *TFVC*(Team Foundation Version Control)。
8-
Git 支持 TFS(发布在 2013 版本)的部分新功能,所以在那之前所有工具都将版本控制部分称为 ``TFS'',即使实际上他们大部分时间都在与 TFVC 工作。
5+
Git 在 Windows 开发者当中变得流行起来,如果你正在 Windows 上编写代码并且正在使用 Microsoft 的 Team Foundation Server (TFS),这会是个好机会
6+
TFS 是一个包含工作项目检测与跟踪、支持 Scrum 与其他流程管理方法、代码审核、版本控制的协作套件。
7+
这里有一点困惑*TFS* 是服务器,它支持通过 Git 与它们自定义的 VCS 来管理源代码,这被他们称为 *TFVC*(Team Foundation Version Control)。
8+
Git 支持 TFS( 2013 版本起)的部分新功能,所以在那之前所有工具都将版本控制部分称为 ``TFS'',即使实际上他们大部分时间都在与 TFVC 工作。
99

1010
如果发现你的团队在使用 TFVC 但是你更愿意使用 Git 作为版本控制客户端,这里为你准备了一个项目。
1111

12-
===== 哪个工具
12+
===== 选择哪个工具
1313

1414
(((git-tf)))(((git-tfs)))
1515
实际上,这里有两个工具:git-tf 与 git-tfs。
1616

17-
Git-tfs (可以 https://github.com/git-tfs/git-tfs[] 找到)是一个 .NET 项目,并且它只能运行在 Windows 上(截至发稿时)。
18-
为了与 Git 仓库一起工作,它使用了面向库的允许 Git 内部灵活的扩展性的高性能 Git 实现 libgit2 的 .NET 绑定。
19-
Libgit2 并不是一个完全的 Git 实现,所以在遇到不同时 git-tfs 实际上会调用命令行 Git 客户端来执行某些操作,因此在操作 Git 仓库时并没有任何功能限制。
20-
因为它使用 Visual Studio 程序集与服务器操作,它对 TFVC 的支持非常成熟。
17+
Git-tfs (可以在 https://github.com/git-tfs/git-tfs[] 找到)是一个 .NET 项目,它只能运行在 Windows 上(截至文章完成时)。
18+
为了操作 Git 仓库,它使用了 libgit2 的 .NET 绑定,一个可靠的面向库的 Git 实现,十分灵活且性能优越
19+
Libgit2 并不是一个完整的 Git 实现,为了弥补差距 git-tfs 实际上会调用 Git 命令行客户端来执行某些操作,因此在操作 Git 仓库时并没有任何功能限制。
20+
因为它使用 Visual Studio 程序集对服务器进行操作,所以它对 TFVC 的支持非常成熟。
2121
这并不意味着你需要接触那些程序集,但是意味着你需要安装 Visual Studio 的一个最近版本(2010 之后的任何版本,包括 2012 之后的 Express 版本),或者 Visual Studio SDK。
2222

23-
Git-tf(主页在 https://gittf.codeplex.com[])是一个 Java 项目,正在如此它可以运行在任何一个有 Java 运行时环境的电脑上。
24-
它通过 JGit(一个 Git 的 JVM 实现)来于 Git 仓库交互,这意味着事实上它没有 Git 功能上的限制。
23+
Git-tf(主页在 https://gittf.codeplex.com[])是一个 Java 项目,因此它可以运行在任何一个有 Java 运行时环境的电脑上。
24+
它通过 JGit(一个 Git 的 JVM 实现)来与 Git 仓库交互,这意味着事实上它没有 Git 功能上的限制。
2525
然而,相对于 git-tfs 它对 TFVC 的支持是有限的 - 例如,它不支持分支。
2626

2727
所以每个工具都有优点和缺点,每个工具都有它适用的情况。
2828
我们在本书中将会介绍它们两个的基本用法。
2929

3030
[NOTE]
3131
====
32-
你需要有一个 TFVC 基础的仓库来执行后续的指令
32+
你需要有一个基于 TFVC 的仓库来执行后续的指令
3333
现实中它们并没有 Git 或 Subversion 仓库那样多,所以你可能需要创建一个你自己的仓库。
3434
Codeplex (https://www.codeplex.com[]) 或 Visual Studio Online (http://www.visualstudio.com[]) 都是非常好的选择。
3535
====
3636

3737

38-
===== 开始:`git-tf`
38+
===== 使用:`git-tf`
3939

4040
和其它任何 Git 项目一样,你要做的第一件事是克隆。
4141
使用 `git-tf` 克隆看起来像这样:
@@ -45,7 +45,7 @@ Codeplex (https://www.codeplex.com[]) 或 Visual Studio Online (http://www.visua
4545
$ git tf clone https://tfs.codeplex.com:443/tfs/TFS13 $/myproject/Main project_git
4646
----
4747

48-
第一个参数是一个 TFVC 收藏集的 URL,第二个参数是 `$/project/branch` 的形式,第三个参数是将要创建的本地 Git 仓库路径(最后一项可以省略)。
48+
第一个参数是一个 TFVC 集的 URL,第二个参数类似于 `$/project/branch` 的形式,第三个参数是将要创建的本地 Git 仓库路径(最后一项可以省略)。
4949
Git-tf 同一时间只能工作在一个分支上;如果你想要检入一个不同的 TFVC 分支,你需要从那个分支克隆一份新的。
5050

5151
这会创建一个完整功能的 Git 仓库:
@@ -57,7 +57,7 @@ $ git log --all --oneline --decorate
5757
512e75a (HEAD, tag: TFS_C35190, origin_tfs/tfs, master) Checkin message
5858
----
5959

60-
这叫做 _shallow_ 克隆,意味着只下载了最新的变更集。
60+
这叫做 _浅_ 克隆,意味着只下载了最新的变更集。
6161
TFVC 并未设计成为每一个客户端提供一份全部历史记录的拷贝,所以 git-tf 默认行为是获得最新的版本,这样更快一些。
6262

6363
如果愿意多花一些时间,使用 `--deep` 选项克隆整个项目历史可能更有价值。
@@ -81,11 +81,11 @@ d44b17a (HEAD, tag: TFS_C35190, origin_tfs/tfs, master) Goodbye
8181
----
8282

8383
注意名字类似 `TFS_C35189` 的标签;这是一个帮助你知道 Git 提交与 TFVC 变更集关联的功能。
84-
这是一种表示它的优雅的方式,因为通过一个简单的 log 命令就可以看到你的提交是如何与 TFVC 中已存在快照关联起来的。
84+
这是一种优雅的表示方式,因为通过一个简单的 log 命令就可以看到你的提交是如何与 TFVC 中已存在快照关联起来的。
8585
它们并不是必须的(并且实际上可以使用 `git config git-tf.tag false` 来关闭它们)- git-tf 会在 `.git/git-tf` 文件中保存真正的提交与变更集的映射。
8686

8787

88-
===== 开始:`git-tfs`
88+
===== 使用:`git-tfs`
8989

9090
Git-tfs 克隆行为略为不同。
9191
观察:
@@ -105,7 +105,7 @@ C17 = d202b53f67bde32171d5078968c644e562f1c439
105105
C18 = 44cd729d8df868a8be20438fdeeefb961958b674
106106
----
107107

108-
注意 `--with-branches` 标记
108+
注意 `--with-branches` 选项
109109
Git-tfs 能够映射 TFVC 分支到 Git 分支,这个标记告诉它为每一个 TFVC 分支建立一个本地的 Git 分支。
110110
强烈推荐曾经在 TFS 中新建过分支或合并过分支的仓库使用这个标记,但是如果使用的服务器的版本比 TFS 2010 更老 - 在那个版本前,``分支'' 只是文件夹,所以 git-tfs 无法将它们与普通文件夹区分开。
111111

@@ -140,7 +140,7 @@ Git-tfs 使用这些标记而不是标签来关联 TFVC 变更集与 Git 提交
140140

141141
[NOTE]
142142
====
143-
无论你使用哪个工具,需要先设置几个 Git 配置选项来避免一大堆问题
143+
无论你使用哪个工具,都需要先设置几个 Git 配置选项来避免一些问题
144144
145145
[source,console]
146146
----
@@ -154,8 +154,8 @@ TFVC 与 TFS 有几个功能可能会增加你的工作流程的复杂性:
154154

155155
. TFVC 无法表示特性分支,这会增加一点复杂度。
156156
这会导致需要以 *非常* 不同的方式使用 TFVC 与 Git 表示的分支。
157-
. 要意识到 TFVC 允许用户从服务器上 ``checkout'' 文件并锁定它们,这样其他人就无法编辑了。
158-
这显示它不会阻止你在本地仓库中编辑它们,但是当推送你的修改到 TFVC 服务器时会出现问题。
157+
. 要意识到 TFVC 允许用户从服务器上 ``检出'' 文件并锁定它们,这样其他人就无法编辑了。
158+
显然它不会阻止你在本地仓库中编辑它们,但是当推送你的修改到 TFVC 服务器时会出现问题。
159159
. TFS 有一个 ``封闭'' 检入的概念,TFS 构建-测试循环必须在检入被允许前成功完成。
160160
这使用了 TFVC 的 ``shelve'' 功能,我们不会在这里详述。
161161
可以通过 git-tf 手动地模拟这个功能,并且 git-tfs 提供了封闭敏感的 `checkintool` 命令。
@@ -181,7 +181,7 @@ $ git log --oneline --graph --decorate --all
181181
----
182182

183183
我们想要拿到在 `4178a82` 提交的快照并将其推送到 TFVC 服务器。
184-
先说重要的:让我们看看自从上次连接后我们的队友是否做了一些事情
184+
先说重要的:让我们看看自从上次连接后我们的队友是否进行过改动
185185

186186
[source,console]
187187
----
@@ -203,7 +203,7 @@ $ git log --oneline --graph --decorate --all
203203
Team Project Creation Wizard
204204
----
205205

206-
看起来其他人也做了一些事情,现在我们有一个分叉的历史。
206+
看起来其他人也做了一些改动,现在我们有一个分叉的历史。
207207
这就是 Git 的优势,但是我们现在有两种处理的方式:
208208

209209
. 像一名 Git 用户一样自然的生成一个合并提交(毕竟,那也是 `git pull` 做的),git-tf 可以通过一个简单的 `git tf pull` 来帮你完成。
@@ -233,7 +233,7 @@ $ git log --oneline --graph --decorate --all
233233
----
234234

235235
现在我们准备好生成一个检入来推送到 TFVC 服务器上了。
236-
Git-tf 给你一个将自上次修改(默认的 `--shallow`)以来所有的修改生成的一个单独的变更集以及为每一个 Git 提交(`--deep`)生成的一个新的变更集。
236+
Git-tf 给你一个将自上次修改( `--shallow` 选项,默认启用)以来所有的修改生成的一个单独的变更集以及为每一个 Git 提交(`--deep`)生成的一个新的变更集。
237237
在本例中,我们将会创建一个变更集:
238238

239239
[source,console]
@@ -259,7 +259,7 @@ $ git log --oneline --graph --decorate --all
259259
要重点注意的是,不是每一个 Git 提交都需要在 TFVC 中存在一个相同的副本;例如 `6eb3eb5` 提交,在服务器上并不存在。
260260

261261
这就是主要的工作流程。
262-
这里有一些你需要考虑的其他注意事项
262+
有一些你需要考虑的其他注意事项
263263

264264
* 没有分支。
265265
Git-tf 同一时间只能从一个 TFVC 分支创建一个 Git 仓库。
@@ -285,7 +285,7 @@ PS> git log --oneline --graph --all --decorate
285285
* b75da1a New project
286286
----
287287

288-
让我们看一下在我们工作时有没有人完成其它的一些工作
288+
让我们看一下在我们工作时有没有人完成一些其它的工作
289289

290290
[source,powershell]
291291
----
@@ -307,10 +307,10 @@ PS> git log --all --oneline --graph --decorate
307307

308308
与 git-tf 相同,我们有两种基础选项来解决这个分叉历史问题:
309309

310-
. 变基来保持一条直线的历史
311-
. 合并来保持真正发生的事情
310+
. 通过变基来保持历史是线性的
311+
. 通过合并来保留改动
312312

313-
在本例中,我们将要做一个 ``deep'' 检入,也就是说每一个 Git 提交会变成一个 TFVC 变更集,所以我们想要变基。
313+
在本例中,我们将要做一个 ``'' 检入,也就是说每一个 Git 提交会变成一个 TFVC 变更集,所以我们想要变基。
314314

315315
[source,powershell]
316316
----
@@ -329,7 +329,7 @@ PS> git log --all --oneline --graph --decorate
329329
* b75da1a New project
330330
----
331331

332-
现在已经准备好通过检入我们的代码到 TFVC 服务器来完成我们的贡献
332+
现在已经准备好通过检入我们的代码到 TFVC 服务器来完成贡献
333333
我们这里将会使用 `rcheckin` 命令将 HEAD 到第一个 `tfs` 远程分支间的每一个 Git 提交转换为一个 TFVC 变更集(`checkin` 命令只会创建一个变更集,有些类似于压缩 Git 提交)。
334334

335335
[source,powershell]

0 commit comments

Comments
 (0)