「シェルスクリプトをGitでプッシュしたのに、サーバーで実行できない!」
「チームメンバーにリポジトリへの書き込み権限を与えたいけど、どうすればいいの?」
Gitを使っていると、こんな「権限」に関する問題に遭遇することがありますよね。実は、Gitには2種類の「権限付与」があるんです。
- ファイルの実行権限:スクリプトなどを実行可能にする
- リポジトリのアクセス権限:他の人がプッシュできるようにする
この記事では、両方の権限付与の方法を、初心者の方でも分かりやすく解説します。コマンドの使い方から、GitHubでの具体的な操作手順まで、実際の画面とともにお伝えしていきますね。
Gitにおける2種類の「権限」

まず、Gitで扱う2種類の権限について理解しておきましょう。
1. ファイルの実行権限(File Permission)
これは、シェルスクリプト(.shファイル)やPythonスクリプトなどを「実行できるかどうか」を決める権限です。
具体例:
# 実行権限がない状態
$ ./deploy.sh
bash: ./deploy.sh: Permission denied
# 実行権限がある状態
$ ./deploy.sh
Deployment starting...
LinuxやMacでは、ファイルごとに実行権限を設定できます。Gitはこの実行権限を記録してくれるので、他の人がクローンした時も実行可能な状態を保てるんです。
2. リポジトリのアクセス権限(Access Permission)
これは、GitHubやGitLabなどのリモートリポジトリに対して「誰が何をできるか」を決める権限です。
権限の種類:
- Read(読み取り):見るだけ、クローンだけ
- Write(書き込み):プッシュやプルリクエストのマージができる
- Admin(管理者):設定変更や権限付与ができる
この2つは全く別物なので、それぞれ個別に設定する必要があります。
ファイルに実行権限を付与する方法
それでは、まずファイルの実行権限から見ていきましょう。
Linux/Macでの権限付与
LinuxやMacでは、chmodコマンドを使うのが一般的です。
# 実行権限を付与
$ chmod +x script.sh
# 確認
$ ls -l script.sh
-rwxr-xr-x 1 user user 123 Dec 11 10:00 script.sh
この状態でgit addとgit commitをすれば、実行権限がGitに記録されます。
$ git add script.sh
$ git commit -m "Add execute permission to script.sh"
[main 1a2b3c4] Add execute permission to script.sh
1 file changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh
「mode change 100644 => 100755」という表示が、権限が変わった証拠です。
Windowsでの権限付与
Windowsには、Linuxのような詳細なファイル権限がありません。そのため、Gitコマンドを使って明示的に設定する必要があります。
方法1:git update-indexを使う
これが最も確実な方法です。
# 実行権限を付与
$ git update-index --chmod=+x script.sh
# コミット
$ git commit -m "Add execute permission to script.sh"
方法2:git addと同時に設定
新しくファイルを追加する場合は、git addと同時に権限を設定できます。
# 追加と同時に実行権限を付与
$ git add --chmod=+x script.sh
# コミット
$ git commit -m "Add script with execute permission"
設定された権限を確認する
権限がちゃんと設定されたか確認するには、git ls-filesコマンドを使います。
$ git ls-files --stage script.sh
100755 a1b2c3d4e5f6... 0 script.sh
最初の数字が100755なら実行権限あり、100644なら実行権限なしです。
実行権限を外す方法
逆に、実行権限を外したい場合もありますよね。
Linux/Macの場合
# 実行権限を外す
$ chmod -x script.sh
# 確認してコミット
$ git add script.sh
$ git commit -m "Remove execute permission"
Windowsの場合
# 実行権限を外す
$ git update-index --chmod=-x script.sh
# コミット
$ git commit -m "Remove execute permission"
複数ファイルに一括で権限を付与
プロジェクトに複数のシェルスクリプトがある場合、一つずつ設定するのは大変です。
Linux/Macでの一括設定
# すべての.shファイルに実行権限を付与
$ find . -name "*.sh" -type f -exec chmod +x {} \;
# または
$ chmod +x *.sh
# Git に反映
$ git add .
$ git commit -m "Add execute permission to all shell scripts"
Windowsでの一括設定
# すべての.shファイルに実行権限を付与
$ for file in *.sh; do git update-index --chmod=+x "$file"; done
# コミット
$ git commit -m "Add execute permission to all shell scripts"
GitHubでリポジトリの権限を付与する方法
次は、他の人にリポジトリへのアクセス権限を与える方法を見ていきましょう。
個人リポジトリでの権限付与
個人が所有するリポジトリの場合、「Collaborators(コラボレーター)」として追加します。
手順:
- GitHubでリポジトリのページを開く
- 上部の「Settings」タブをクリック
- 左サイドバーから「Collaborators & teams」を選択
- 「Add people」ボタンをクリック
- 追加したい人のGitHubユーザー名を入力
- 適切な役割(Role)を選択
- 「Add [ユーザー名] to this repository」をクリック
これで、相手にメールで招待が届きます。相手が承諾すれば、権限が有効になりますよ。
役割(Role)の種類
個人リポジトリでは、主に以下の役割があります:
Read(読み取り)
- リポジトリを見ることができる
- クローンができる
- イシューやプルリクエストを作成できる
- プッシュはできない
Write(書き込み)
- Readの権限すべて
- プッシュができる
- プルリクエストをマージできる
- イシューを管理できる
Maintain(メンテナー)
- Writeの権限すべて
- リポジトリの設定を一部変更できる
- Wikiを管理できる
Admin(管理者)
- すべての操作ができる
- Collaboratorsを追加・削除できる
- リポジトリを削除できる
通常は「Write」権限を付与することが多いです。
Organizationでの権限管理
会社やチームでGitHubを使う場合、Organizationを使うとより柔軟な権限管理ができます。
Teamを使った権限管理
Organizationでは、「Team」を作って、そのTeamごとに権限を付与できます。
メリット:
- 一人ずつ追加する必要がない
- チームごとに権限をまとめて管理できる
- 新メンバーはTeamに追加するだけでOK
手順:
- Organization の Settings を開く
- 「Teams」から新しいTeamを作成
- Team にメンバーを追加
- リポジトリの Settings → Collaborators & teams
- 「Add teams」からTeamを選択
- 適切な役割を選択して追加
Base permissions(基本権限)の設定
Organizationでは、全メンバーに対するデフォルトの権限を設定できます。
設定場所:
Organization Settings → Member privileges → Base permissions
設定値:
- No permission:何も権限なし(推奨)
- Read:全リポジトリを読める
- Write:全リポジトリに書き込める
- Admin:全リポジトリの管理者(非推奨)
セキュリティのため、通常は「No permission」にして、必要なリポジトリだけTeamで権限を付与するのがおすすめです。
権限付与の実践例

実際の開発シーンでよくあるパターンを見てみましょう。
パターン1:友達と個人プロジェクトを共同開発
状況:
- あなたが作ったリポジトリ
- 友達と一緒に開発したい
- 友達にはプルリクエストを出してもらう
手順:
# 1. GitHub上でCollaboratorsとして追加(Write権限)
# 2. 友達側の操作
$ git clone https://github.com/your-name/project.git
$ cd project
$ git checkout -b feature/new-function
# 3. 開発後、プッシュ
$ git add .
$ git commit -m "Add new function"
$ git push origin feature/new-function
# 4. GitHubでPull Requestを作成
パターン2:シェルスクリプトをデプロイ
状況:
- Windowsで開発
- Linuxサーバーにデプロイ
- スクリプトを実行可能にしたい
手順:
# Windows側での作業
$ git add --chmod=+x deploy.sh
$ git commit -m "Add deployment script"
$ git push origin main
# サーバー側での作業
$ git pull origin main
$ ls -l deploy.sh
-rwxr-xr-x 1 user user 256 Dec 11 10:00 deploy.sh
# そのまま実行できる
$ ./deploy.sh
Deployment successful!
パターン3:会社でチーム開発
状況:
- 開発チームが3つある
- それぞれ異なるリポジトリにアクセス
- チームごとに権限を分けたい
手順:
# 1. Organization で3つのTeamを作成
# - Frontend Team
# - Backend Team
# - DevOps Team
# 2. 各リポジトリに適切なTeamを追加
# frontend-app → Frontend Team (Write)
# backend-api → Backend Team (Write)
# infrastructure → DevOps Team (Admin)
# 3. 新メンバーが入ったら、該当するTeamに追加するだけ
よくあるトラブルと解決方法
実際に遭遇しやすいトラブルとその対処法をまとめました。
トラブル1:権限を付けたのに実行できない
症状:
$ git add --chmod=+x script.sh
$ git commit -m "Add permission"
$ git push
# サーバーでpullしても...
$ ./script.sh
bash: ./script.sh: Permission denied
原因:core.fileMode=falseに設定されている可能性があります。
解決方法:
# 現在の設定を確認
$ git config core.fileMode
# falseになっている場合はtrueに変更
$ git config core.fileMode true
# 権限を再設定
$ git update-index --chmod=+x script.sh
$ git commit -m "Fix execute permission"
$ git push
トラブル2:Collaboratorを追加できない
症状:
Settings タブが表示されない、またはCollaboratorsメニューがない
原因:
あなたがリポジトリのオーナーまたはAdmin権限を持っていません。
解決方法:
- リポジトリのオーナーに連絡して、Admin権限をもらう
- または、オーナーに代わりに追加してもらう
トラブル3:招待が届かない
症状:
Collaboratorとして追加したのに、相手に招待メールが届かない
確認ポイント:
- 相手のGitHubユーザー名が正しいか確認
- 相手がメール通知をオフにしていないか確認
- 招待は24時間で有効期限が切れる
解決方法:
# GitHubのリポジトリページで
# Settings → Collaborators & teams
# 「Pending invitations」に表示されている招待を「Resend invitation」で再送
トラブル4:pullはできるのにpushできない
症状:
$ git pull origin main
Already up to date.
$ git push origin main
ERROR: Permission to username/repo.git denied to your-username.
fatal: Could not read from remote repository.
原因:
Read権限しかない状態です。
解決方法:
リポジトリのオーナーに連絡して、Write権限以上をもらいましょう。
セキュリティ上の注意点
権限を付与する際は、セキュリティにも気を配りましょう。
注意点1:必要最小限の権限を付与
全員にAdmin権限を与えるのは危険です。
推奨:
- 開発メンバー:Write権限
- レビューアー:Write権限
- 外部協力者:Read権限
- 管理者のみ:Admin権限
注意点2:機密情報を含むスクリプトに注意
実行権限を付与するスクリプトに、パスワードやAPIキーが含まれていないか確認しましょう。
# 悪い例
#!/bin/bash
API_KEY="sk-1234567890abcdef" # ハードコードは危険!
curl -H "Authorization: Bearer $API_KEY" ...
# 良い例
#!/bin/bash
API_KEY="${API_KEY}" # 環境変数から読み込む
if [ -z "$API_KEY" ]; then
echo "Error: API_KEY is not set"
exit 1
fi
curl -H "Authorization: Bearer $API_KEY" ...
注意点3:定期的な権限の見直し
プロジェクトが終わったメンバーの権限は削除しましょう。
確認方法:
- リポジトリの Settings → Collaborators & teams
- 不要なメンバーの横にある「Remove」をクリック
権限を削除する方法
付与した権限を後から削除することもできます。
ファイルの実行権限を削除
# Linux/Mac
$ chmod -x script.sh
$ git add script.sh
$ git commit -m "Remove execute permission"
# Windows
$ git update-index --chmod=-x script.sh
$ git commit -m "Remove execute permission"
リポジトリのアクセス権限を削除
手順:
- リポジトリの Settings → Collaborators & teams
- 削除したい人の横にある「Remove」をクリック
- 確認ダイアログで「Remove」を再度クリック
これで、その人はプッシュできなくなります(既にクローンしたローカルのコピーは残りますが、リモートには反映されません)。
まとめ
Gitでの権限付与、しっかり理解できましたか?最後に重要なポイントをおさらいしましょう。
ファイルの実行権限を付与
Linux/Mac:
chmod +x script.sh
git add script.sh
git commit -m "Add execute permission"
Windows:
git add --chmod=+x script.sh
# または
git update-index --chmod=+x script.sh
git commit -m "Add execute permission"
確認:
git ls-files --stage script.sh
リポジトリのアクセス権限を付与
個人リポジトリ:
- Settings → Collaborators & teams
- Add people → ユーザー名入力
- 役割を選択して追加
Organization:
- Teamを作成
- Teamにメンバーを追加
- リポジトリにTeamを追加して役割を設定
よくある役割
- Read:見るだけ、クローンのみ
- Write:プッシュやマージができる
- Admin:すべての設定変更ができる
セキュリティのポイント
- 必要最小限の権限を付与する
- 機密情報はスクリプトに含めない
- 定期的に権限を見直す
- プロジェクト終了後は権限を削除
この記事で紹介した方法を使えば、ファイルの実行権限もリポジトリのアクセス権限も、安全に管理できるようになりますよ。
チーム開発では特に、権限管理が重要になってきます。適切な権限設定で、セキュアで効率的な開発環境を作っていきましょう!
それでは、快適なGitライフをお楽しみください!

コメント