跳到内容

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-brancheng/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 loggit 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 会调用外部编辑器。默认情况下,在大多数系统上,这是 vicore.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 选项可以设置为 overwriteappend,以控制 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 工作流时创建历史分支。