Skip to content

Commit

Permalink
Fix a misbehavior of git #4998
Browse files Browse the repository at this point in the history
  • Loading branch information
tung2744 authored Jan 24, 2025
2 parents 4aa2bb0 + 5e2081a commit 7ef4501
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions .github/workflows/mirror.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@ jobs:
- name: Mirror
run: |
export GIT_SSH_COMMAND="ssh -v -i ~/.ssh/id_ed25519"
git remote add mirror [email protected]:oursky/authgear-server.git
git push --tags --force --prune mirror "refs/remotes/origin/*:refs/heads/*"
# The original command is
# git push --tags --force --prune "[email protected]:oursky/authgear-server.git" "refs/remotes/origin/*:refs/heads/*"
#
# It has been working so well, until 2025-01-23, git starts include refs/remotes/origin/HEAD in the expansion.
# That would include refs/remotes/origin/HEAD:refs/heads/HEAD.
# That means push a branch named HEAD in the mirror repository.
# HEAD has a special meaning in Git, and it is obviously not suitable for a branch name.
#
# So we use `git show-ref` plus some filtering with awk and perl to filter out refs/remotes/origin/HEAD.
# And build the `git push ...` command with xargs.
git show-ref | awk '{ print $2 }' | perl -n -e 'if (/(^refs\/remotes\/origin\/(.+)$)/ ) { if ($2 != "HEAD") { print "$1:refs/heads/$2\n" } }' | xargs -x git push --tags --force --prune "[email protected]:oursky/authgear-server.git"
- name: Clean up
if: ${{ always() }}
run: |
rm -f ~/.ssh/id_ed25519
git remote remove mirror

0 comments on commit 7ef4501

Please sign in to comment.