使用 git 操作网站源代码

介绍

Git 是一个版本控制系统,用于帮助在同一份资料上的多人协作。每个用户都可以拥有主存储库的本地副本。本地副本可以位于同一台计算机上,也可以位于世界各地。然后,用户可以根据需要修改本地副本,并在完成资料的修改后,提交更改并将其推回主存储库。

如果远程仓库有比您在同一个分支上的本地副本新的提交(修改),则 Git 不允许您直接推送提交。如果发生冲突,请先获取并更新您的本地副本,然后在最新提交的基础上根据需要rebase您的新修改。

Git 存储库写入权限

整个 Debian 网站源代码都使用 Git 管理。它位于 https://salsa.debian.org/webmaster-team/webwml。默认情况下,不允许访客推送自己的提交到源代码存储库中。您需要一些许可才能获得对存储库的写入权。

不受限制的写入权限

如果您需要对存储库的不受限制的写入权限(例如,您打算成为频繁提交的贡献者),请考虑通过 https://salsa.debian.org/webmaster-team/webwml网页登录到 Debian Salsa 平台后请求写入权限。

如果您刚开始参与 Debian 网站开发,并且没有经验,请在请求不受限制的写入访问权限之前发送一封带有自我介绍的电子邮件到 debian-www@lists.debian.org。请考虑在自我介绍中提供一些有用的信息,例如您打算翻译哪种语言或网站的哪个部分,以及谁会为您担保。

通过合并请求(Merge Requests)写入存储库

如果您不打算获得对存储库的不受限制的写入权限或无法做到这一点,您可以随时提交合并请求,并让其他开发人员检查并接受您的成果。请使用由 Salsa GitLab 平台通过其网页界面提供的标准程序提交合并请求(阅读 Project forking workflow 以及 When you work in a fork 了解详细步骤)。

并不是所有的网站开发人员都随时查看合并请求,因此他们不一定总是及时处理。如果您不确定所作的贡献是否会被接受,请发送电子邮件至 debian-www 邮件列表请求核查。

使用存储库开展工作

获取一份本地副本

首先,您需要安装 git 才能使用存储库。接下来,在您的计算机上设置您的用户名和电子邮件信息(请参阅通常的 git 文档以了解如何执行此操作)。然后,您可以采用以下两种方式之一克隆存储库(换句话说,对其创建本地副本)。

建议使用 webwml 的方法是先在 salsa.debian.org 上注册一个帐户,并通过将 SSH 公钥上传到您的 salsa 帐户来启用 git SSH 访问。有关如何执行此操作的更多详细信息,请参见 salsa 帮助页面。然后,您可以使用以下命令克隆 webwml 存储库:

   git clone git@salsa.debian.org:webmaster-team/webwml.git

如果您还没有 Salsa 帐号,您可以使用 HTTPS 协议克隆并获取仓库副本:

  git clone https://salsa.debian.org/webmaster-team/webwml.git

这将为您提供相同的存储库本地副本,但是您将无法直接以这种方式将修改直接推送回远程仓库。

克隆整个 webwml 存储库将需要下载大约 500MB 的数据,因此对于网络连接缓慢或不稳定的用户而言可能会很麻烦。您可以先尝试以最小深度进行浅克隆,以进行较小数据的初始下载:

  git clone git@salsa.debian.org:webmaster-team/webwml.git --depth 1

获得可用(浅)存储库后,您可以加深本地浅副本,并最终将其转换为完整的本地存储库:

  git fetch --deepen=1000 # 为仓库加深另 1000 次提交
  git fetch --unshallow   # 获取所有未获取的提交,将仓库转换成完整的

检出部分内容

您可以仅检出部分页面,如下所示:

   $ git clone --no-checkout git@salsa.debian.org:webmaster-team/webwml.git
   $ cd webwml
   $ git config core.sparseCheckout true
   在 webwml 中: 创建带有像这样内容的文件 .git/info/sparse-checkout :
   (如果您只想要基本文件、英语、加泰罗尼亚语和西班牙语翻译):
      /*
      !/[a-z]*/
      /english/
      /catalan/
      /spanish/
   然后:
   $ git checkout --

提交本地修改

令您的本地仓库保持最新

每隔几天(也一定要在开始一些编辑工作之前!),您应该

   git pull

以从存储库中获取已被更改的文件。

强烈建议在执行“git pull”和进行编辑工作之前保持本地 git 工作目录的干净。如果您有未提交的更改或当前分支的远程存储库中不存在的本地提交,则执行“git pull”将会自动创建合并提交,甚至会由于冲突而导致拉取失败。请考虑将未完成的工作保存在另一个分支中,或使用“git stash”之类的命令。

注意:git 是一个分布式(而非集中式)版本控制系统。这意味着当您提交更改时,它们将仅存储在本地存储库中。要与他人共享它们,您还需要将所做的更改推送到 salsa 上的中央存储库。

编辑英语文件的示例

此处提供了有关于如何在网站源代码存储库中编辑英语文件的示例。在使用“git clone”获取存储库的本地副本之后,也在开始编辑工作之前,运行以下命令:

   $ git pull

现在对文件进行修改。当您完成后,使用以下命令将您的更改提交到本地存储库:

   $ git add path/to/file(s)
   $ git commit -m "Your commit message"

如果您有对远程 webwml 存储库的不受限制的写入权限,那么现在可以将您所做的更改直接推送到 Salsa 存储库中:

   $ git push

如果您无权直接写入 webwml 存储库,请考虑使用 Salsa GitLab 平台提供的“合并请求”功能提交您的更改,或寻求其他开发人员的帮助。

这是有关于如何使用 git 操作 Debian 网站源代码的非常基本的概述。有关 git 的更多信息,请阅读 git 的文档。

在 git 提交中关闭 Debian 的错误

如果您的提交日志条目中包含Closes: #nnnnnn,那么在您推送您的更改后,错误编号#nnnnnn将会被自动关闭。精确的形式与 Debian 政策相同。

使用 HTTP/HTTPS 链接

许多 Debian 网站都支持 SSL/TLS,因此请尽可能使用 HTTPS 链接。但是,某些 Debian/DebConf/SPI 等网站要么不具有 HTTPS 支持,要么仅使用 SPI 数字证书认证机构(并不是一个被所有浏览器信任的 SSL 证书认证机构)。为了避免给非 Debian 用户带来错误消息的困扰,请不要使用 HTTPS 链接到此类站点。

git 存储库会拒绝那些包含使用纯 HTTP 链接到支持 HTTPS 的 Debian 网站的内容或包含使用 HTTPS链接到已知不支持 HTTPS 或仅使用 SPI 签名的证书的 Debian/DebConf/SPI 网站的内容的提交。

翻译工作

翻译应始终与相对应的英文文件一样保持最新。翻译文件中的“translation-check”头用于跟踪当前翻译所基于的英语文件版本。如果您更改了已翻译的文件,则需要更新 translation-check 头以匹配英语文件中相应更改的 git 提交哈希值。您可以使用以下方式找到该哈希值

$ git log path/to/english/file

如果您要对一个文件新建翻译,请使用copypage.pl脚本,它将为您的语言创建一个模板,该模板包含了正确的翻译头。

使用 smart_change.pl 进行翻译修改

smart_change.pl 是一个脚本,旨在令一起更新原始文件及其翻译更为容易。有两种方法供您使用,选择哪种取决于您进行的更改。

当您在手动更改文件时使用 smart_change 更新 translation-check 头:

  1. 对原始文件进行更改,然后提交
  2. 更新翻译
  3. 运行 smart_change.pl——它会获取更改并更新已翻译文件的头
  4. 查看更改(例如,使用“ git diff”)
  5. 提交翻译更改

或者,如果您要使用带有正则表达式的 smart_change 来一次性对文件进行多个更改:

  1. 运行 smart_change.pl -s s/FOO/BAR/ origfile1 origfile2 ...
  2. 查看更改(例如,使用git diff
  3. 提交原始文件
  4. 运行 smart_change.pl origfile1 origfile2 (即,这次没有正则表达式);它现在只会更新已翻译文件的头
  5. 最后,提交翻译更改

这比前一个方法涉及更多的提交(需要两次提交),但由于 git 提交的哈希值的工作方式,这无法避免。

获取通知

接收提交通知

我们已经在 Salsa 中配置好了 webwml 项目,以便在 IRC 频道 #debian-www 中显示提交。

如果您想要在 webwml 存储库中有提交时通过电子邮件接收通知,请按照以下步骤(仅需一次) 通过 tracker.debian.org 订阅www.debian.org伪软件包并在其中激活vcs关键字:

接收合并请求通知

如果您想要在 Salsa GitLab 平台上的 webwml 仓库收到新的合并请求(Merge Request)的时候得到电子邮件提醒,您可以在网页界面上配置您的通知设置。步骤如下: