Git

来自 Alpine Linux

本文档描述了如何使用 git 进行 Alpine Linux 开发。 使用 Git 提交你创建的新软件包提交补丁。 你也可以浏览开发者仓库

如果你是 Git 新手并且需要快速参考,请查看Git 基础部分,并参考进一步阅读部分。

配置你的全局 git 配置

在 Git 中配置你的姓名和电子邮件地址。这个姓名和电子邮件地址将显示在你所有的提交中

$ git config --global user.name "你的姓名" $ git config --global user.email "你的@email.address"

使用git config不带--global可以让你为特定的 Git 仓库配置其他细节。

提示: 如果你想使用带有颜色输出的 Git,请使用

git config --global color.ui true git config --global core.pager more

提示: 如果你想使用带有代理服务器的 Git

git config --global http.proxy http://代理服务器_ip:代理服务器_端口

通用 git 工作流程

Git 基础

克隆你 Fork 的仓库

Fork 你想要贡献的仓库。例如,要为 aports 贡献软件包或打开合并请求,你必须 Fork alpine/aports。如果你对此有疑问,请参考 Gitlab 文档

Fork 后,你可以使用以下命令克隆仓库

git clone git@gitlab.alpinelinux.org:$USER/$REPO.git

将 $USER 替换为你的 Gitlab 账户昵称,并将 $REPO 替换为你想要工作的仓库。

提示: 要更新你的旧 Fork,请参阅变基

克隆 aports 仓库

如果你想克隆 Alpine Linux aports 仓库,请切换到你想要放置 aports/ 目录的目录并启动 git。除非你拥有必要的开发者权限,否则你将无法将你的更改推送回仓库。

git clone git://git.alpinelinux.org/aports.git

提示: 如果你正在使用代理服务器

git clone https://git.alpinelinux.org/aports

如果你只需要最近 3 个修订版本

git clone git://git.alpinelinux.org/aports.git --depth 3

使用以下命令查看主干的完整日志。

git log


暂存

git stash

如果你想“隐藏”你的更改。如果你认为可能还有其他提交针对你正在处理的相同内容,并且想要刷新你的本地检出(使用git pull --rebase)从 master 分支更新,请这样做。使用git stash apply以恢复你的暂存。

重置你的本地仓库

git checkout -f master

如果你认为你的树非常糟糕,需要彻底重置以将 master 分支引入你的本地仓库。你将丢失本地更改。

列出本地分支

你现在可以通过执行以下操作列出你的本地分支

git branch

应该输出

* master

列出本地未提交的更改

git status

提交

现在你可以开始在你的树上工作了。一旦你觉得你已经达到了开发的某个阶段,可以本地提交你的工作,请使用

git commit -a

git commit <指定文件>

git add <指定文件> git commit

如果你想对别人的工作表示感谢(例如,你正在应用第三方补丁)

git commit <指定文件> --author "姓名 姓氏 <user@example.com>

提交消息的格式应该是

One-line description that's less than 72 chars long
<second line empty>
Optional longer description with explanation why changes were made. Links to relevant issues
in Bugtracker can be done with:

  ref #<issuenumber>

It is also possible to resolve issues with:

  fixes #<issuenumber>

将第一行视为电子邮件中的主题,将第三行及之后的内容视为电子邮件的正文,描述提交的作用。你不需要长描述,但第一行,即简短描述应该在那里,因为它将显示在提交日志中。

提示: 你可以将以下行添加到你的 ~/.vimrc
autocmd FileType gitcommit set textwidth=72

列出你的提交

要查看你的提交列表

git log

要检查你将要从本地推送到远程的内容

git log origin..master

使你的本地工作分支保持同步

从上游(git.alpinelinux.org)拉取更改

git pull --rebase

提示: 你可以告诉 Git 使用 rebase 而不是 merge(意味着在 `git pull` 时会自动发出 '--rebase')。
运行命令

git config branch.origin.rebase true

下次你执行 `git pull` 时,你实际上是在执行 `git pull --rebase`。

Git 标签

创建带注释的标签并推送它。

git tag -a 标签名 -m '提交消息 (例如 release 1.x)' git push && git push --tags

Git 推送

将你的更改推送到 master 分支。

git push

创建新项目

创建你自己的目录,你想让它成为你的新 acf-mystuff 项目。

mkdir acf-mystuff cd acf-mystuff git init

创建你的文件并将它们添加/提交到你的 git 项目中

git add ./ git commit

基于上游 master 分支进行变基

最好始终与上游 Alpine Linux 仓库的状态保持同步,以确保稍后不会发生合并冲突。为此,你首先必须添加一个新的 git 远程仓库,它指向上游仓库(而不是你的 Fork)

git remote add upstream https://gitlab.alpinelinux.org/alpine/$REPO

现在你可以使用以下命令获取所有更改

git fetch --all

然后你可以使用以下命令进行变基

git rebase

质量保证

在推送任何内容之前,最好确保

  1. 软件包实际构建成功
  2. 提交消息良好
  3. 如果需要,pkgrel 已被提升
  4. 没有空白损坏(行的最后一个字符是空格)

以下 git 钩子将帮助你尽早捕获一些常见错误

#!/bin/sh

# Redirect output to stderr.
exec 1>&2

git diff --cached --name-only HEAD | grep 'APKBUILD$' | while read f; do
        olddir=$PWD
        cd ${f%/APKBUILD}
        if ! abuild sanitycheck && verify; then
                exit 1
        fi
        cd "$olddir"
done

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached HEAD --

将其安装为 .git/hooks/pre-commit 并使其可执行。

进一步阅读

另请参阅