Gitlabで最初のpushができない(pre-receive hook declined)

調べたこと・分かったこと

担当プロジェクトの関連ファイルを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ブランチにマージする、という思想なようですね。

確かに大規模なプロジェクトであればこっちのが安全ですよね。

ただ今回は、ソース管理は行わずドキュメントのみの管理を行いたいので、この制限は解除します。

https://www.crz33.com/software/gitlab/create_project

こちらのブログを参考にさせていただきました。

デフォルトの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」という記載が見つかり、ああ、ちゃんとドキュメント読むことの大切さを痛感する。。

同じような状況で詰まっている方の助けになれば幸いです。

コメント

タイトルとURLをコピーしました