查看原文
其他

混合使用TFVC和GIT配置库的优化方案

2015-12-15 徐磊 DevOps

如果要选出最近几年在软件工程领域最热的技术,那毋庸置疑就是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来分别不同项目,我们可以按照不同的文件夹从新组织GIT库的结构,如:将$/TeamProjectA/Main/Project1 转换到独立的GIT库,将Project2转换到另外一个GIT库


TFVC至GIT的迁移方案(保留历史纪录)


如果你之前使用的是TFVC,那么你可以使用以下命令将服务器上的TFVC库先转换成本地的GIT库,然后再签入到新创建的GIT库中,并在这个过程中调整repo的机构。


# 这里的--deep参数将会确保所有的TFVC changeset可以转换被本地GIT库的commit历史
# $/TeamProjectA/Main 这个路径可以指向配置库中的任何子路径,这样我们就可以只迁移一部分

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库上开始工作了,同时根据不同的情况将不同的文件夹转换成了独立的GIT库,如果这些不同的项目/文件夹之间存在引用关系,那么你可以采用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



请关注微信公众号 devopshub,获取更多关于DevOps研发运维一体化的信息

点击左下角 阅读原文 获取下载地址

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存