コミュニティ貢献活動をしていて直面し、解決した問題を共有します。
この記事について
- 公式ページのソースを記載しています。最新の情報は公式ページを参照してください。
- ソースコードや実行コマンドは、個人情報を保護するために、意味が変わらない程度に編集しています。
- 不明点等ございましたら、お気軽にお問い合わせください。
直面した問題
タイトルにもあるように、GitHubの自組織Organizationリポジトリに対してプッシュできない問題に直面しました。
事象
メンバーロールで所属しているOrganization内の、他人がforkしたリポジトリに対してpushができません。
pushしようとすると、以下のエラーメッセージが出力されます。
C:\Users\MyPC\test-organization\test-repository>git push -u origin test
remote: Permission to test-organization/test-repository.git denied to kobaji.
fatal: unable to access 'https://github.com/test-organization/test-repository.git/': The requested URL returned error: 403
【補足】
Organizationには以下のロールがあります(参考:「GitHubドキュメント>Organization のリポジトリ権限レベル」)。
- 支払いマネージャー
- オーナー
- メンバー
原因(当方の場合)
結論を言うと、Organizationの設定にて、リポジトリに対してRead権限を付与していないためでした。
これは「GitHub公式ドキュメント>Organization の基本レベルの権限の設定」にも記載されています。
デフォルトでは、Organization のメンバーは Organization のリポジトリに対する読み取り権限を付与されます。
Organization のリポジトリに対する管理者権限があるユーザが、リポジトリに対してそれより高いレベルの権限を付与すると、基本レベルの権限は、付与された高い権限によってオーバーライドされます。
ドキュメントのとおり、オーナー権限で「Your profile」>「Organizations」>「Settings」>「Member privilegs」>「Base permissions」を確認したところ"Read"になっていました。
対処法
「Base permissions」を"Write"にしました。
結果
pushできました!
おまけ
その他解決法
上記の方法では、対象のOrganizationに所属する全メンバーに対し、また対象のOrganization内の全リポジトリに対し、一括で権限を変更します。それだと困る場合に、代替案をいくつか挙げます。
方法 | 特徴 |
---|---|
チームを作成し、アクセスを管理する | 複数リポジトリがある場合に、チームごとにアクセス権を付与することができます。 |
個人ごとにアクセスを管理する | 対象のOrganization内の全リポジトリに対し、個人のロールを変更することができます。 |