当我尝试使用带有 Git 的 TFS 进行构建时,存在一个限制,即 TFS 的 git 提供程序尚不支持子模块。有点痛苦,但到底是什么,我可以告诉 TFS 在编译之前运行一个批处理文件。我用它来调用手动 git 脚本来更新我的“超级”项目中的所有子模块。
这个批处理文件运行的命令很简单: git submodule update --init --recursive
在我将子模块源迁移到 TFS 之前,这工作得很好,但是现在 TFS 构建失败了,因为上面的 git 模块脚本不再有效。
因此,TFS 在构建之前所做的是将当前源代码从 Git 拉到构建服务器上的一个文件夹中,我可以访问该文件夹。
如果我打开 Git Bash 到这个文件夹并运行以下命令: git submodule init git submodule update
我收到以下错误,我终其一生都无法弄清楚它是什么。我已经尝试搜索这个特定的错误,它通常指向在“超级项目”回购被推送之后被推送的子模块提交。但我可以验证在“超级项目”提交和推送完成之前执行所有子模块提交和推送。以下是 TFS git 命令的输出:
james@TFS /C/Builds/1/Technique Webs/MIS Console 5.2 Development/src (5.2development)
$ git submodule init
james@TFS /C/Builds/1/Technique Webs/MIS Console 5.2 Development/src (5.2development)
$ git submodule update
Username for 'http://tfs:8080': james
Password for 'http://james@TFS:8080': <password>
From http://TFS:8080/TFS/Technique/_git/Technique%20Library
* branch HEAD -> FETCH_HEAD
fatal: reference is not a tree: 33106ea146d470159e327c1b2d623d14f522cdd4
Unable to checkout '33106ea146d470159e327c1b2d623d14f522cdd4' in submodule path 'calc-engine'
james@TFS /C/Builds/1/Technique Webs/MIS Console 5.2 Development/src (5.2development)
$