Gitの権限確認を完全マスター!ファイルとリポジトリの権限チェック方法

「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は「通常ファイル」を意味していて、その後の644755が実際の権限を表しています。

特定のファイルだけ確認する

全ファイルではなく、特定のファイルだけ確認したい場合はこうします:

git ls-files -s script.sh

これでscript.shの権限だけをピンポイントで確認できますよ。


リポジトリへのアクセス権限とは?

次は「リポジトリへのアクセス権限」についてです。

これは、GitHubやGitLabなどのリモートリポジトリに対して、「自分が何ができるか」を決める権限のことなんです。

権限の種類

GitHubでは主に4つのアクセスレベルがあります:

None(権限なし)

  • リポジトリにアクセスできない状態です

Read(読み取り権限)

  • リポジトリを見ることができる
  • クローン(ダウンロード)ができる
  • プッシュ(書き込み)はできない

Write(書き込み権限)

  • リポジトリを見ることができる
  • クローンができる
  • プッシュができる
  • イシューやプルリクエストを作成できる

Admin(管理者権限)

  • すべての操作ができる
  • 設定変更ができる
  • 他の人に権限を付与できる

GitHubでリポジトリのアクセス権限を確認する方法

方法1:Settings(設定)から確認

これが最も確実な方法です。

  1. GitHubでリポジトリのページを開く
  2. 上部にある「Settings」タブをクリック
  3. 左側のサイドバーから「Collaborators & teams」を選択
  4. 「Manage access」セクションを見る

ここに自分の名前があり、横に「Admin」「Write」「Read」などの役割(ロール)が表示されていれば、その権限があることが分かります。

注意点:
「Settings」タブが見えない場合は、そのリポジトリのAdmin権限がない可能性が高いです。

方法2:ファイル編集で確認

実は、書き込み権限の有無を簡単に確認する裏技があります。

  1. GitHubでリポジトリのファイルを開く
  2. 鉛筆マーク(編集ボタン)をクリック

書き込み権限がある場合:
そのままファイル編集画面になります

書き込み権限がない場合:
こんなメッセージが表示されます:

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.

ただし、この方法はエラーが出てしまうので、事前確認の方法として使うのがおすすめです。


権限がない場合の対処法

リポジトリのオーナーに権限をもらう

書き込み権限が必要な場合は、リポジトリの管理者に連絡して権限を付与してもらいましょう。

管理者側の操作手順:

  1. リポジトリの「Settings」を開く
  2. 「Collaborators & teams」をクリック
  3. 「Add people」ボタンを押す
  4. 追加したいユーザー名を入力
  5. 適切な役割(Read/Write/Admin)を選択
  6. 「Add NAME to REPOSITORY」をクリック

これで権限が付与されます。

フォークして作業する

権限がもらえない場合は、フォーク(コピー)を作って作業する方法があります。

  1. GitHubのリポジトリページで「Fork」ボタンをクリック
  2. 自分のアカウントにコピーが作られる
  3. このコピーでは自由に編集できる
  4. 変更を元のリポジトリに反映したい場合は「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認証の設定に問題がある可能性があります

解決方法:

  1. SSH鍵が登録されているか確認
  2. GitHubに公開鍵を追加
  3. SSH-agentに鍵が追加されているか確認
# SSH鍵が登録されているか確認
ssh -T git@github.com

# 成功した場合の表示
# Hi username! You've successfully authenticated...

エラー2:Windows環境で権限の差分が大量に出る

原因:
Windowsはファイル権限の概念が異なるため、Gitが誤って権限変更を検出してしまいます

解決方法:
core.filemodefalseに設定します:

# 現在の設定を確認
git config core.filemode

# falseに設定(ローカルリポジトリのみ)
git config --local core.filemode false

# または、グローバル設定として
git config --global core.filemode false

これで、ファイル権限の変更を無視するようになります。

エラー3:クローンはできるのにプッシュできない

原因:
Read権限はあるが、Write権限がない状態です

解決方法:

  1. リポジトリのオーナーに連絡してWrite権限をもらう
  2. または、フォークして作業し、Pull Requestを送る

まとめ

Gitの権限確認、思ったより簡単でしたよね。最後に要点をおさらいしましょう。

ファイルの実行権限を確認するには:

git ls-files -s

GitHubのアクセス権限を確認するには:

  • Settings → Collaborators & teams
  • または、ファイル編集ボタンで確認

権限を変更するには:

# 実行権限を追加
git update-index --chmod=+x ファイル名

権限の仕組みを理解しておくと、チーム開発でのトラブルも減りますし、オープンソースプロジェクトへの貢献もスムーズになりますよ。

「permission denied」というエラーが出たら、まずは冷静に権限を確認してみましょう。この記事で紹介した方法を使えば、きっと解決できるはずです。

それでは、快適なGitライフをお楽しみください!

コメント

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