Git

来自 阿尔派 Linux
(重定向自 Development using git)

本文档描述了如何使用 git 进行 阿尔派 Linux 开发。 使用 git 提交您创建的 新软件包提交补丁 。 您还可以浏览 开发者仓库

如果您是 git 新手并且需要快速参考,请查看 Git 基础 部分,并参考 延伸阅读 部分。

配置您的全局 git config

在 git 中配置您的姓名和电子邮件地址。 此姓名和电子邮件地址将显示在您的所有 提交 中

$ git config --global user.name "您的全名" $ git config --global user.email "your@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://proxy_ip:proxy_port

通用 git 工作流程

Git 基础

克隆您 Fork 的仓库

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

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

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

将 $USER 替换为您的 Gitlab 帐户昵称,将 $REPO 替换为您要处理的仓库。

提示: 要更新您的旧 Fork,请参阅 变基 部分。

克隆 aports 仓库

如果您想 克隆 阿尔派 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

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

git log


储藏

git stash

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

重置您的本地仓库

git checkout -f master

如果您认为您的树非常糟糕,需要进行 kill-and-fill 操作以将 master 分支带入您的本地仓库。 您将丢失本地更改。

列出本地分支

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

git branch

这应该输出

* master

列出您本地未提交的更改

git status

提交

现在您可以开始在您的树上工作。 一旦您觉得您已达到开发中的一个步骤,您可以在本地 提交 您的工作,请使用

git commit -a

git commit <specific files>

git add <specific files> git commit

如果您希望将功劳归于他人的工作(例如,您正在应用第三方 补丁)

git commit <specific files> --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' 将在 'git pull' 时自动发出)。
运行命令

git config branch.origin.rebase true

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

Git 标签

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

git tag -a tagname -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 分支变基

最好始终与上游 阿尔派 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 并使其可执行。

延伸阅读

另请参阅