9

Gitノートをマージするために次のことを行いました。
ref : http://vmiklos.hu/blog/git-notes-merge

リポジトリを複製し、コミット (refs/notes/commits) へのメモ参照を追加しました。プッシュすると、早送りではないため、中央リポジトリはそれを拒否します-そのコミットオブジェクトの参照/メモ/コミットが既にあったためです。リモートの Notes 参照をローカルの Notes 参照にマージするには、

  1. git チェックアウト refs/notes/master
  2. git fetch refs/notes/commits
  3. git merge FETCH_HEAD
    Auto-merging 206155715a78c9d91d42cda1de98449d2e0b1d36
    CONFLICT (追加/追加): 206155715a78c9d91d42cda1de98449d でのマージの競合......
    自動マージに失敗しました。競合を修正してから、結果をコミットします。
  4. vi 206155715a78c9d91d42cda1de98449d........ [通常どおり手動で競合を修正]
  5. git add 206155715a78c9d91d42cda1de98449d........
  6. git commit -m "updated Notes"
    [分離された HEAD 0afb80f] 変更されたメモ
  7. git update-ref refs/notes/commits HEAD
  8. git checkout master
    以前の HEAD 位置は 0afb80f でした... 変更されたメモ
    ブランチ 'master' に切り替えました
  9. git push origin refs/notes/commits
    成功

問題は、これがこれを行うための最良の方法であるかどうかです。

git notes man page に従って、次のことを試しました。

  1. git fetch refs/notes/commits
  2. git notes merge -v refs/notes/commits
    更新するものはありません!

上記の手順は明らかに私にとってはうまくいきません。最初の図に示されている「ブランチ メソッド」ではなく、git notes merge コマンドを使用してメモをマージする方法はありますか? 私のユーザーにとっては、この簡単なコマンドの方が便利です。

4

2 に答える 2

9

コメントで既に言及したように、最初のアプローチがうまくいかない理由の 1 つは、指示を間違ってコピーしたことです。2 番目のステップgit fetch refs/notes/commitsでリモコンの名前が欠落しています。

を使用した 2 番目のアプローチについては、git notes mergeからリモートを削除するという同じ間違いを犯しましたgit fetch。しかし、これを修正しても、マージする前にリモートから別の ref 名前空間にメモをフェッチする必要があることが最終的にわかるまで、それを機能させるのに苦労しました。ローカルrefs/notes/commitsポイント (ただし、競合がない場合は喜んで早送りします)。

だからこれは私のために働く:

git fetch origin refs/notes/commits:refs/notes/origin/commits
git notes merge -v origin/commits

競合がある場合は、編集.git/NOTES_MERGE_WORKTREEしてから で結果をコミットするgit notes merge --commitか、 でマージを中止するように指示されますgit notes merge --abort

上記の URL で提案されている手法git notes mergeを使用することの大きな欠点の 1 つは、マージではインデックスが提供されないため、などを介した通常のマージ ワークフローを使用できないことです。もう 1 つの点は、リベースがサポートされていないことです。したがって、複雑な競合が予想される場合やリベースが必要な場合は、このアプローチを使用することをお勧めします。ただし、単純なケースでは、作業ツリーが汚れているときにマージを実行できるため、おそらくより便利ですが、クリーンである必要があります。git mergetoolgit checkout refs/notes/commitsgit notes mergegit checkout refs/notes/commits

私は、git-notes(1)マニュアルページがこれをすべてより明白にすることができると確信しています. そのためのパッチを提出する時間を見つけるかもしれません。しかし、それまでの間、リモート リポジトリとの間でメモを簡単に共有できるようにする、 という新しいラッパーを作成しました。git-rnotes

于 2013-04-28T23:56:06.243 に答える
2

注: git 2.6 (2015 年第 3 四半期/第 4 四半期) ではgit notes merge、もう少し効率的かつ正確になります。

commit 4f655e2、commit d2d68d9commit 11dd2b2commit 93efcadcommit 4d03dd1commit e48ad1b (2015 年 8 月 17 日) by Jacob Keller ( jacob-keller)を参照してください。
( 2015 年 8 月 31 日、コミット 5b6211aJunio C Hamanoによってマージされました)gitster

notes:オプションgit notesについて教えるnotes.<name>.mergeStrategy

にマージする際のメモのマージ方法を設定するためnotesの新しい " " オプションについて教えてください。 このオプションを使用すると、すべてのメモ参照をマージするのではなく、特定のメモ参照をマージする戦略を選択できます。は、マージ元のリモート参照ではなく、マージ先のローカル参照である ことに注意してください。ユーザーは、マージ元のリモート ref に応じた戦略ではなく、個別のローカル ref マージ戦略を構成することを主に望んでいると想定されています。notes.<name>.mergeStrategyrefs/notes/<name>
cat_sort_uniq
<name>

notes.<name>.mergeStrategyより具体的であるため、一般的な動作をオーバーライドします。

于 2015-09-01T09:07:01.520 に答える