git push --mirror で (deny updating a hidden ref)
AOSP のローカルリポジトリをバックアップ目的でリモート(Gitlab)にミラーしている。
Gitlab を Ver.11.10.4 にアップデート後、ミラー時にワーニングが発生するようになった。
$ git remote add gitLab git@192.168.1.70:root/aosp-build.git $ git push --mirror gitlab
以下のようなワーニングが延々と表示される。。。
! [remote rejected] aosp/android-arch-navigation-release -> aosp/android-arch-navigation-release (deny updating a hidden ref) ! [remote rejected] aosp/android-arch-work-release -> aosp/android-arch-work-release (deny updating a hidden ref) ! [remote rejected] aosp/android-live-tv -> aosp/android-live-tv (deny updating a hidden ref) ! [remote rejected] aosp/android-live-tv-l-mr1 -> aosp/android-live-tv-l-mr1 (deny updating a hidden ref) ! [remote rejected] aosp/android-support-test -> aosp/android-support-test (deny updating a hidden ref) ! [remote rejected] aosp/androidx-annotation-release -> aosp/androidx-annotation-release (deny updating a hidden ref)
なお Ver.11.04 までは、ワーニングは発生しなかった。
Gitlab 内の refs/ が ReadOnly のため?
GitHub でも、プルリクエストを行うと発生するらしい。
ミラーリング自体は行われているため、実用上問題ないが見た目が悪いため、ワーニングの発生しない方法を検討する。
# --all にて PUSH。ブランチは追加されるがタグが無視される。 $ git push --all gitlab
# --tags にて PUSH。タグのみ追加される。 $ git push --tags gitlab
ローカルに追加されたブランチ、タグの追加は、上記コマンドで可能。
しかし、ローカルで削除されたブランチ、タグをリモートに反映できない。
そこで、--prune を用いる。
# ローカルに存在しないリモートのブランチを消去し、ローカルの新規ブランチを追加。 $ git push --prune gitlab "refs/heads/*:refs/heads/*"
# ローカルに存在しないリモートのタグを消去し、ローカルの新規タグを追加。 $ git push --prune gitlab "refs/tags/*:refs/tags/*"
これだと、コマンドを2回実行しないといけないため面倒。
そこで、設定ファイルを編集してみる。
$ git config -e [remote "gitlab"] url = git@192.168.1.70:root/aosp-build.git # 下記追加 # <src>:<dst> の形式で、オプションとして先頭に + を付けます。 # + の記号は Git にそれが早送り(fast-forward)でない場合でも参照を更新することを伝えます。 # refs/heads -> ブランチ情報 # refs/tags -> タグ情報 push = +refs/heads/*:refs/heads/* push = +refs/tags/*:refs/tags/*
上記設定後は下記コマンドのみでブランチ、タグの同期可能。
$ git push --prune gitlab