Git
GitHub
pullrequest
OSS
contribution
100
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

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 

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
ユーザー登録ログイン
y-vectorfield
記事への掲載内容は私個人の見解であり、所属組織を代表するものではありません。 主な資格: 情報処理安全確保支援士, E資格 2021#1, G検定 2020#2, 他多数
fujitsu
富士通グループのソフトウェア技術者有志により運営しているコミュニティです。

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
Twilioを使うためのコツ、Tipsやおもしろ実装など、Twilioのことなら何でも共有しよう!
~
アルゴリズム強化月間 - 楽しいアルゴリズムの世界を紹介しよう -
~
100
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー