Git
本文档描述了如何使用 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 config --global color.ui true git config --global core.pager more
git config --global http.proxy http://代理服务器_ip:代理服务器_端口
通用 git 工作流程
- 克隆 Alpine Git 仓库。
- 在你本地仓库的本地副本检出中进行文件编辑。
- 确保你的提交符合质量保证要求。
- 提交你在本地仓库中的更改。
- 使你本地仓库的其余部分保持最新。
- 检查你将要推送的内容
- 如果你有写入权限,推送你的更改到 master 分支,否则创建并提交补丁。
Git 基础
克隆你 Fork 的仓库
Fork 你想要贡献的仓库。例如,要为 aports 贡献软件包或打开合并请求,你必须 Fork alpine/aports。如果你对此有疑问,请参考 Gitlab 文档。
Fork 后,你可以使用以下命令克隆仓库
git clone git@gitlab.alpinelinux.org:$USER/$REPO.git
将 $USER 替换为你的 Gitlab 账户昵称,并将 $REPO 替换为你想要工作的仓库。
克隆 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>
将第一行视为电子邮件中的主题,将第三行及之后的内容视为电子邮件的正文,描述提交的作用。你不需要长描述,但第一行,即简短描述应该在那里,因为它将显示在提交日志中。
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 标签名 -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
质量保证
在推送任何内容之前,最好确保
- 软件包实际构建成功
- 提交消息良好
- 如果需要,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 指南