如果要选出最近几年在软件工程领域最热的技术,那毋庸置疑就是git了。作为分布式源代码管理(DVCS)的代表,git以其超快的操作,便捷的分支合并模型和P2P模式的代码分享模式让软件开发团队的很多复杂协作成为可能,也大大提高了开发团队的效率。虽然如此,集中式的源代码管理(CVCS)仍然在很多大型软件团队中使用,这其中自然有历史原因,但集中式源代码控制所具备的很多特性也是分布式所不具备的,比如:代码资产的安全性,细化到文件级别的权限管理能力(使用某些插件或者hook,git也可以做到,但这不是git内置的功能),对签出权限的独立控制,大型二进制文件的存储效率。

在TFS和VSTS中,从2012年开始提供了GIT的支持,但是我们一直不能在同一个项目中混合使用集中式的TFVC和分布式的GIT,这让很多希望尝试GIT的用户不得不创建新的基于GIT的项目,并将原有的代码导入到新的项目中,如果同时还在使用工作项和构建等其他功能,就不得不在不同的项目之间进行切换才能完成某些操作。在TFS 2015 UPDATE 1中,这一情况已经得到改变,你可以很容易的在一个已有的项目中添加TFVC/GIT的存储库。

基于本文开始所述的原因,有些团队可能会选择同时使用2种配置库,也可能会将项目的某一部分迁移至GIT而保留其他部分在TFVC中。一般来说,我们需要综合考虑以下因素:

  • -配置库中是否保存了大量的二进制文件,如:WORD文档,EXCEL文档等。很多团队将项目文档也纳入配置库管理范畴,这种情况非常普遍。对于开发人员来说,学习和使用GIT不是什么问题,但是对于非技术人员就会很困难,所以这部分我们建议保留在TFVC中并给非技术人员安装TFS PowerTools,让他们可以在文件管理器中直接签入签出代码。
  • 某些需要文件级别权限管理的项目,一般在大型企业或者存在外包团队的情况下会比较需要这种安全性配置。
  • 对于某些超大型的项目,我们往往会将的项目放入独立的repo中进行管理,如:将$/TeamProjectA/Main/Project1 转换到独立的GIT库,将Project2转换到另外一个GIT库

TFVC至GIT的迁移方案(保留历史纪录)
如果你之前使用的是TFVC,那么你可以使用以下命令将服务器上的TFVC库先转换成本地的GIT库,然后再签入到新创建的GIT库中。

# 这里的--deep参数将会确保所有的TFVC changeset可以转换被本地GIT库的commit历史
# $/TeamProjectA/Main 这个路径可以指向配置库中的任何子路径,这样我们可以按照项目分离成不同的repo
git-tf clone http://myserver:8080/tfs $/TeamProjectA/Main --deep
# 使用git remote将本地库链接到远程的git库上,并推送代码
git remote add origin http://myserver:8080/tfs/{collectionName}/{projectName}/_git
git push -u origin --all

这样你就可以在全新的GIT库上开始工作了,如果这些不同的repo之间存在引用关系,那么你可以采用git sub module或者package manager的方法来解决跨库的引用问题。

总体来说,将一个TFVC转换成GIT库的时候我们需要考虑集中和分布式的优劣,项目结构和团队协作模型的影响,这样才能设计出最优化的配置库结构。
参考:
TFS Power Tools 是微软提供的TFS扩展插件,其中包括可以让用户直接在Windows文件管理器中右键点击文件进行签入签出的功能
下载地址:
https://visualstudiogallery.msdn.microsoft.com/898a828a-af00-42c6-bbb2-530dc7b8f2e1

git-tf 是微软提供的TFS扩展工具,可以将TFVC配置库转换成GIT库并保持同步
下载地址:
https://visualstudiogallery.msdn.microsoft.com/898a828a-af00-42c6-bbb2-530dc7b8f2e1


关注公众微信号 DevOps

混合使用TFVC和GIT配置库的优化方案的更多相关文章

  1. [记录]NGINX配置HTTPS性能优化方案一则

    NGINX配置HTTPS性能优化方案一则: 1)HSTS的合理使用 2)会话恢复的合理使用 3)Ocsp stapling的合理使用 4)TLS协议的合理配置 5)False Start的合理使用 6 ...

  2. Tomcat 配置详解/优化方案

     转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置 ...

  3. tomcat配置详解/优化方案

    Service.xml Server.xml配置文件用于对整个容器进行相关的配置. <Server>元素:是整个配置文件的根元素.表示整个Catalina容器. 属性:className: ...

  4. Tomcat 配置详解/优化方案(转)

    转载地址:https://blog.csdn.net/cicada688/article/details/14451541/ Service.xml Server.xml配置文件用于对整个容器进行相关 ...

  5. 【Git】3、创建Git版本库、配置Git仓库用户邮箱信息

    初识Git 文章目录 初识Git 1.创建Git版本库 认识.git 2.基础配置 2.1.查看配置信息 2.2.配置昵称邮箱信息 2.3.修改配置信息 1.通过命令行 2.通过修改配置文件. 修改全 ...

  6. 微软打造了全球最大的Git代码库

    丹棱君有话说:今年 2 月,微软宣布将用 Git 管理 Windows 源代码.随后,Visual Studio 宣布开发 “Git 虚拟文件系统(GVFS)”,并将在终极项目和超大型团队中推行 Gi ...

  7. git使用,Git的skil-map,git配置http/https/socks5代理

    . 检出.克隆库: git clone git://git.openwrt.org/openwrt.git 2. git查看某个文件的修改历史 git log --pretty=oneline 文件名 ...

  8. redmine整合GIT版本库

    redmine整合GIT版本库   服务器的环境: Ubuntu 11.10 64位 Redmine 1.4.5.stable.10943 git version 1.7.5.4 + gitolite ...

  9. Git配置和一些常用命令

    Git:常用命令.... git clone <repo> git config –list git diff –staged add后,commit前的撤销:git rm –cached ...

随机推荐

  1. MySQL的Incorrect string value错误

    用以下SQL语句向表2中插入数据: insert into 表2 select * from 表1 结果出现Incorrect string value错误: 打开表2一看,里面全是问号: 后来才发现 ...

  2. 泛函编程(32)-泛函IO:IO Monad

    由于泛函编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以必须把包含外界影响(effectful)副作用不纯代码( ...

  3. 容器--WeakHashMap

    一.概述 WeakHashMap是Map的一种,根据其类的命令可以知道,它结合了WeakReference和HashMap的两种特点,从而构造出了一种Key可以自动回收的Map. 前面我们已经介绍了W ...

  4. NYOJ:题目490 翻译

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=490 这题的输入输出格式好像描述的不太清楚,1)可能是所有数据都完成输入,然后再输出(解法 ...

  5. Python Sqlite3以字典形式返回查询结果

    sqlite3本身并没有像pymysql一样原生提供字典形式的游标. cursor = conn.cursor(pymysql.cursors.DictCursor) 但官方文档里已经有预留了相应的实 ...

  6. comparator接口与Comparable接口的区别

    1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...

  7. SSH免密码登录过程解析和实现

    SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用SSH 协议可以有效防止远程管理过程中的信息泄露问题. 从客户端来看,SSH提 ...

  8. java集合-集合大家族

    在编写 Java 程序中,我们最常用的除了八种基本数据类型,String 对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!Java 中集合大家族的成员实在是太丰富了,有常用的 Array ...

  9. 你会喜欢的25个创意的扁平化 LOGO 设计

    扁平设计的风暴席卷了整个设计领域,它不仅影响网页设计,也影响了用户界面和标志设计.最近,我们看到了很多大公司,如谷歌和必应开始使用扁平设计的标识. 一个 LOGO 应该简单,显眼和精美,以适应产品的整 ...

  10. ContentTools – 所见即所得(WYSIWYG)编辑器

    Content Tools是一个用于构建所见即所得编辑器(WYSIWYG)的 JavaScript 库.ContentTools 所见即所得的编辑器只需要几个简单的步骤就可以加入到任何的 HTML 页 ...