Git 配置¶
WebKit 项目概述了一个简化的推荐设置。本节更详细地阐述了某些贡献者可能偏好的其他配置选项。
远程仓库¶
分叉¶
由于 git
是一个去中心化版本控制系统,本地副本可以与任何具有相同 SHA 集的远程仓库协同工作。GitHub 拉取请求利用了这一点。运行 git-webkit setup
后,本地 WebKit 仓库中的 .git/config
应如下所示:
[remote "origin"]
url = https://github.com/WebKit/WebKit.git
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "<username>"]
url = https://github.com/<username>/WebKit.git
fetch = +refs/heads/*:refs/remotes/<username>/*
[remote "fork"]
url = https://github.com/<username>/WebKit.git
fetch = +refs/heads/*:refs/remotes/fork/*
现在,如果贡献者运行 git push fork eng/some-branch
,eng/some-branch
将被推送到远程 fork
,这应该对应于该贡献者在 GitHub 上的 WebKit 项目个人分叉。同样,运行 git checkout remotes/fork/eng/some-branch
将根据该贡献者的 fork
远程仓库检出 eng/some-branch
。
git-webkit setup
还会配置一个带有贡献者 GitHub 用户名的远程仓库。这是因为如果其他贡献者想从他们不拥有的拉取请求中检出代码,贡献者将需要添加以下内容:
[remote "<username>"]
url = https://github.com/<username>/WebKit.git
fetch = +refs/heads/*:refs/remotes/<username>/*
到他们的 .git/config
中并运行 git checkout remotes/<username>/eng/some-branch
。这就是 git-webkit checkout pr-#
和 EWS 机器用于检索贡献者更改的方式。
配置选项¶
git-webkit setup
会自动设置或提示贡献者定义多个 git
配置选项。大多数贡献者应使用 git-webkit setup
推荐的默认值。本节详细说明了每个选项的作用以及 WebKit 项目推荐特定设置的原因。
user.email¶
提示
Set '<email>' as the git user email for this repository
Enter git user email for this repository:
user.email
选项通常是全局配置的,在创作或提交更改时会成为 git
中的联系信息。这也是 GitHub 在将提交归因于特定用户时使用的提交部分。贡献者在此处定义的电子邮件应是该贡献者在 GitHub 中的电子邮件之一,以便更改正确地归因于该贡献者。
WebKit 项目要求贡献者为其 WebKit 仓库专门定义此值,因为贡献者报告的电子邮件可能会随时间变化,甚至在不同机器之间有所不同。git-webkit setup
的提示旨在让贡献者思考此特定检出应该报告的联系信息是什么。
请注意,git
提交中列出的作者和提交者可以轻易伪造,因此 user.email
在身份验证中不起作用。它仅用于与其他贡献者进行交流。
user.name¶
提示
Set '<name>' as the git user name for this repository
Enter git user name for this repository:
user.name
选项通常是全局配置的,在创作或提交更改时会成为 git
中列出的名称。贡献者在此处定义的名称应是他们期望其他贡献者在与他们交互时使用的名称。
请注意,git
提交中列出的作者和提交者可以轻易伪造,因此 user.name
在身份验证中不起作用。它仅用于与其他贡献者进行交流。
pull.rebase¶
当贡献者从远程仓库更新分支时,本地分支可能包含远程仓库上不存在的提交。这通常发生在贡献者提交本地更改时。git
在这些情况下支持“rebase”(变基)和“merging”(合并)。
“rebase”意味着更新本地分支引用以匹配远程仓库,然后将本地提交重新应用到更新分支的顶部。对于相对于仓库大小而言较小的更改,这是将本地更改应用到更新分支的最简洁方法。
“merging”意味着创建一个新的“合并提交”,该提交以最新更新的远程仓库中的最新提交和本地最新提交作为其父项。如果本地提交的数量和规模相对于仓库大小而言较大,则此技术很有用。请注意,许多项目明确禁止推送合并提交,因为它们会使二分查找和持续集成推理变得困难。
pull.rebase
配置将在运行 git pull
时自动使用 rebase
工作流。WebKit 项目强烈推荐使用 rebase
工作流,并且不允许在 main
和其他受保护分支上进行合并提交。
color.status/color.diff/color.branch¶
提示
Auto-color status, diff, and branch for this repository?
将颜色应用于各种 git
命令,最显著的是 git log
和 git diff
。许多 git-webkit
命令在决定何时显示颜色时也使用此配置设置。大多数用户会希望使用 auto
,尽管色盲贡献者可能希望自定义这些颜色或完全禁用它们。
diff.*¶
diff
选项将应用于不同的文件类型,并修改 git diff
的输出,使其更具可读性。
core.editor¶
提示
Pick a commit message editor for this repository:
1) [default]
2) Sublime
3) vi
4) open
在创建或编辑提交消息时,git
会调用外部编辑器。默认情况下,在大多数系统上,这是 vi
。core.editor
选项允许 git
用户更改他们希望全局或在仓库内使用的编辑器。请注意,编辑器的调用应该阻塞,直到用户关闭编辑器。
merge.*¶
git
进行基本的自动冲突解决,但某些类型的文件可能难以通过 git
提供的方式解决。为某一类文件指定 merge.driver
有助于在运行 git
命令(最显著的是 git pull
)时自动解决这些文件中的冲突。这在经常更改的版本控制文件或更改日志中最为常见。
WebKit 选项¶
[git-webkit
] 遵循 webkitscmpy
库特有的一些选项。git-webkit setup
会自动配置其中一些,metadata/project_config
也包含项目的一些默认值。
webkitscmpy.pull-request¶
在响应审查反馈时,贡献者可以将其提交附加到原始更改中,也可以强制推送并覆盖现有提交。git-webkit pull-request
支持这两种工作流,webkitscmpy.pull-request
选项可以设置为 overwrite
或 append
,以控制 git-webkit
假定贡献者正在使用哪种工作流。
webkitscmpy.history¶
提示
Would you like to create new branches to retain history when you overwrite
a pull request branch?
1) [when-user-owned]
2) disabled
3) always
4) never
管理拉取请求通常涉及强制推送。这可能导致贡献者在响应反馈时丢失历史更改。git-webkit
支持在拉取请求期间保存旧分支。有些项目可能希望使用 never
积极禁用此选项,因为贡献者不拥有用户特定的分叉。when-user-owned
通常被认为是默认选项,它仅在贡献者拥有远程分叉并使用 overwrite
工作流时创建历史分支。