先人の知恵・知見に感謝

Qiitaの ‘GitHubでFork/cloneしたリポジトリを本家リポジトリに追従する’ という記事をもとにした。

やりたいこと

要約

上記掲載の記事を参考とし、Tagへの追従が必要だったので以下手順を作成した。
このエントリーはよりよい方法が確立でき次第更新する。

  • 他に作成されているGit repoをもとにする
  • 独自のpatchなどを適用したい
  • conflictする/元ソースへの影響を出したくないなどの理由によりpull requestなどは行う予定がない
  • 将来的にもとのGit repoが更新された際にも追従したい
  • 参照元repoのbranchやtagについて指定を行う必要がある

現物

実際にやりたかったことは以下の通り。

  • https://github.com/df8oe/UHSDR の安定版における最新リリース(tagで指定出来る)を取得
  • 日本のバンドプランに合わせた調整(5MHz送出禁止/7MHz調整など)
  • 調整したソースコードをbuild
  • 新しいリリースが出た際には随時追従

ToDo

継続的に参照元からのpullと手許masterでの継続的作業の検証。

全体を見通す

git clone git@github.com:${MYNAME}/${MYREPO}.git
cd ${MYREPO}
git remote add upstream https://github.com/${YOURNAME}/${YOURREPO}.git
git ls-remote --tags upstream
git pull upstream tag ${YOURTAG} --allow-unrelated-histories
(edit)
git add -A
git tag ${YOURTAG}
git commit -m "${MYCOMMITMSG}"
git push origin ${YOURTAG}JA

事前準備

自分のrepoを準備する

下記例にてすでに存在するGitHub repoのclone方法を示す。
Repo自体の作成方法はここでは扱わない。

git clone git@github.com:${MYNAME}/${MYREPO}.git  
cd ${MYREPO}

参照したいrepoを登録する

下記例にて参照したいGit repoを upstreamにて扱う方法を示す。

git remote add upstream https://github.com/${YOURNAME}/${YOURREPO}.git

継続的適用

pullしたいtagを確認する

upstreamのタグ一覧を取得する。

git ls-remote --tags upstream

Tagを指定した上でpullする

upstream の中から必要とするtagを指定し master (すでに指定しているbranch)へのmergeを行う。

git pull upstream tag ${YOURTAG} --allow-unrelated-histories

修正(patch等)を実施する

vi/emacs/sed/patchなど好みの手法で実施する

編集内容をcommit/pushする

自分自身が持つrepoへのcommit/pushを行う。
タグは揃える。

git add -A
git tag ${YOURTAG}
git commit -m "${MYCOMMITMSG}"
git push origin ${YOURTAG}JA

元記事はこちら

継続的に他の方が作成したGit repoからcheckoutし、修正を適用した上で自分のrepoとしてpushする