In my Azure DevOps pipeline I'm using GitVersion to determine a version number for my software system using semantic versioning. At this time, the GitVersion task fails because my repo is shallow. To overcome this problem, I can add a fetchDepth of 0 to disable shallow clones, however... It fails:
Below is a fraction of my (Yuck Yaml) pipeline:
- checkout: self
fetchDepth: 0
fetchTags: true
persistCredentials: true
clean: false
displayName: Checkout and clean
- script: git -C $(Pipeline.Workspace)/s rev-parse --is-shallow-repository
displayName: Check
As you can see, I do a repo with fetchDepth of 0
but still, the following script (git -C...
) reports the repo is shallow:
How can I fetch from my repo with truely disabling shallow repository so GitVersion can do its job?
I could reproduce the issue if I set checkout
with fetchDepth: 0
, after several runs with fetchDepth
set to 1
. And I noticed the shallow file kept appearing in the .git directory when the issue was reproduced.
For this, I tried to clean the pipeline workspace to make sure the .git folder in the source directory was removed before the checkout
step.
workspace:
clean: all
steps:
# - script: sleep 30s
- checkout: self
fetchDepth: 0
fetchTags: true
persistCredentials: true
clean: false
displayName: Checkout and clean
- script: |
echo "================1. Check if shallow fetch================"
git -C $(Pipeline.Workspace)/s rev-parse --is-shallow-repository
echo "================2. Check YAML definition================"
cat YAML/CheckoutShallow.yml
echo "================3. Check shallow file in .git================"
tree .git
displayName: Check
Or if you prefer, you may consider removing the shallow file with a simple script.
- script: |
if test -f "$(Build.SourcesDirectory)/.git/shallow"; then
echo "Remove shallow file."
rm "$(Build.SourcesDirectory)/.git/shallow"
else
echo "No shallow file found!"
fi
displayName: 'Clean shallow'