使用 `git notes` 命令可以为 Git 对象添加或检查附加的“笔记”(notes),这些笔记可以用来补充提交信息,而无需修改原始的提交对象本身。这在需要记录如“测试人”等额外信息时非常有用。
**为已提交代码添加补充信息**
要为已提交的代码添加补充信息,可以使用 `git notes add` 命令。例如,如果想为特定对象(如 SHA-1 散列值)添加一个测试信息,可以执行类似以下的操作:
```bash
git notes add -m 'Tested-by: Johannes Sixt <j6t@kdbg.org>' <object_sha256>
```
这会在不改变原始提交对象的情况下,将测试信息作为笔记附加到该对象上。这些笔记可以通过 `git show` 或 `git log` 等命令查看。
**配置合并策略以解决冲突**
当多个用户同时更新同一对象的笔记时,可能会发生冲突。`git notes merge` 命令用于合并笔记,并且允许用户配置合并策略来自动解决冲突。用户可以通过设置 `notes.mergeStrategy` 配置默认的合并策略,或者在执行 `git notes merge` 时使用 `--strategy` 选项来指定策略。
以下是几种可用的自动合并策略:
* **`ours`**: 自动以本地版本(当前笔记引用)为准解决冲突。
* **`theirs`**: 自动以远程版本(要合并进来的笔记引用)为准解决冲突。
* **`union`**: 通过连接(concatenating)本地和远程版本来自动解决冲突。
* **`cat_sort_uniq`**: 类似于 `union`,但它还会对合并后的内容进行排序,并移除重复的行。这相当于对本地和远程版本执行了 `cat | sort | uniq` 的操作。此策略特别适用于笔记内容是基于行格式的情况,以避免合并结果中出现重复的行。
默认的合并策略是 `manual`,此时需要用户手动解决冲突。如果发生冲突,系统会在一个特殊的工作区(`.git/NOTES_MERGE_WORKTREE`)检出冲突的笔记,并指导用户手动解决,之后用户需要使用 `git notes merge --commit` 来完成合并,或使用 `git notes merge --abort` 来中止。
通过配置 `notes.mergeStrategy` 或在命令行使用 `--strategy` 选项,可以预先定义如何处理这类并发更新导致的笔记冲突。