54

Git に慣れるために、Mercurial と一緒に Git を使い始めたところです。

Mercurial の mq エクステンションを広範囲に使用してローカル パッチを管理しており、Git に相当するものを探しています。

Git ブランチを使用する必要がありますか? または、パッチを簡単に適用および削除できるローカル パッチを管理するためのより良い方法はありますか?

ありがとう、

4

4 に答える 4

32

Git Wikiの「インターフェース、フロントエンド、ツール」ページの「パッチ管理インターフェースレイヤー」セクションを確認してください。Mercurialsの「mq」拡張機能とほぼ同等の2つのパッチ管理インターフェイスがリストされています。

ただし、より高度な使用法が必要ない場合は、代わりに「git rebase --interactive」を使用して、パッチを並べ替え、押しつぶし、分割することができます。また、現在のバージョンのアップストリームに対してブランチを管理するには、通常、「gitrebase」で十分です。

于 2009-06-04T20:18:36.470 に答える
32

免責事項: 私は hg ユーザーではないので、hg について読んだことはありますが、実際に使用した経験はあまりありません。

git には、「パッチ キュー」スタイルでブランチを管理するための非常に強力で柔軟なツールがいくつか用意されているため、多くの基本的な (さらには非常に複雑な) ユース ケースでは、ネイティブ git が十分に強力です。

通常、ほとんどのプロジェクトは、新しいコミットのみを取得し、決して「巻き戻される」ことのない中央の安定したマスター ブランチを保持するため、マスター ブランチのコミットは修正されます。

これに加えて、メンテナー (または開発者) は、安定版ブランチに基づく進行中のパッチ (つまりコミット) の 1 つ以上の流動的なブランチを維持する場合があります。

一般的なパッチ管理アクティビティには、次のものがあります。

パッチ キューを最新の安定版ブランチにリベースする - 使用git rebase,

パッチ キューを古いメンテナンス ブランチに複製する -git branchおよびgit rebaseを使用します。

キュー内のパッチの並べ替え - git rebase --interactive(別名git rebase -i) テキスト エディターを使用してキューを並べ替えます。

squashing パッチ - git rebase -isquash ディレクティブで使用

パッチまたはパッチ コミット メッセージの変更 - git rebase -iedit ディレクティブで (テーマを見つけますか?) を使用します。

何らかの方法でパッチを変更するアクティビティ (内容、説明、親子関係など) は、そのパッチの新しいコミット ID を持つ新しいコミットを作成します。安定したマスター ブランチに昇格する前に、古いコミットが破棄され、定期的に置き換えられる可能性があるという事実だけが、それらをブランチではなく「パッチ キュー」にしていますが、これは物理的な違いではなく、プロジェクトの規則です。コミットを構成するデータ内。gitにとって、それらは同一のオブジェクトです。

パッチを「実際の」コミットに昇格するには、パッチをキューの先頭に移動し、マスター ブランチにマージするだけです。パッチをキューの先頭に移動した後は、マスター ブランチに基づく通常のコミットとまったく同じであるため、マージすると、マスター ブランチ ポインターがパッチ コミットを指すように早送りされます。

このコミットを「安定した」マスター パッチとして公開することは、「これは変更されないコミットであり、プロジェクトの不変の歴史の一部である」という行為です。

于 2009-06-04T20:33:42.837 に答える
9

ブランチを使用して、アップストリームブランチに対して定期的にリベースします。これは、mq(過去にデータを失った)を使用するよりも管理が簡単で安全です。

于 2009-06-04T20:18:38.390 に答える
7

Git は実際にはこの機能自体を提供していません。用途によっては、「git stash」やブランチでなんとかなるかもしれませんが、それはかなり基本的なものです。git でより高度なパッチ管理が必要な場合は、Quilt または StGit を使用するようです: http://git.or.cz/gitwiki/PatchManagementを参照してください。

于 2009-06-04T20:05:55.793 に答える