过度或共存

之前的项目是 TFS 的,所以我们的 CI(持续集成)平台自然也是和 TFS 做整合的。

那在持续集成平台还未支持 git,或者想让 TFS 和 git 共存的时候应该怎么做的?

 

共处一室

第一步要做的是把同一个目录弄成 git 和 tfs 的目录。

git 需要在根目录生成一个 .git 的目录,而 TFS 会生成一些 .vssscc 文件,所以他们并不会产生冲突。

我是先有 TFS 再有 git,所以 TFS 不用做什么,直接在目录下初始化 git 就行了。

cd [your solution]
git init
git commit -m 'first commit'
git remote add origin git@[your address].git
git push -u origin master

 

接下来,请搞清楚你 TFS 下的这个库和 git 中的哪个分支一一对应?我对应了 git 中的 dev 分支。因为 TFS 中这个库本来就是开发的。

 

TSF 的代码更新到 git

TFS 的代码更新到 git 非常简单,直接在 VS 里获取最新版本,然后提交到 git 即可。

 

git 的代码更新到 TFS

git 更新的文件怎么同步到 TFS ?这个问题就纠结了,因为 TFS 不会对目录进行比较!你必须用 VS 操作,才可以把文件修改或添加到 TFS 中。

举个例子,别人在 git 上更新的一个文件,你拉取了下来,文件的确会被修改!

但是在 TFS 中,这个文件并没有被签出,TFS 也不认为你修改了它。如果就一个文件简单啊,直接手动签出就行了。

但是如果是大批量的修改怎么办?有删除,有修改,有新增分别怎么处理?

 

我这里主要用到了 TFS 的目录比较功能,选中你需要比较的目录,然后点比较:

compare

 

然后分别选择一下远程目录和本地目录:

compare2

 

看一下结果:

result

 

第一个文件有变更,第二行的是服务器有本地没有,第三行是本地有服务器没有。

 

打开协调界面,其实就是一个批量处理功能:

coordinate

 

这里不能按照默认的逻辑来做。先想想我们的核心目的是什么?

  1. 把 git 更新的文件签出
  2. 把 git 上新增的文件添加到远程
  3. 把 git 上删除的文件从远程删除

 

所以我先利用协调功能进行一次处理,但是这里不支持直接删除远程有而本地没有的文件,我们一步步来。

  1. 协调好文件后,更新的文件被签出了,新增的文件被添加了,删除的文件没有变动;
  2. 手动选择所有服务器有而本地没有的文件,右击——删除;
  3. 签入所有变更;
  4. 完成!

至此,所有 git 上的变更都更新到 TFS 上了,但还是蛮累的,所以这个方案也只能说是一种过度方案。

本作品由 Dozer 创作,采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。