如果要选出最近几年在软件工程领域最热的技术,那毋庸置疑就是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中。一般来说,我们需要综合考虑以下因素:
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-530dc7b8f2e1git-tf 是微软提供的TFS扩展工具,可以将TFVC配置库转换成GIT库并保持同步
下载地址:
https://visualstudiogallery.msdn.microsoft.com/898a828a-af00-42c6-bbb2-530dc7b8f2e1