本家リポジトリを自分のリポジトリに反映させるまで

お久しぶりになりました(ブログの存在忘れてた)

さ!て!と!

GithubのForkについて作業したので,忘れた時のための忘備録をかいておこ。

やったこととしては,とあるリポジトリをForkしたあと,作業するときに本家リポジトリを自分のリポジトリに反映するまでの内容になります。

前提として本家リポジトリはoriginal/sampleです。

Fork

まず, Forkというのは自分のGithubアカウント内に既存のリポジトリの複製を作る操作のことです。 絵で描くとこんな感じ。 f:id:boiled_egg:20180818001014j:plain

つまり自分のリポジトリとして色々と弄れるってわけです。

clone

Github上にあるリポジトリをローカルに持ってくることをcloneといいます。 f:id:boiled_egg:20180818001019j:plain

cloneしてくるのはforkした自分のリポジトリになります。

$ git clone git@github.com:your/sample.git

ローカルに落として作業していきます。

cloneし終わったあとは,remoteの情報(本家リポジトリ)をupstreamという名前で追加します。

$ git remote add upstream git@github.com:original/sample.git

Fetch と Merge

ローカルで作業していきますが,作業している間に本家リポジトリ(original/sample)に変更があった場合,コンフリクトが発生してしまいます。

この時,本家リポジトリの変更は自分のリポジトリ(your/sample)には自動的に変更は行われません。(自動的にしてくれるのあるのかな)

つまり,自分で更新する必要があるっていうこと。

そこでfetchとmergeを使って自分のリポジトリも更新していきます。

$ git fetch upstream

f:id:boiled_egg:20180818013103j:plain

fetchで行なっていることはoriginのorigin/master(upstream)をyourのorigin/masterに最新状態を更新しているだけになります。

「だけ」というのも,ファイルの更新は行われていないということです。

そのあとは,yourのorigin/master(要はupstream/master)の情報を元にローカルのmasterにmergeします。

これでファイルの更新が行われ,ローカルが本家と同じ最新状態になります。

コマンドの流れとしては以下のように実行しました! forkはgithub上からできます。

$ git clone git@github.com:your/sample.git

$ git remote add upstream git@github.com:original/sample.git

$ git fetch upstream

$ git merge upstream/master

これで無事に本家リポジトリを自分のリポジトリに追従することができました!

ちなみにmergeする際,この追従作業を行わなかったためにコンフリクトが発生してしまったので,困惑しましたw

何かしら作業して本家に反映させたい場合は,追従作業を行なってからpull requestの流れに持っていきましょう(戒め)