BETA

git push --mirror で (deny updating a hidden ref)

投稿日:2019-06-06
最終更新:2019-06-06

AOSP のローカルリポジトリをバックアップ目的でリモート(Gitlab)にミラーしている。
Gitlab を Ver.11.10.4 にアップデート後、ミラー時にワーニングが発生するようになった。

$ git remote add gitLab [email protected]: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 = [email protected]: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  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@tsuyoshinの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう