1
0
wiki/Technology/GettingStarted/版本控制/Git/进阶/常用技巧.md
2024-08-30 12:29:55 +08:00

299 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 常用技巧
description: Git 常用技巧
keywords:
- Git
- 技巧
tags:
- Git/进阶
- 技术/入门
author: 7Wate
date: 2022-09-13
---
## Config 配置
Git 配置文件分为三级,系统级(--system、用户级--global和目录级--local三者的使用优先级以离目录repository最近为原则如果三者的配置不一样则生效优先级 **目录级>用户级>系统级**
- **系统级**/etc/gitconfig使用 **--system** 来进行配置,该配置**对系统上所有用户及他们所拥有的仓库都生效**的配置值。
```shell
git config --system user.name "用户名"
git config --system user.email "邮箱地址"`
```
- **用户级**~/.gitconfig使用 **--global** 来进行配置,该配置**对当前用户上所有的仓库有效**。
```shell
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
```
- **目录级**.git/config使用 **--local** 来进行配置,**只对当前仓库生效。**
```shell
git config --local user.name "用户名"
git config --local user.email "邮箱地址"
```
## 设置默认分支
可以根据需求设置为**系统级(--system、用户级--global和目录级--local**。
```shell
git config --global init.defaultBranch <分支名称>
```
```shell
# 设置默认分支 main
git config --global init.defaultBranch main
```
## 多平台换行符问题 (LF or CRLF)
**文本文件所使用的换行符,在不同的系统平台上是不一样的。**UNIX/Linux 使用的是 0x0ALF早期的 Mac OS 使用的是 0x0DCR后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0ACRLF 作为换行符。
```shell
# 提交时转换为LF检出时转换为CRLF
git config --global core.autocrlf true
# 提交时转换为LF检出时不转换
git config --global core.autocrlf input
# 提交检出均不转换
git config --global core.autocrlf false
# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
# 允许提交包含混合换行符的文件
git config --global core.safecrlf false
# 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
```
如果涉及到在多个系统平台上工作,推荐将 git 做如下配置:
```shell
git config --global core.autocrlf input
git config --global core.safecrlf true
```
## Alias 重命名别名
```shell
git config --global alias.st status //status 缩写成 st
git config --global alias.co checkout //checkout 缩写成 co
git config --global alias.br branch //branch 缩写成 br
git config --global alias.ci commit //commit 缩写成 ci
```
```shell
alias g='git'
alias ga='git add'
alias gco='git checkout'
alias gcb='git checkout -b'
alias gcm='git checkout master'
alias gcd='git checkout develop'
alias gd='git diff'
alias gf='git fetch'
alias gfo='git fetch origin'
alias gl='git pull'
alias gp='git push'
```
Git 常用命令,可以根据实际需要创建缩写命令。
## GPG 签名提交
### 创建新的GPG 密钥
1. 生成 GPG 密钥对
```shell
// 1.1 创建 GPG 密钥
gpg --full-gen-key
// 1.2 列出 GPG 密钥
gpg --list-secret-keys --keyid-format LONG "your_email@example.com"
// 1.3 复制 GPG 密钥 ID以下示例复制 4AEA00A342C24CA3。
sec ed25519/4AEA00A342C24CA3 2021-09-14 [SC]
6DE3507E82DEB6E8828FAAC34AEA00A342C24BD4
uid [ 绝对 ] your_name "your_email@example.com"
ssb cv25519/812B586FD245B560 2021-09-14 [E]
// 1.4 导出 GPG 公钥(以上述 ID 为例)
gpg --armor --export 4AEA00A342C24CA3
```
2. 平台添加 GPG 公钥配置
将 GPG 公钥添加到 git 托管平台,例如 Github、Gitlab、Gitee 等。
3. 本地 Git 仓库关联 GPG 密钥
```shell
// 3.1 列出 GPG 密钥
gpg --list-secret-keys --keyid-format LONG "your_email@example.com"
// 3.2 复制 GPG 密钥 ID以下示例复制 4AEA00A342C24CA3。
sec ed25519/4AEA00A342C24CA3 2021-09-14 [SC]
6DE3507E82DEB6E8828FAAC34AEA00A342C24BD4
uid [ 绝对 ] your_name "your_email@example.com"
ssb cv25519/812B586FD245B560 2021-09-14 [E]
// 3.3 本地 Git 仓库中配置该密钥,对 commit 提交进行签名。
git config --global user.signingkey 4AEA00A342C24CA3
```
4. 签名 Git commit
运行 Git commit 命令时需要用到 `-S` 参数,如果不希望每次都要输入 `-S` 标志,可以配置默认签名。
```shell
// 签名提交
git commit -S -m "your_commit_message"
// 开启默认签名提交
git config --global commit.gpgsign true
```
5. 验证签名
最后可以推送签名提交到 git 托管平台,验证是否签名成功!
### 导入已有的 GPG 密钥
如果你已经有现成的 GPG 密钥,可以导入并使用。
1. **导入 GPG 私钥**
```shell
gpg --import your_private_key_file
```
2. **导入 GPG 公钥**
```shell
gpg --import your_public_key_file
```
3. **信任导入的 GPG 密钥**
```shell
gpg --edit-key your_key_id
gpg> trust
gpg> 5 (ultimate trust)
gpg> quit
```
4. 重复**创建新的GPG 密钥**中的第三步。
## 压缩提交记录
如果在新分支进行了多次提交,然后想合并到主分支。可以使用 --squash 选项,压缩合并提交。
```shell
// 将目标分支的提交压缩为一个,然后合并分支
git merge --squash <branchName>
```
## 忽略文件更改
- 未提交:添加忽略文件相对路径到 .gitignore 中即可。
- 已提交:`git rm --cached file`,添加忽略文件相对路径到 .gitignore 中即可。
## 配置 Git 的凭据存储
当使用 Git 进行代码管理时,你可以配置 Git 的凭据存储,这样就不需要每次都输入用户名和密码。下面是详细的步骤:
### 使用凭证缓存
1. **开启凭证缓存**
```shell
git config --global credential.helper cache
```
2. **设置缓存超时时间**(默认为 15 分钟,以下示例设置为 1 小时):
```shell
git config --global credential.helper 'cache --timeout=3600'
```
### 使用凭证管理器
Git for Windows 以及较新的 Git 版本提供了凭证管理器Credential Manager可以在多平台下存储和管理凭证。
1. **Windows 用户**
```shell
git config --global credential.helper manager
```
2. **MacOS 用户**
```shell
git config --global credential.helper osxkeychain
```
3. **Linux 用户**
```shell
git config --global credential.helper cache
```
### 使用凭证存储
这种方法会将凭证以纯文本的方式存储在磁盘上,安全性较低。
1. **开启凭证存储**
```shell
git config --global credential.helper store
```
2. **第一次使用 Git 操作时输入用户名和密码后,凭证会被保存到磁盘**
3. **使用 `cat` 命令查看 `.git-credentials` 文件的内容**
```shell
cat ~/.git-credentials
```
**请注意**,使用 `store` 凭据存储方式会将密码明文保存在磁盘上,所以请确保你的机器是安全的,并且不要在共享或公共设备上使用该功能。
## 全局的 Git 日志美化
可以使用 `git config --global format.pretty` 设置一个全局的 Git 日志格式化语句。
```bash
git config --global format.pretty "%C(red)%h%C(reset) - %C(yellow)%d%C(reset) %s %C(green)(%cr) %C(bold blue)<%an>%C(reset)"
```
常用的配置选项及其描述:
| 配置选项 | 描述 |
| ------------ | --------------------------------------------- |
| `%H` | 提交的完整哈希字符串 |
| `%h` | 提交的简短哈希字符串 |
| `%T` | 树的完整哈希字符串 |
| `%t` | 树的简短哈希字符串 |
| `%P` | 父节点的完整哈希字符串 |
| `%p` | 父节点的简短哈希字符串 |
| `%an` | 作者的名字 |
| `%ae` | 作者的电子邮件地址 |
| `%ad` | 作者修订日期(可以用 --date=选项定制格式) |
| `%ar` | 作者修订日期相对格式例如“2 weeks ago” |
| `%cn` | 提交者的名字 |
| `%ce` | 提交者的电子邮件地址 |
| `%cd` | 提交日期 |
| `%cr` | 提交日期,相对格式 |
| `%s` | 提交信息标题 |
| `%b` | 提交信息正文 |
| `%Cred` | 文字颜色为红色 |
| `%Cgreen` | 文字颜色为绿色 |
| `%Cblue` | 文字颜色为蓝色 |
| `%Creset` | 重置前面设置的颜色 |
| `%C(yellow)` | 文字颜色为黄色 |
| `%d` | 修饰(比如分支名,标签名) |
| `%D` | 修饰的完整列表 |