pullリクエストベースの開発をしてみたい
人様に見せるコード(開発履歴付き)として考えると、リポジトリのネットワーク図が横棒一本線でmainが伸び続けるというのも格好が悪い。
ちゃんと機能開発ごとに枝ワケして、mainに帰ってくる、マングローブみたいな開発をしたいなということで。
pullリクエストと承認・マージ
軽くググってみてみると、以下のような手順が紹介されています。
- 機能追加を行う対象とする、既存のリポジトリ(開発者アカウント配下のリポジトリ)をフォークする。
- フォークして、自分アカウント管理配下にもってきたリポジトリに対して、開発用branchを作る
- branch上で開発して、自分のリポジトリにpushする
- 自分のリポジトリから、開発者に対してpullリクエストを発行する
- 開発者が、開発者リポジトリからリクエストの内容を確認し、マージする
1人開発だと、フォークが必須となるというのがちょっと違和感があり。
(一応、prodとstgの2アカを用意してあるので、そのような運用も全然出来はするのだけど)
また、このリクエストと承認管理の履歴はどこに保存されてるんだ、、?というのが気になったこともありまして、調べてみました。
Forkて必須なの??
試しにForkせず、自分のアカウント配下のリポジトリでブランチを作ってみます。
すると、、
# まず、ローカルで開発用のブラントとして feature/test01 というものを作ります。
$ git branch -v
feature/test01 001d752 First Commit for Test01
* main 7522207 Initial commit
$ git ls-files
README.md
$ git checkout feature/test01 && git ls-files
Switched to branch 'feature/test01'
README.md
file_test01
# で、feature/test01をpushします。
$ git push origin feature/test01
remote: Create a pull request for 'feature/test01' on GitHub by visiting:
remote: https://github.com/XXX/test_pull_request/pull/new/feature/test01
* [new branch] feature/test01 -> feature/test01
pullリクエストできる状態に。
forkしないとpullリクエストできないというわけではないのですね。
Forkすべきなの?
上記調べといてですが、結論としてはすべきですかね。
公開系のプロジェクトに対して、ローカルに落としてリモートにアップして、、というのをホイホイやってると上げちゃいけないファイルアップしちゃったり、動作確認してない状態のコード取り込んじゃったり、が少なからずでてくる気がします。
featureブランチ編集してるつもりでmain編集しちゃったりとか、、
そのリスクを考えると、きちんと別アカウントを使って、Forkしてpullリクエスト管理していくべきですね。
pullリクエストの情報てどこに管理されるの?
.gitの中に保存されてたりするのかな、、とおもって軽く調べたのですが、見つけられず。
これはgithubのサーバ上のみで管理される情報なのかな、、?
もうちょっと調べてみたいところですが、現状アイデアがないので、また思いついたら考えます。
マージのときの考え化
逆にマージをかけるときですが、これもこれで考慮が必要。。
pypi展開と、setupファイルをどうする?
pypiは、versioを挙げないと展開できない。
現状、versionはsetup.pyにハードコードしている。
→コードの修正だけではなく、setup.py(場合によってはReadmeファイルも)の修正をしないといけない。
普通に考えると、pypi展開はレポジトリの管理者がマージするときにせっとで実施すべきものであり、コード修正をpullリクエストしてくる人が更新版のsetup.pyを作成・提案してくるのはおかしい。
となると、開発者レポジトリでdevelop用のブランチを作っておいて、pullリクエストはそこで受け付けて、pypi展開などは改めてdevelopブランチをmainブランチにマージするときに行う、、というように考えるべきか??
あるいは、pypi展開はgitの管理と別に、管理者が適切だと思ったタイミングで手動で実施する(gitのコミット管理と必ずしも連動しない)とすべきか、、?
ちゃんと考え方ありますね。。
これ見て勉強します。。
まとめ。
公開アカウントと別に開発用アカウント作って、フォークしてpullリクエスト出すようにしたいと思います。
で、ブランチの使い方は、ちゃんとA successful Git branching modelを読み込ませていただく、と。
ちなみにこっちの勉強のために既知バグフィックスに着手できず!!
。。。本末転倒感はあるけれど、まぁ最小にちゃんとやらんとまた我流の変なくせついちゃうし、仕方あるまい。。