===== NestDAQ Git Forking Workflow =====
* NestDAQ 本体 (nestdaq-user-implではなく) のコードの修正の提案、変更のリクエストがある場合、Forking Workflow というワークフローに従い、pull request (通称: プルリク) を出して NestDAQ のマスターにマージしてもらう。Forking Workflow は AMANEQ-software のコースコードの開発でも採用されており、重要なワークフローなので、ここにメモを残しておく。
==== Links ====
* Forking workflow
* https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow
* Git Forking Workflow
* https://gitprotect.io/blog/git-forking-workflow/
* Fork and Branch Git ワークフロー
* https://wiki.idempiere.org/ja/Fork_and_Branch_Git_%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC
==== Fowking Workflow ====
* 以下では NestDAQ 本体のソースコードを例にとり、pull request まで出してみる。
=== 開発環境を整える: フォークして、手元のPCにクローンして、上流と同期 ===
- NestDAQ の Web ページにアクセスする。
* https://github.com/spadi-alliance/nestdaq \\ {{:softwares:nestdaq:git_forking_workflow_1.png?600|}}
- Sign in ボタンを押し、自分のアカウントでサインインする。\\ {{:softwares:nestdaq:git_forking_workflow_2.png?300|}}
- サインインすると、以下のような状態になる。\\ {{:softwares:nestdaq:git_forking_workflow_3.png?600|}}
- 右上あたりの {{:softwares:nestdaq:git_forking_workflow_3_button.png?150|}} ボタンを押す。
- Fork をつくる画面に移行する。基本デフォルトのままでOKのはず。右下の緑の Create Fork ボタンを押す。\\ {{:softwares:nestdaq:git_forking_workflow_4.png?600|}}
- nobukoba/nestdaq というリポジトリが作られる。\\ {{:softwares:nestdaq:git_forking_workflow_5.png?600|}}
- その後、コマンドライン上での操作になる。
- 端末で、Fork した自分のリポジトリをクローンする。$ git clone https://github.com/nobukoba/nestdaq.git
Cloning into 'nestdaq'...
remote: Enumerating objects: 296, done.
remote: Counting objects: 100% (54/54), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 296 (delta 38), reused 27 (delta 27), pack-reused 242
Receiving objects: 100% (296/296), 152.78 KiB | 996.00 KiB/s, done.
Resolving deltas: 100% (180/180), done.
- nestdaq ディレクトリに移動し、git remote -v コマンドで origin を確認。
$ cd nestdaq/
$ git remote -v
origin https://github.com/nobukoba/nestdaq.git (fetch)
origin https://github.com/nobukoba/nestdaq.git (push)
$ git branch
* main
$ git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
$ git branch -r
origin/HEAD -> origin/main
origin/main
- さらに、上流の登録をする。さらに、登録したアドレスを git remote -v コマンドで一応確認しておく。
$ git remote add upstream https://github.com/spadi-alliance/nestdaq.git
$ git remove -v
origin https://github.com/nobukoba/nestdaq.git (fetch)
origin https://github.com/nobukoba/nestdaq.git (push)
upstream https://github.com/spadi-alliance/nestdaq.git (fetch)
upstream https://github.com/spadi-alliance/nestdaq.git (push)
- さらに、https://wiki.idempiere.org/ja/Fork_and_Branch_Git_%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC を参考に $ git branch --set-upstream-to=origin/main main と打つ。
$ git branch --set-upstream-to=origin/main main
Branch 'main' set up to track remote branch 'main' from 'origin'.
- idempiere のページにしたがい、upstreamとの同期する。"クローンしたソースコードがマスターリポジトリと同期していることを常に確認する必要があります。"とのこと。$ git checkout main
Already on 'main'
Your branch is up to date with 'origin/main'.
$ git pull upstream main
From https://github.com/spadi-alliance/nestdaq
* branch main -> FETCH_HEAD
* [new branch] main -> upstream/main
Already up to date.
$ git pull origin main
From https://github.com/nobukoba/nestdaq
* branch main -> FETCH_HEAD
Already up to date.
- 準備完了。
=== ファイルを編集して、commit して自分のリポジトリに push ===
- 環境が整ったので、自分のリポジトリでいつもやっているように、commit & push する。
- 例えば nestdaq/CMakeLists.txt のタイポを直してみる。エディタで nestdaq/CMakeLists.txt ファイルの12-14行目を以下のように編集する。 (14行目の add_compiler_options がtypo、正しくは add_compile_options。)
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
message("turn on colored error message of Clang")
add_compiler_options(-fcolor-diagnostics)
| | |
V V V
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
message("turn on colored error message of Clang")
add_compile_options(-fcolor-diagnostics)
- その後、cmake のテストをする。うまくいけば、通常通り commit & push。
$ git add CMakeLists.txt
$ git commit -m "A typo (add_compiler_options --> add_compile_options) was corrected."
[main 09010b8] A typo (add_compiler_options --> add_compile_options) was corrected.
1 file changed, 1 insertion(+), 1 deletion(-)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 335 bytes | 335.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/nobukoba/nestdaq.git
4dae50f..09010b8 main -> main
- これで push 完了。次はプルリク。
=== 上流にプルリクを出す ===
- 修正を上流にマージしてほしい場合は、pull requests を出す
- ブラウザーで自分のリポジトリにアクセスする
* https://github.com/nobukoba/nestdaq \\ {{:softwares:nestdaq:git_forking_workflow_pull_request.png?600|}}
- 左上あたりの Pull requests ボタン {{:softwares:nestdaq:git_forking_workflow_pull_request_button.png?100|}} を押す。
- 以下のような画面に飛ぶ。ここで、緑の New pull request ボタンを出す。 \\ {{:softwares:nestdaq:git_forking_workflow_pull_request_2.png?600|}}
- ここで、緑の Create pull request ボタンを出す。 \\ {{:softwares:nestdaq:git_forking_workflow_pull_request_3.png?600|}}
- Add a description でコメントを編集し、緑の Create pull request ボタンを出す。 \\ {{:softwares:nestdaq:git_forking_workflow_pull_request_4.png?600|}}
- 以下のような画面に飛ぶ。プルリクが承認されると、また見え方が変わるはず。 \\ {{:softwares:nestdaq:git_forking_workflow_pull_request_5.png?600|}}
==== Troubleshooting ====
* https://wiki.idempiere.org/ja/Fork_and_Branch_Git_%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC を見ると、すでにnobukoba/nestdaq.git をクローンしている場合、そのディレクトリに移動して、以下のコマンドを実行すれば、origin の登録ができると書いてある。
$ cd nestdaq
$ git remote remove origin
$ git remote -v # 消えているかチェック。なにも表示されなければOK。
$ git remote add origin https://github.com/nobukoba/nestdaq.git
$ git remote -v
origin https://github.com/nobukoba/nestdaq.git (fetch)
origin https://github.com/nobukoba/nestdaq.git (push)
ただ、このあと、git remote add upstream https://github.com/spadi-alliance/nestdaq.git としてから git branch --set-upstream-to=origin/main main をすると、以下のメッセージがでる。$ git remote add upstream https://github.com/spadi-alliance/nestdaq.git
$ git remove -v
origin https://github.com/nobukoba/nestdaq.git (fetch)
origin https://github.com/nobukoba/nestdaq.git (push)
upstream https://github.com/spadi-alliance/nestdaq.git (fetch)
upstream https://github.com/spadi-alliance/nestdaq.git (push)
$ git branch --set-upstream-to=origin/main main
error: the requested upstream branch 'origin/main' does not exist
hint:
hint: If you are planning on basing your work on an upstream
hint: branch that already exists at the remote, you may need to
hint: run "git fetch" to retrieve it.
hint:
hint: If you are planning to push out a new local branch that
hint: will track its remote counterpart, you may want to use
hint: "git push -u" to set the upstream config as you push.
この場合、https://qiita.com/kitutune/items/4419f2d726bf8d060ea3 や https://stackoverflow.com/questions/41412398/how-to-address-git-error-the-requested-upstream-branch-upstream-master-does-n あたりを参考に、git fetch すればよさそう?とりあえず、git fetch して、branch をチェックすると、以下のようになる。$ git fetch
From https://github.com/nobukoba/nestdaq
* [new branch] main -> origin/main
$ git branch
* main
$ git branch -a
* main
remotes/origin/main
$ git branch -r
origin/main
なんか git remote remove origin しない場合に git branch -a と git branch -r で見えていた remotes/origin/HEAD -> origin/main という行と origin/HEAD -> origin/main 行が見えなくなる。なんでだろう。とりあえず、この状態で、git branch --set-upstream-to=origin/main main とすると、うまくいく。
$ git branch --set-upstream-to=origin/main main
Branch 'main' set up to track remote branch 'main' from 'origin'.