===== 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'.