1

同僚が彼のgitリポジトリからパッチを送ってくれました。クローンではないため、彼のindexエントリには、私のリポジトリでは認識されていないハッシュが含まれています。サンプル:

index 20589f5..bbdd152 100644

20589f5彼のリポジトリには存在しますが、私のリポジトリには存在しません。

TortoiseMergeを使用してパッチを適用しようとすると、次のメッセージが表示されます。

fatal: not a valid object name

TortoiseMergeをだましてパッチを受け入れるにはどうすればよいですか?


編集:TortioseMergeである必要はありません。パッチを視覚的に適用できる(そしてWindowsで実行できる、できれば無料の)他のツールも優れています。

4

3 に答える 3

3

Gitパッチは、実際にはmbox形式の統合された差分です。Gitメタデータやマージ履歴を気にしない場合は、コマンドラインのpatchコマンドにパッチファイルを直接フィードできます。例えば:

cd /path/to/project
patch < 0001-foo.patch

これは確かに機能しますが、履歴を維持することが重要な場合は、git-bundle(1)を使用して完全なブランチを転送する方が良い方法かもしれません。

于 2012-06-28T10:12:01.170 に答える
2

同僚からのものであるため、最良の答えは、パッチシリーズを介して、またはリポジトリからフェッチできるようにすることで、不足しているデータを提供してもらうことです。このデータを取得できれば、他のルートは時間の無駄です。

そうしないと、現在の作業ツリーに適切に適用されないパッチがあり、3方向マージを実行するための十分な情報がありません。

とにかくパッチを適用してみたい場合は、パッチの適用を試みるために使用することをお勧めしますgit am(またはgit apply、パッチの代わりに差分を提供した場合は、これは悪い習慣です)。このオプションを使用し--rejectて、可能な限り適用するように強制できます。Gitは、現在のツリーに適切に適用されなかったdiffハンクの`.rej'ファイルを作成します。その後、これらを手動で適用してみることができます。

もう1つのオプションは、エディターを使用してパッチ全体を手動で適用することです。

patch他の場所で提案されているように使用する必要はありません。git apply常に望ましいでしょう。

今、あなたはこれを視覚的に行いたいと思っています、そして私が提供できる最良の提案はの疑似視覚--interactiveモードですgit apply。これにより、パッチハンクをハンクごとに適用できるようになります。

Tortoisemergeは、マージを実行するために2つまたは3つの完全なファイルを想定しているため、Tortoisemergeではこれを行うことはできません。インデックス値はリポジトリ内の既知のBLOBに対応していないため、Tortoisemergeに完全なベースファイルリビジョンを提供することはできません。

于 2012-08-20T00:23:18.530 に答える
1

TortoiseMergeを引数なしで手動で起動すると、ダイアログで「マージ」と「統合差分の適用」のどちらかを選択するように求められます。後者を選択し、パッチを「Diff file」として選択し、Git作業ツリーを「Directory」として選択します。「OK」を押すと、パッチが変更したすべてのファイルを一覧表示するウィンドウが表示されます。次に、[すべてのアイテムにパッチを適用]をクリックするか、ファイルを選択して[アイテムにパッチを適用]をクリックします。これにより、TortoiseMerge内でパッチが視覚的に適用されます。

于 2012-08-17T05:40:50.707 に答える