9

我做了以下合并 Git 笔记。
参考: http: //vmiklos.hu/blog/git-notes-merge

我克隆了一个 repo,添加了对提交的注释引用(refs/notes/commits)。当我推送它时,中央仓库会拒绝它,因为它不是快进的——因为该提交对象已经有一个 refs/notes/commits。因此,为了将远程 Notes 引用合并到我的本地 Notes 引用,

  1. git checkout refs/notes/master
  2. git fetch refs/notes/commits
  3. git merge FETCH_HEAD
    自动合并 206155715a78c9d91d42cda1de98449d2e0b1d36
    CONFLICT (add/add): Merge conflict in 206155715a78c9d91d42cda1de98449d........
    自动合并失败;修复冲突,然后提交结果。
  4. vi 206155715a78c9d91d42cda1de98449d........ [像往常一样手动修复冲突]
  5. git 添加 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 手册页之后,我尝试了以下操作。

  1. git fetch refs/notes/commits
  2. git notes merge -v refs/notes/commits
    没什么可更新的!

上述步骤显然对我有用。有没有办法使用 git notes merge 命令合并笔记,而不是第一张图中所示的“分支方法”?对于我的用户来说,这个简单的命令会更有帮助。

4

2 回答 2

9

正如我在评论中已经提到的那样,第一种方法对您不起作用的一个原因是您错误地复制了说明:您的第二步git fetch refs/notes/commits缺少遥控器的名称。

关于第二种方法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一大缺点是合并不提供任何索引,因此您不能通过etc 使用正常的合并工作流程。另一个是它不支持变基。因此,如果您预计会有复杂的冲突或需要重新设置基准,那么我建议您采用这种方法。但在简单的情况下,可能更方便,因为您可以在工作树脏时执行合并,而要求它是干净的。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 (Q3/Q4 2015) 将git notes merge更加高效和精确:

请参阅Jacob Keller ( )的提交 4f655e2提交 d2d68d9提交 11dd2b2提交 93efcad提交 4d03dd1提交 e48ad1b(2015 年 8 月 17 日) 。(由Junio C Hamano 合并——提交 5b6211a中,2015 年 8 月 31 日)jacob-keller
gitster

notesgit notes:教notes.<name>.mergeStrategy选项

讲授notes一个新的“ notes.<name>.mergeStrategy”选项,用于在合并时配置笔记合并策略refs/notes/<name>
此选项允许为特定的笔记参考选择合并策略,而不是所有笔记参考合并,因为用户可能不需要cat_sort_uniq所有参考,而只需要一些参考。
请注意,这<name>是我们要合并到的本地引用,而不是我们合并的远程引用。假设是用户主要希望配置单独的本地 ref 合并策略,而不是根据他们合并的远程 ref 的策略。

notes.<name>.mergeStrategy覆盖一般行为,因为它更具体。

于 2015-09-01T09:07:01.520 回答