When I try to build using TFS with Git, there's a limitation whereby TFS's git provider doesn't yet support sub modules. Bit of a pain, but what the heck, I'm able to tell TFS to run a Batch file prior to compilation. I've used this to call a manual git script to update all my submodules in my "super" project.
The command this batch file runs is simply: git submodule update --init --recursive
This worked fine and dandy before I migrated the submodule source to TFS, however now the TFS build is failing, because the above git module script no longer works.
So, what TFS does before a build is Pulls the current sources from Git into a folder on the build server, which I have access to.
If I open Git Bash to this folder and run the following command(s): git submodule init git submodule update
I get the following error, and I can't work out for the life of me what it is. I've tried searching this specific error which generally points to a submodule commit being pushed after the "super project" repo is pushed. But I can verify that all submodule commits & pushes are performed BEFORE the "super project" commit & push is done. Here's the output from the TFS git commands:
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)
$
I've fixed a similar issue after much trial and error: it turned out that this was a problem with the TFS pre-build PowerShell script running with no user profile, and therefore GIT couldn't see the credential cache setting for the build user (e.g. as set in C:\Users\theuser\.gitconfig
).
Batch scripts would suffer from the same issue.
The distinctive behaviour was that the git submodule
calls would hang completely, and would put the GIT repository in a very weird state (as noted by the not a tree
errors above).
The hang is due to GIT prompting for the username and password to use, however this is a non-interactive session, so everything just grinds to a halt.
Using wincred
as credential cache, I was able to fix this by:
wincred
by default, even if it has no user config file: git config --system credential.helper wincred
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With