担当プロジェクトの関連ファイルをGitlabで管理開始しようとしたところ、git push がエラーとなり実行できなかったので調べてみました。
状況
プロジェクトのリーダーがGitlabでプロジェクトを作成し、メンバー分のアカウントを作成して配布してくれました。と言っても、メンバーは私一人だけです。
Gitは何となく触ったことはあったけど、Gitlabを使うのは初めて。こちらの書籍を購入してみました。
本書によると、プロジェクトとはそれ自体が空のリポジトリであるとのこと。今回はリーダーがプロジェクトを作成済みなので、これをgit clone すればよいらしい。
git cloneを実行し、クローンを作成。その後リポジトリに追加したい作成済みのファイル類を格納し、git add 、git commit 、ここまでは問題なくいけました。
ところがgit push したところ、以下のエラーが発生しました。
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to XXX
hook declinedで検索してみた
調べてみると、権限まわりがあやしそう。
自身のアカウントの権限を確認したところ、developer。実践ガイドによると、developer権限であれば「ブランチの更新(push)」は可能となっているのですが…。
さらに調べてみると、hook declinedは何らかのルールが定められている場合の違反エラーのような記載も見つかりました。今回は特にルールの設定などはしていないはずなんだけどなぁ。
さらに調べて、エラーが発生した原因が判明
Gitlabでは、developer権限者のmasterブランチへのpushをデフォルトで禁止しているようです。
developerはdevブランチにだけコミットして、上位権限者がmasterブランチにマージする、という思想なようですね。
確かに大規模なプロジェクトであればこっちのが安全ですよね。
ただ今回は、ソース管理は行わずドキュメントのみの管理を行いたいので、この制限は解除します。
こちらのブログを参考にさせていただきました。
デフォルトのmasterブランチはプロテクトがかかっており、Ownerしかコミットやpushできません。これから、masterブランチで検証してくので、一旦プロテクトを外しますが、空プロジェクトにはリポジトリがなく、その変更もできないので、一旦、Owner権限を持っている管理者rootでREADME.mdをコミットしてリポジトリとmasterブランチを作成します。
https://www.crz33.com/software/gitlab/create_project
そうか、いくら頑張っても自分のアカウントからでは解決しなかったのか~~。
リーダーのアカウントを借りてログインし直し、masterブランチを作成しました。(よい子のみなさんは、アカウントの貸し借りはやめましょう)
その後masterブランチのプロテクトを解除し、無事、自身のアカウントからpushできました!
最後に
今回はエラーメッセージから発生している事象を推測することができず、また、検索してもGitlabの仕様と上記エラーメッセージが結びつかず、手こずってしまいました。
改めて公式ドキュメントを見てみると、「Push to non-protected branches」「 Push to protected branches」という記載が見つかり、ああ、ちゃんとドキュメント読むことの大切さを痛感する。。
同じような状況で詰まっている方の助けになれば幸いです。
コメント