Gitを複数のアカウントで利用(プルリク)してみる。

はじめに

GitHubでTIL(Today I learned)を共同でしてみたかったのでいろいろ試してみました。TILに関してはこちらで。

※今回はGitHubのアカウントを2つ作成して実験してみました。

✅ゴール
・Gitの理解を深める

✅環境
Windows

Gitの基本

基本的なプッシュ方法

※自身のアカウントでリポジトリを作成してプッシュする場合(最初のみ)。

git init # リポジトリを新規に作成
git add . # ファイルを追加
git commit -m"changed title" # コミットする
git remote rm origin # 登録されているリポジトリを削除する(2回目などのケース)
git remote add origin (GitHubのURL) # リモートリポジトリの追加
git push -u origin master # push

※今回はブランチ作成を割愛してます。

必要な知識

参考:GitHubのコントリビューターとコラボレーターについて

コントリビューター:外部から貢献。リポジトリに対するpush、mergeの権限はないので、Forkして修正、Pull Requestを行う必要がある。※OSSのケース

コラボレーター:コアな開発者。リポジトリに対してpush、mergeの権限があり、プロジェクト自体に対する変更権限を有する。

👉コントリビューターはコラボレーターに対して、Forkしたプロジェクトの修正ブランチをPull Requestを介して、マージしてもらうフローになる。

複数人(AとB)がコラボレーターとしてリポジトリを扱うケース

※サークルで運用するには現実的じゃないケースだと思いました。

①コラボレーターAがGitHub上でリポジトリを作る。

②コラボレーターAがB(コアな開発者※push,merge)をコラボレーターとしてリポジトリに招待する。 参考

Setting⇒Manage access⇒Invite a collaborator

③Bがメールを確認⇒GitHubでBの垢ログイン、ボタンを押すと承認。

④プッシュ。

承認前は403権限エラーではじかれていたpushが可能になる。

⑤確認 

反映されているのを確認することができる。※ちなみにこの方法だとPrivateリポジトリでも反映&確認できる。

コラボレーターとコントリビューターがリポジトリを扱うケース

※OSSでもこの方式。サークルでの活動や通常の共同開発もこの方法でやるのがいいと思いました。

①コラボレーター(Wechlog)がリポジトリを作成

②コントリビューター(chobi1125)がコラボレーター作成のリポジトリをFork

③Forkすると自身の垢でリポジトリ(コピー)が生成されるのでこれをローカルにgit cloneする。

以下コマンド

git clone https://github.com/chobi1125/til.git

④ローカルでクローンしたプロジェクトを編集

※ここでは適当にフォルダ生成、ファイル生成

⑤プッシュで確認

※フォルダが追加されているのが確認できる。

⑥プルリクエストする

右上のPull requestを選択

Create pull requestを選択

タイトルと内容を記載しCreate pull requestを選択

確認

⑦コラボレーター側が確認

Pull requestを選択

さっきのプルリクエストが確認できる

Merge pull requestを選択⇒ボタンがConfirm mergeに代わるのでさらに選択

⑧マージの反映を確認

反映されている!!

Organizationアカウントにしてみる

組織アカウントはメンバーを登録でき、権限を細かく設定できるようになるとのことなので作成してみました。

参考:githubのorganizationアカウントの運営について

①Setting⇒Organizations⇒Turn ~~ into an organization

②必要項目の入力(※ユーザーは個人垢を指定しないといけない)

③User垢でサインイン、アカウントスイッチャーで選択できるようになる。

※Ownersはメンバーの管理、アカウント自体の削除などすべての権限を持つ。他にRead Access、Write Access、Admin Accessの権限があり、それに則ったチームを作成して運用する。

④ユーザーの追加(※未実施)

メンバー追加はこちらで。権限の適用範囲を決めるチームの設定はこのページ遷移後。

⑤プッシュしてみる(複数のユーザーをローカルで切り替える必要性がなくなったため)

git pull origin master
git remote rm origin
git init
git add .
git commit -m"changed title"
git remote add origin https://github.com/wechlog/til.git
git push -u origin master

⑥確認

※これに伴い二段階認証が必要になったので適用した。 参考

ブランチを変更してプルリクしてみる

参考:
【GitHub】Milestone, Issue, Pull Requestを関連付けて扱う
git コマンド branchの作り方

①pullしてGitHubから最新の情報を取得する

git pull origin master

※Forkしているので必要ないかも

②マイルストーン(開発期限)を立てる

超ざっくり

③Issueの作成

 

これまたざっくり

確認

④ブランチを作成

git branch -a // 確認
* master
  remotes/origin/master
git checkout master // ブランチを作る元のブランチへ切替(今回は不要)
git checkout -b 作成するブランチ名 // ブランチを作成
>>Switched to a new branch 'chobi1125'
git push -u origin 作成したブランチ名 // ブランチを登録
git fetch origin // 念のため最新の状態をリモートから取得
git merge origin/master // 現在のブランチへ統合

確認

⑤プッシュ

git add .
git commit -m"changed branch"
git remote add chobi1125 https://github.com/chobi1125/til.git
git push -u origin chobi1125

確認。masterブランチは変化なし。

chobi1125ブランチは変更が反映されていることを確認◎

⑥プルリクする。

参考:良いPull Requestのための10のTips

上の画像、右上のCompare&pull requestを選択。⇒Create pull request(マークダウンも反映される。)

メッセージ内に Closes #n でプルリクエストをIssueと紐づけることができます。

⑦マージする。

Merge pull request⇒Confirm merge

成功(マージが成功するとchobi1125のブランチは安全に削除できる。)

確認

 

IssueがClosedされていることも確認できる。

GitBashで複数ユーザーの切替(※ローカルからのpush)

以下、備忘録です。

サブ垢で非公開リポジトリ作成
⇒コマンドライン上でアカウントをサブ垢に変更してプッシュすると403エラー(※not foundになるので、公開リポジトリに変更したところ403エラー)

原因:サブ垢のSSHがローカルで設定できていない。

SSH鍵を作成する(まずはメイン垢) SSH鍵の作り方参考 参考②windows仕様 複数垢の参考

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Enter file in which to save the key (/c/Users/chonm/.ssh/id_rsa): /c/Users/ユーザー名/.ssh/id_B_rsa // ファイル名を複数作る前提で変えて作成。
Enter passphrase (empty for no passphrase): // 任意
Enter same passphrase again: // 任意

鍵の生成場所でconfigファイルを作成

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-sub
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_sub_rsa

作成された~~.pub(拡張子が付く方が公開鍵)の中身をコピー

GitHub右上のメニューから Settings⇒SSH and GPG keys⇒New SSH Key⇒Title(自由)、Key(コピーした内容をペースト)を入力して登録。

以下コマンドで確認。

ssh github
Hi main! You've successfully authenticated, but GitHub does not provide shell access.
ssh github-sub
Hi sub! You've successfully authenticated, but GitHub does not provide shell access.

現在のユーザー、メールを確認

git config --global user.name
git config --global user.email
git config --list //これで一覧

切替

git config --global user.name sub
git config --global user.email sub@example.com

git remote addの部分の記述を差し替えてプッシュすると成功

git remote add origin git@github-sub:ユーザー名/リポジトリ名.git
git push -u origin master
Enter passphrase for key '/c/Users/ユーザー名/.ssh/id_sub_rsa':

確認

おわりに

本日、OSSでプルリクを送るフローをリアルタイムで見せていただく機会があり、とても勉強になりました。

これはインプットした内容を自分なりにアウトプットしたものです。

今回はブランチを用いていないのでまだ実践的ではありませんが、改めてブランチを弄りながら試してみたいと思います。

※GitHubの垢を2つ作ると1人で擬似共同開発できることに気付いてしまった。。。笑

📝その他参考
Gitの設定をgit configで確認・変更

コメントを残す