1. ホーム
  2. mercurial

mercurialのベストプラクティス:branch vs. clone、そして部分的なマージ?

2023-10-18 18:41:29

質問

...というわけで、メルカリで簡単なものには慣れてきたのですが( add , commit , diff ) を作成し、.hgignore ファイルについて知り (やったー!) 、ブランチの作成と切り替えのコツを掴みました ( branch , update -C ).

しかし、2つの大きな疑問があります。

  1. ブランチ "Branch1"にいて、ブランチ "Branch2"からの変更のすべてではなく一部を取り込みたい場合、どのようにすればよいでしょうか。特に、すべての変更がひとつのサブディレクトリにある場合です。(リポジトリ全体をクローンして、Beyond Compareのようなディレクトリマージツールを使って編集箇所を選択&選択すればいいのでしょうけど。しかし、1 つのファイルまたは 1 つのディレクトリの変更を分離する方法があるはずです)。

  2. でのブランチ間の切り替えは update -C はとても簡単なので、なぜわざわざ clone . いくつかの理由しか思いつきませんが(下記参照)、私が見逃している他の理由があるのでしょうか?

    a. 2 つのバージョン/ブランチを同時に操作する必要がある場合 (たとえば、パフォーマンス メトリックの差分を取る)。

    b. バックアップのため ( clone を物理的に異なる場所にあるネットワークドライブに保存する)

    c. 上記で述べたような pick&choose マージを行うため。

どのように解決するのですか?

クローンを使っています。

  • 短命のローカルブランチ
  • 異なる開発マシンやサーバーへのクローン作成

前者の使い方は私にとってかなり稀です。主に、完全に放棄したくなるようなアイデアを試しているときです。マージしたい場合は、すべての変更をマージしたいと思います。この種のブランチは、主に異なる開発者のブランチを追跡して、互いに邪魔し合わないようにするためのものです。この最後の点を明確にしておきます。

  • 私は自分の変更に取り組み続け、仲間の開発者の変更をプルし、彼らは私の変更をプルします。
  • 私にとって都合が良いとき、私はこれらのブランチのひとつ (またはすべて) の変更をすべて私のブランチにマージします。

機能ブランチや長期間のブランチには、私は名前付きブランチを使用します。これは、マージせずにリポジトリ間でより快適に共有することができます。これはまた、選択的にマージしたい場合にも便利です。

基本的に、私はこのように見ています。

  • 名前付きブランチは、アプリの異なるブランチまたはバージョンを開発するためのものです。
  • クローンは、アプリの同じバージョンへの異なる貢献を管理するためのものです。

これは私の考えですが、実際にはポリシーの問題です。