Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
71
Help us understand the problem. What are the problem?
Organization

【超図解】OSSにPull Requestを出す時の備忘録

OSS(Open Source Software)のコミュニティー(本家)のリポジトリにPull Requestを出す時にいつも手順が分からなくなってしまいます1。例によって調べながらやりますが、ページによって記載がまちまちだったりします。そこで備忘録として手順をまとめておくことで迷わずスムーズにPull Requestを出せる様にしておこうと思いました。また、ただGitのコマンドを羅列しただけの備忘録では無く、実際にVega EditorというOSSにコントリビュートしてみた行程をまとめて残しておこうと思います。

:warning: GitHubを例に解説しますが、その他のGitベースのサービス(GitLab, BitBucket等)も基本的に(コマンド)操作は同じです。

OSSのリポジトリをForkする

今回はVega EditorというOSSにコントリビュートしてみようと思います。たまたま今回この記事を執筆するタイミングで修正箇所が有った為、選択したという次第です。Forkを実施するためにまずはOSSのGitHubのリポジトリ2にアクセスします。OSSのリポジトリを自分のGitHubアカウントにForkして自分リポジトリとして扱える様にします。Forkの方法は下図の赤丸のForkボタンをクリックするだけです。

fork.png

Forkしたリポジトリのクローン

Forkしたリポジトリは自分のユーザー名/リポジトリ名3という名前が付きます。このリポジトリにまず修正を反映します。修正作業を行うためにリポジトリをローカルにクローンします。下図のClone or downloadをクリックします。ここで、パスワード認証(HTTP)かSSH認証によってURLが異なります。URL横のクリップボードマークをクリックすることでURLをコピー出来ます。

clone.png

今回の検証に使っているリポジトリでは以下のコマンドになります。

git clone git@github.com:y-vectorfield/editor.git

Upstreamブランチ情報の登録

これ以降登場する用語の早見表をまず掲載します。これは所謂どこのリポジトリを指しているかのエイリアスの様な物です。

エイリアス 指しているリポジトリ
リモート(origin) 自分のアカウントのリモートリポジトリ4
ローカル 自分のローカル作業環境上のリポジトリ
upsteream OSS本家のリポジトリ5

それでは本家のリポジトリをupstreamとしてgit configに登録します。URLは本記事での例です。

git remote add upstream https://github.com/vega/editor

登録結果を確認します。

git config -l

末尾に以下の内容が追加されていれば成功です。

remote.upstream.url=https://github.com/vega/editor
remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/*

修正を反映し、Commit & Push

修正用のブランチに必ずスイッチしてからローカルで修正を行い、まずリモートリポジトリに修正を反映させます。今回はdocker-compose.ymlにrestartオプションを追加する修正を行います。

:warning: OSSのコミュニティーによってContributionルール(ブランチ名の付け方、commitメッセージの書き方等を指定)を定めている場合はルールに則ります。

$ git checkout -b add-restart-option
Switched to a new branch 'add-restart-option'
version: "3.7"
services:
  editor:
    init: true
    build: .
    ports:
      - "8080:8080"
    volumes:
      - "./src:/usr/src/app/src"
+   restart: "always"

この修正が反映されることで、マシーンの再起動後必ずコンテナが再起動する様になります。後はリモートにcommit & pushを実施します。

$ git add .
$ git commit -m "Add restart option into docker compose yml file"
$ git push origin add-restart-option

Pull Requestをコミュニティー(本家)に提出

Compare & pull requestをクリックします。Pull Requestに添付するコメントを入力する画面が表示されます。コメント後Create pull requestをクリックし、提出します。

pull request.png

提出後、多くの場合テストやフォーマットチェックなどが実行されます。完了すると下図の様な表示となります。

completed.png

無事Mergeされました

Pull Requestが無事Merge(採用)されました!!これでOSS本家のリポジトリに修正が反映されました。

merged.png

merged2.png

Merge後のupstreamの内容をローカル, リモートに反映

無事Pull RequestがMergeされたので、その内容をローカルリモート(origin)に反映します。この行程は今後Pull Requestを出す時に、コミュニティーのリポジトリが更新されていた(手元のリポジトリが古い)場合にも実施します。

ローカルブランチがmasterにチェックアウトされて居ない場合はチェックアウトします。

git checkout master

まずupstreamの最新版の内容をfetchします。

git fetch upstream

ローカルのmasterブランチにupstreamの内容をmergeします。

git merge upstream/master --ff-only

最後にリモートのmasterブランチに更新を反映します。

git push origin master -u

下図の様にコミュニティーのリポジトリ(upstream)とリモートリポジトリが同じ状態になりました。

community.png

remote.png

まとめ

OSSのコミュニティーにPull Requestを出す手順を備忘録を兼ねてまとめてみました。これでGitの仕様が変更にならない限りは操作に困らなくなります。

Reference


  1. 業務等で頻繁にPull Requestを出しておられる方には何でも無いことなのかもしれませんが、趣味でやっているため、どうしても断続的になりがちです。。。 

  2. 本記事の場合: https://github.com/vega/editor 

  3. 筆者の場合: y-vectorfield/editor 

  4. 本記事の場合: https://github.com/y-vectorfield/editor 

  5. 本記事の場合: https://github.com/vega/editor 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
71
Help us understand the problem. What are the problem?