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 config --global color.ui true git config --global core.pager more
git config --global http.proxy http://proxy_ip:proxy_port
通用 git 工作流程
- 克隆 阿尔派 Git 仓库。
- 在您本地仓库的本地检出副本中进行文件编辑。
- 确保您的 提交 符合 质量保证。
- 提交 您本地仓库中的更改。
- 使您本地仓库的其余部分保持最新。
- 检查您将要 推送 的内容
- 如果您有写入权限,请将您的更改 推送 到 master 分支,否则 创建并提交补丁。
Git 基础
克隆您 Fork 的仓库
Fork 您想要贡献的仓库。 例如,要为 aports 贡献 软件包 或打开合并请求,您必须 Fork alpine/aports。 如果您对此有疑问,请参考 Gitlab 文档。
Fork 后,您可以使用以下命令 克隆 仓库
git clone git@gitlab.alpinelinux.org:$USER/$REPO.git
将 $USER 替换为您的 Gitlab 帐户昵称,将 $REPO 替换为您要处理的仓库。
克隆 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>
将第一行视为电子邮件中的主题,将第三行及之后视为电子邮件的正文,描述 提交 的作用。 您不需要长描述,但第一行(简短描述)应该在那里,因为它将显示在 提交 日志中。
autocmd FileType gitcommit set textwidth=72
列出您的提交
要查看您的 提交 列表
git log
要检查您将要从本地 推送 到远程的内容
git log origin..master
使您的本地工作分支保持同步
从上游 (git.alpinelinux.org) 拉取更改
git pull --rebase
运行命令
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
质量保证
在 推送 任何内容之前,最好确保
- 软件包 实际上可以构建
- 提交消息 是好的
- pkgrel 在需要时会被提升
- 没有空格损坏(行的最后一个字符是空格)
以下 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 并使其可执行。
延伸阅读
- Git 教程
- Git - SVN 速成课程(如果您了解 svn,则可以快速入门)
- git 之旅:基础知识 推荐
- Git 社区书籍
- Git 从底层开始
- 非常好的 Git 指南