0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubでフォーク後のリポジトリで作業中、アップストリームの変更を随時取り込む技

Posted at

はじめに

GitHubで何かプロジェクトをフォークして、自リポジトリで修正した後、プルリクで本家プロジェクトにフィードバックする、というワークフローはよくある話だと思います。
よくある困ったこととして、フォーク元の更新が早いと、修正した内容が問題無いか確認が必要だったり、別途調整が必要など、色々と頭が痛い問題があります。
ここではエイリアスを駆使してフォーク元の更新に同期しつつ、修正を完遂したいユースケースについてメモを残しておきます。

フォーク元の変更をフォーク先のリポジトリに同期する

フォーク元の変更をフォーク先のリポジトリに同期するするには下記のコマンドを実行する必要があります。

gh repo sync フォーク先のリポジトリ名

これでリモートリポジトリ(フォーク先のリポジトリ)を最新の状態に更新することができますが、当該リポジトリ(フォーク先のリポジトリ)の作業している時、リモートリポジトリというのは、ローカルリポジトリで作業している場合では自明です。
自明ですが、gh コマンドはローカルリポジトリとは無関係で稼動することが要求されるコマンドです。明示的にリポジトリ名を指定する必要があります。
そこでローカルリポジトリの作業中、git 側のフローと連動させることで、この辺りの省力化を図ります。

というわけで現在作業しているリポジトリ(ワークスペース)のリポジトリ名を取得します。

gh repo set-default --view

これで取得できれば(=GitHubからクローンしていれば)、下記のようにして同期、つまり最新の状態に更新できます。

gh repo sync $(gh repo set-default --view)

ここまでできれば git pull すれば最新の更新をワークスペースに取り込めることになります。

あとはワークフローに乗せるだけですね。下記のようにエイリアスを定義すれば、git pull 前に git sync してしまえば良いことになります。

git config --global alias.sync '!gh repo sync $(gh repo set-default --view)'

よくある質問とその答え

Q.gh repo sync じゃダメなのですか?

A.リモートリポジトリをローカルリポジトリに同期するだけです。git pull にほぼ等しい振る舞いになります。

Q.用語が分からん。関係性込みで説明してくれ。

A.ワークスペース・インデックス・ローカルリポジトリ・リモートリポジトリまでであればGitの範疇の用語となります。こちらについては参考文献を参照してください。とりあえずGitとは何か…を知っている前提でこの辺りの話を省略します。
厳密には更に、GitHubとは何か…を知っている必要があります。ここではGitとGitHubの接点がどうなってるかを注視して説明します。

GitHubではリモートリポジトリをホスティングしてくれるサービスです。
GitHubは、別のリポジトリからフォークして、自分のリモートリポジトリとして取り扱う事ができるサービスを提供しています。
GitHubでは、別のリポジトリからフォークする、その元となるリポジトリをアップストリーム(upstream)と位置付けています。
もちろんその関係性も含めてGitで取り扱う事ができなくもないです(あります)が、GitHubが自身が用意されてる機能を使用することで、管理が容易になります。

ワークスペース→(git add)→インデックス→(git commit)→ローカルリポジトリ→(git push)→リモートリポジトリ→(gh pr)→アップストリーム

リモートリポジトリまではGitの取り扱い範疇ですが、リモートリポジトリから先はGitHubの取り扱い範疇となります。
その辺りの用語説明無しに解説されている話ではありますが、リモートリポジトリ・アップストリームを「フォーク先のリポジトリ」・「フォーク元のリポジトリ」としてGitHub側の立場になって見る必要があります。

参考文献

gh repo sync については色々と解説を見て参考にもなるのですが、この核心に触れる解説を見つけられなかったので、マニュアルのみリンクします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?