「Git push したら permission denied って出た!」
「自分のリポジトリ、ちゃんと書き込み権限あるのかな?」
Gitを使っていると、こんな権限関連のトラブルに遭遇することがありますよね。実は、Gitには「ファイルの実行権限」と「リポジトリのアクセス権限」という2種類の権限があって、それぞれ確認方法が異なるんです。
この記事では、Gitの権限を確認する方法を、初心者の方でも分かりやすく解説します。コマンド1つで確認できる簡単な方法から、GitHubでの権限チェックまで、実際の操作画面とともにお伝えしていきますね。
ファイルの実行権限とは?

まずは「ファイルの実行権限」について説明します。
Linuxなどのシステムでは、ファイルごとに「誰が・何ができるか」という権限が設定されています。例えば、シェルスクリプト(.shファイル)は実行権限がないと動かせません。
Gitは、このファイルの実行権限を記録してくれるんですよ。具体的には、以下の2種類だけを記録します:
644(実行権限なし)
- 所有者:読み書き可能
- 他のユーザー:読み取りのみ
755(実行権限あり)
- 所有者:読み書き・実行が可能
- 他のユーザー:読み取り・実行が可能
ちなみに、Gitは所有者情報までは記録しません。あくまで「実行できるかどうか」だけを管理しているんです。
ファイルの実行権限を確認する方法
基本コマンド:git ls-files
ファイルの権限を確認するには、以下のコマンドを使います。
git ls-files -s
または
git ls-files --stage
このコマンドを実行すると、こんな感じで表示されます:
100644 edf195985f692057c67e71d2f8b493ee3078a0d6 0 script.sh
100755 5badb2fde0cb72bbb3cba8436721048dfd7e58dd 0 deploy.sh
100644 66e9889e8b4aeea1af13e2396fb70594232a2ae3 0 README.md
出力内容の読み方
表示される情報は次のような構造になっています:
[モード] [オブジェクトID] [ステージ番号] [ファイル名]
重要なのは最初の「モード」部分です
100644:通常ファイル(実行権限なし)100755:実行可能ファイル120000:シンボリックリンク
最初の100は「通常ファイル」を意味していて、その後の644や755が実際の権限を表しています。
特定のファイルだけ確認する
全ファイルではなく、特定のファイルだけ確認したい場合はこうします:
git ls-files -s script.sh
これでscript.shの権限だけをピンポイントで確認できますよ。
リポジトリへのアクセス権限とは?
次は「リポジトリへのアクセス権限」についてです。
これは、GitHubやGitLabなどのリモートリポジトリに対して、「自分が何ができるか」を決める権限のことなんです。
権限の種類
GitHubでは主に4つのアクセスレベルがあります:
None(権限なし)
- リポジトリにアクセスできない状態です
Read(読み取り権限)
- リポジトリを見ることができる
- クローン(ダウンロード)ができる
- プッシュ(書き込み)はできない
Write(書き込み権限)
- リポジトリを見ることができる
- クローンができる
- プッシュができる
- イシューやプルリクエストを作成できる
Admin(管理者権限)
- すべての操作ができる
- 設定変更ができる
- 他の人に権限を付与できる
GitHubでリポジトリのアクセス権限を確認する方法
方法1:Settings(設定)から確認
これが最も確実な方法です。
- GitHubでリポジトリのページを開く
- 上部にある「Settings」タブをクリック
- 左側のサイドバーから「Collaborators & teams」を選択
- 「Manage access」セクションを見る
ここに自分の名前があり、横に「Admin」「Write」「Read」などの役割(ロール)が表示されていれば、その権限があることが分かります。
注意点:
「Settings」タブが見えない場合は、そのリポジトリのAdmin権限がない可能性が高いです。
方法2:ファイル編集で確認
実は、書き込み権限の有無を簡単に確認する裏技があります。
- GitHubでリポジトリのファイルを開く
- 鉛筆マーク(編集ボタン)をクリック
書き込み権限がある場合:
そのままファイル編集画面になります
書き込み権限がない場合:
こんなメッセージが表示されます:
You're editing a file in a project you don't have write access to.
We've created a fork of this project for you to commit your proposed changes to.
(訳:このプロジェクトには書き込み権限がありません。変更を提案するために、フォーク(コピー)を作成しました)
つまり、自動的にフォークが作られて、そこで編集することになるんですね。
方法3:プッシュしてみる
最もストレートな方法は、実際にプッシュしてみることです。
git push origin main
権限がある場合:
正常にプッシュが完了します
権限がない場合:
こんなエラーが出ます:
ERROR: Permission to username/repository.git denied to your-username.
fatal: Could not read from remote repository.
ただし、この方法はエラーが出てしまうので、事前確認の方法として使うのがおすすめです。
権限がない場合の対処法
リポジトリのオーナーに権限をもらう
書き込み権限が必要な場合は、リポジトリの管理者に連絡して権限を付与してもらいましょう。
管理者側の操作手順:
- リポジトリの「Settings」を開く
- 「Collaborators & teams」をクリック
- 「Add people」ボタンを押す
- 追加したいユーザー名を入力
- 適切な役割(Read/Write/Admin)を選択
- 「Add NAME to REPOSITORY」をクリック
これで権限が付与されます。
フォークして作業する
権限がもらえない場合は、フォーク(コピー)を作って作業する方法があります。
- GitHubのリポジトリページで「Fork」ボタンをクリック
- 自分のアカウントにコピーが作られる
- このコピーでは自由に編集できる
- 変更を元のリポジトリに反映したい場合は「Pull Request」を送る
これは、オープンソースプロジェクトなどでよく使われる方法ですよ。
ファイルの実行権限を変更する方法
「ファイルの実行権限を確認したら、権限がなかった!」という場合、Gitコマンドで権限を変更できます。
実行権限を追加する
git update-index --chmod=+x script.sh
または、git addと同時に権限を設定することもできます:
git add --chmod=+x script.sh
実行権限を削除する
git update-index --chmod=-x script.sh
変更を確認してコミット
権限を変更したら、必ず確認してからコミットしましょう:
# 権限が変更されたか確認
git ls-files -s script.sh
# コミット
git commit -m "Add execute permission to script.sh"
# プッシュ
git push
コミットログには、こんな感じで権限変更が記録されます:
mode change 100644 => 100755 script.sh
よくある権限エラーと解決方法
エラー1:Permission denied (publickey)
原因:
SSH認証の設定に問題がある可能性があります
解決方法:
- SSH鍵が登録されているか確認
- GitHubに公開鍵を追加
- SSH-agentに鍵が追加されているか確認
# SSH鍵が登録されているか確認
ssh -T git@github.com
# 成功した場合の表示
# Hi username! You've successfully authenticated...
エラー2:Windows環境で権限の差分が大量に出る
原因:
Windowsはファイル権限の概念が異なるため、Gitが誤って権限変更を検出してしまいます
解決方法:core.filemodeをfalseに設定します:
# 現在の設定を確認
git config core.filemode
# falseに設定(ローカルリポジトリのみ)
git config --local core.filemode false
# または、グローバル設定として
git config --global core.filemode false
これで、ファイル権限の変更を無視するようになります。
エラー3:クローンはできるのにプッシュできない
原因:
Read権限はあるが、Write権限がない状態です
解決方法:
- リポジトリのオーナーに連絡してWrite権限をもらう
- または、フォークして作業し、Pull Requestを送る
まとめ
Gitの権限確認、思ったより簡単でしたよね。最後に要点をおさらいしましょう。
ファイルの実行権限を確認するには:
git ls-files -s
GitHubのアクセス権限を確認するには:
- Settings → Collaborators & teams
- または、ファイル編集ボタンで確認
権限を変更するには:
# 実行権限を追加
git update-index --chmod=+x ファイル名
権限の仕組みを理解しておくと、チーム開発でのトラブルも減りますし、オープンソースプロジェクトへの貢献もスムーズになりますよ。
「permission denied」というエラーが出たら、まずは冷静に権限を確認してみましょう。この記事で紹介した方法を使えば、きっと解決できるはずです。
それでは、快適なGitライフをお楽しみください!

コメント