11 ポイント 投稿者 a1eng0 2024-12-25 | 4件のコメント | WhatsAppで共有
  • 社内でmono-repositoryを使い始めて4か月目
  • mono-repositoryといえばついて回るキーワードであるtrunk-based developmentもあわせて適用中
  • trunk-based development戦略に従ってmainブランチにコミットし、releaseブランチにcherry-pickするフローを使っている
  • LinkedIn技術ブログの内容をもとにGitHub Actionを構成したが、CONFLICTを自動で解決することはできない。CONFLICTが発生した場合、ユーザーがlocalで直接git cherry-pickコマンドを実行する必要がある
  • このcherry-pickコマンドを支援するghプラグインを自作してみた

使い方

gh cherry-pick -pr <pr_number> -onto <target_branch> [-merge auto|squash|rebase] [-push]  
  • -mergeオプションでPR merge commitをcherry-pickするか、PRの元のcommit群をcherry-pickするかを選べる
    • 指定しない、または-merge=autoオプションを使うと、PRがmergeされた戦略を自動でinspectして適用してくれる
  • -pushオプションで、cherry-pick成功時に自動でremote pushできる

所感

  • 外部プロセスや状態と継続的に相互作用するプログラムを開発しながら、別途テストリポジトリを作ってTest Datasetを生成した
  • CLI体験を良くするためのさまざまな学習
    • docker-cliを一人で作ってみるための勉強が役立った
  • 思った以上にCLIプログラムを作るには多くの工数がかかる
    • パイプライン形式で多くの状態値を管理すること
    • ユーザーに直感的なinput interfaceを提供すること
    • input validationをできるだけ早い段階で提供すること
    • ユーザーのシステムを元の状態に復元すること など
    • 1日程度で作れると見込んでいたが、完成までに約5日かかった(GitHub Actions Workflow改善のための開発も並行して進めていたとはいえ、それでも予想よりはるかに多くの時間を要した)

4件のコメント

 
qncnxnlrla 2025-01-04

こんにちは〜 main(trunk) ブランチにマージされたコミットを revert する必要がある場合、どのように対応されていますか?

  • main ブランチで revert すると release ブランチにもチェリーピックされる?
  • revert を使わずに修正コミットを追加する?

コミットがたくさん積み重なっていてコンフリクトが発生すると、チェリーピックが難しいケースもあると思うのですが、そのようなケースに対応された経験があるか気になります!

 
a1eng0 2025-01-04

こんにちは。コメントいただきありがとうございます!

main(trunk) ブランチにマージされたコミットを revert する必要がある場合は、どのように対応していますか?

Main ブランチに revert PR を出す際に cherry-pick を指定しています。元の PR リンクに cherry-pick の履歴がすべて残っているため、追跡が難しいことはありません。別途、機械的なチェックは行っていません(笑)

コミットが大量に積み上がっていてコンフリクトが発生すると、cherry-pick が難しい場合

まず、trunk-based development を行っていると各 PR が小さな単位になるため、コンフリクトはあまり頻繁には起きません。もしコンフリクトが発生した場合は、手作業でコードを書く必要があります。release を高頻度で行い、あまりに古いバージョンのサポートを素早く deprecate することで、コードの形が大きく変わってしまう現象を避けています。

 
lamanus 2024-12-26

なぜこれが必要なのか、あまりよく理解できない戦略ですね…。

 
a1eng0 2024-12-26

release-from-trunk で紹介されている内容を読んでみると、理解の助けになるかもしれません(笑)