Git
版本控制策略、常用命令和技巧
安装配置
Mac
通常自带 Git,但如果没有安装,或者你想更新到最新版本,可以通过以下几种方式安装:
通过 Homebrew 安装
shbrew install git
通过 Xcode 安装
shxcode-select --install
Windows
通过 Git 官网下载安装包:https://git-scm.com/download/win
验证是否安装成功:
git --version
配置 Git 用户信息
Git 需要知道提交者的身份信息。通过以下命令设置全局用户信息:
# 设置用户名
git config --global user.name "Your Name"
# 设置邮箱
git config --global user.email "Your Email"
设置默认编辑器(可选)
设置默认编辑器为 Vim
shgit config --global core.editor vim
设置默认编辑器为 VSCode
shgit config --global core.editor "code --wait"
配置 SSH 密钥(用于 GitHub、GitLab 等远程仓库)
生成 SSH 密钥
shssh-keygen -t rsa -b 4096 -C "你的邮箱地址"
解释:
-t rsa
:指定密钥类型为 RSA-b 4096
:指定密钥长度为 4096 位-C "你的邮箱地址"
:指定注释信息为你的邮箱地址
执行命令后,会提示你输入保存密钥的文件路径,按回车键默认保存在
~/.ssh/id_rsa
。设置密码(可选)
系统会提示你设置一个密码,这个密码用来加密你的私钥文件。如果你不想设置密码,直接按回车键即可。
添加 SSH 密钥到 ssh-agent
sheval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa
注意:
~/.ssh/id_rsa
是你生成的 SSH 密钥的路径。复制 SSH 公钥到剪贴板
shpbcopy < ~/.ssh/id_rsa.pub
或者对于 Linux 系统:
shcat ~/.ssh/id_rsa.pub | xclip -selection clipboard
在 GitHub、GitLab 等远程仓库添加 SSH 公钥。
测试 SSH 连接
shssh -T git@github.com
配置 GPG 密钥
安装 GPG
shbrew install gnupg
生成 GPG 密钥
shgpg --full-generate-key
选择密钥类型:默认情况下,现在的 GPG 会选择
ECC and ECC
。您可以直接按Enter
选择默认选项,生成ECC
密钥。注意
ECC
密钥(如Ed25519
)提供了更高的安全性和更小的密钥尺寸。但在某些旧系统或软件中,可能存在兼容性问题。如果需要最大兼容性,可以选择RSA and RSA
,然后将密钥长度设置为4096
位。选择曲线类型: 如果选择了
ECC
,系统会提示您选择曲线。默认的Curve 25519(Ed25519)
是推荐的选项,直接按Enter
即可。设置密钥的有效期: 输入
0
表示密钥永不过期,或者根据需要设置。用户信息: 输入您的姓名、邮箱地址(必须与 GitHub 上的邮箱一致)和可选的注释。
确认信息: 检查所有信息是否正确,输入
O
确认。设置密码短语: 为您的密钥设置一个安全的密码短语。
查看 GPG 密钥
shgpg --list-secret-keys --keyid-format LONG
会看到类似以下的输出:
sh[keyboxd] ---------------- sec ed25519/密钥ID 日期 [SC] 密钥指纹 uid [ultimate] 姓名 <邮箱> ssb cv25519/子密钥ID 日期 [E]
记录下 ed25519/ 后面的长密钥 ID。例如,
ABCD1234EFGH5678
。导出并复制公钥
shgpg --armor --export 密钥ID | pbcopy
复制的内容类似于:
sh-----BEGIN PGP PUBLIC KEY BLOCK----- mDMEY... ... -----END PGP PUBLIC KEY BLOCK-----
将 GPG 密钥添加到 GitHub
配置 Git 使用 GPG 签名
- 设置默认签名密钥
- 启用自动签名提交
- 指定 GPG 程序的路径
- 使用默认
openpgp
格式
shgit config --global user.signingkey 密钥ID git config --global commit.gpgsign true git config --global gpg.program $(which gpg) git config --global --unset gpg.format
安装 pinentry-mac
pinentry 程序用于提示您输入 GPG 密钥的密码。
shbrew install pinentry-mac echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf killall gpg-agent
为避免每次提交都输入密码,可以配置 GPG 缓存密码:
shcode ~/.gnupg/gpg-agent.conf
添加以下内容,代表把密码缓存 1 小时,最大缓存时间为 2 小时。
shdefault-cache-ttl 3600 max-cache-ttl 7200
重启代理:
shkillall gpg-agent
在 VSCode 打开
"git.enableCommitSigning": true,
选项。gpg failed to sign the data fatal: failed to write commit object?
验证 gpg-agent 是否已启动
shpgrep gpg-agent
如果命令返回一个或多个进程 ID,表示 gpg-agent 已成功启动。
如果未运行,尝试重新启动 gpg-agent:
shgpgconf --kill gpg-agent gpgconf --launch gpg-agent
设置环境变量
在您的 Shell 配置文件(如
~/.bashrc
或~/.zshrc
)中添加:shexport GPG_TTY=$(tty)
然后重新加载配置文件:
shsource ~/.zshrc # 或者 source ~/.bash_profile
确保
commit.gpgsign
设置为true
,且没有冲突的条目shgit config -l | grep gpg
如果发现有类似以下输出:
shcommit.gpgsign=true gpg.program=/opt/homebrew/bin/gpg commit.gpgsign=false
找出哪个配置文件将
commit.gpgsign
设置为false
,它可能是在你的仓库中的本地.git/config
文件中设置的:shgit config --show-origin --get-all commit.gpgsign
全局启用 GPG 签名,删除冲突的配置:
shgit config --global commit.gpgsign true git config --unset commit.gpgsign
或者,你也可以手动编辑当前仓库的
.git/config
文件,删除或注释掉commit.gpgsign=false
这一行。
常用 Git 命令
命令 | 功能说明 |
---|---|
git rebase --abort | 取消变基操作 |
git branch | grep -v "^\*" | xargs git branch -D | 删除除当前分支外的所有分支 |
git branch | xargs git branch -D | 删除所有本地分支,包括当前分支 |
git fetch --prune | 从远程仓库获取最新的代码,并删除已经被删除的分支 |
git branch -m <old_branch> <new_branch> | 重命名本地分支 |
git push origin --delete <branch_name> | 删除远程分支 |
遇到的问题
Connection closed by 198.18.1.24 port 22
确保你已经正确配置 SSH 密钥,并将公钥添加到 GitHub。
检查是否有 SSH 密钥:
shls -al ~/.ssh
如果你看不到
id_rsa
和id_rsa.pub
,参考 上文的步骤 生成 SSH 密钥。使用 GitHub 的备用端口 443 :
shcode ~/.ssh/config
遇到了 zsh: command not found: code 错误?
使用
vim
或其他编辑器打开~/.ssh/config
文件:shvim ~/.ssh/config
或者参考 安装 code 命令行工具。
在文件中添加以下内容:
shHost github.com Hostname ssh.github.com User git Port 443 IdentityFile ~/.ssh/id_rsa
这个示例配置会让 SSH 在连接到 GitHub 时使用端口
443
,并且指定使用你的~/.ssh/id_rsa
私钥文件。
The authenticity of host '[ssh.github.com]:443 ([198.18.4.3]:443)' can't be established
这是因为你第一次连接 GitHub,SSH 不认识 GitHub 的主机密钥。输入
yes
继续连接。shAre you sure you want to continue connecting (yes/no/[fingerprint])? yes
将主机密钥添加到
known_hosts
在你输入
yes
后,GitHub 的主机密钥会被添加到~/.ssh/known_hosts
文件中。如果你想手动添加,可以执行以下命令:shssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts