From e2a4a06bf38db3b284f06d8ee7c41ed2053be557 Mon Sep 17 00:00:00 2001 From: 7Wate Date: Mon, 8 Jul 2024 15:38:13 +0800 Subject: [PATCH] =?UTF-8?q?Git=EF=BC=9A=E5=B8=B8=E7=94=A8=E6=8A=80?= =?UTF-8?q?=E5=B7=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../版本控制/Git/进阶/常用技巧.md | 119 ++++++++++++++---- 1 file changed, 94 insertions(+), 25 deletions(-) diff --git a/Tech/getting-started/版本控制/Git/进阶/常用技巧.md b/Tech/getting-started/版本控制/Git/进阶/常用技巧.md index df5cff4a..46367202 100644 --- a/Tech/getting-started/版本控制/Git/进阶/常用技巧.md +++ b/Tech/getting-started/版本控制/Git/进阶/常用技巧.md @@ -15,21 +15,21 @@ date: 2022-09-13 Git 配置文件分为三级,系统级(--system)、用户级(--global)和目录级(--local),三者的使用优先级以离目录(repository)最近为原则,如果三者的配置不一样,则生效优先级 **目录级>用户级>系统级**。 -1. **系统级**(/etc/gitconfig):使用 **--system** 来进行配置,该配置**对系统上所有用户及他们所拥有的仓库都生效**的配置值。 +- **系统级**(/etc/gitconfig):使用 **--system** 来进行配置,该配置**对系统上所有用户及他们所拥有的仓库都生效**的配置值。 ```shell git config --system user.name "用户名" git config --system user.email "邮箱地址"` ``` -1. **用户级**(~/.gitconfig):使用 **--global** 来进行配置,该配置**对当前用户上所有的仓库有效**。 +- **用户级**(~/.gitconfig):使用 **--global** 来进行配置,该配置**对当前用户上所有的仓库有效**。 ```shell git config --global user.name "用户名" git config --global user.email "邮箱地址" ``` -1. **目录级**(.git/config):使用 **--local** 来进行配置,**只对当前仓库生效。** +- **目录级**(.git/config):使用 **--local** 来进行配置,**只对当前仓库生效。** ```shell git config --local user.name "用户名" @@ -44,6 +44,11 @@ git config --local user.email "邮箱地址" git config --global init.defaultBranch <分支名称> ``` +```shell +# 设置默认分支 main +git config --global init.defaultBranch main +``` + ## 多平台换行符问题 (LF or CRLF) **文本文件所使用的换行符,在不同的系统平台上是不一样的。**UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是 0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF) 作为换行符。 @@ -77,7 +82,6 @@ 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 -git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" ``` ```shell @@ -98,6 +102,8 @@ Git 常用命令,可以根据实际需要创建缩写命令。 ## GPG 签名提交 +### 创建新的GPG 密钥 + 1. 生成 GPG 密钥对 ```shell @@ -105,39 +111,39 @@ Git 常用命令,可以根据实际需要创建缩写命令。 gpg --full-gen-key // 1.2 列出 GPG 密钥 -gpg --list-secret-keys --keyid-format LONG "your_email" +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" +uid [ 绝对 ] your_name "your_email@example.com" ssb cv25519/812B586FD245B560 2021-09-14 [E] // 1.4 导出 GPG 公钥(以上述 ID 为例) gpg --armor --export 4AEA00A342C24CA3 ``` -1. 平台添加 GPG 公钥配置 +2. 平台添加 GPG 公钥配置 将 GPG 公钥添加到 git 托管平台,例如 Github、Gitlab、Gitee 等。 -1. 本地 Git 仓库关联 GPG 密钥 +3. 本地 Git 仓库关联 GPG 密钥 ```shell // 3.1 列出 GPG 密钥 -gpg --list-secret-keys --keyid-format LONG "your_email" +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" +uid [ 绝对 ] your_name "your_email@example.com" ssb cv25519/812B586FD245B560 2021-09-14 [E] // 3.3 本地 Git 仓库中配置该密钥,对 commit 提交进行签名。 git config --global user.signingkey 4AEA00A342C24CA3 ``` -1. 签名 Git commit +4. 签名 Git commit 运行 Git commit 命令时需要用到 `-S` 参数,如果不希望每次都要输入 `-S` 标志,可以配置默认签名。 @@ -149,10 +155,37 @@ git commit -S -m "your_commit_message" git config --global commit.gpgsign true ``` -1. 验证签名 +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 选项,压缩合并提交。 @@ -170,27 +203,63 @@ git merge --squash ## 配置 Git 的凭据存储 -当使用 Git 进行代码管理时,你**可以配置 Git 的凭据存储,这样就不需要每次都输入用户名和密码。** +当使用 Git 进行代码管理时,你可以配置 Git 的凭据存储,这样就不需要每次都输入用户名和密码。下面是详细的步骤: -下面是使用 Git 的凭据存储的简单步骤: +### 使用凭证缓存 -1. 打开终端,并运行以下命令配置 Git 的凭据存储: +1. **开启凭证缓存**: - ```shell - git config --global credential.helper store - ``` + ```shell + git config --global credential.helper cache + ``` -2. 现在,使用 `git push` 命令进行一次身份验证。输入用户名和密码,并完成 push 操作。 +2. **设置缓存超时时间**(默认为 15 分钟,以下示例设置为 1 小时): -3. Git 会将你的凭据保存在本地。下次进行操作时,Git 会自动使用保存的凭据,无需再次输入密码。 + ```shell + git config --global credential.helper 'cache --timeout=3600' + ``` -4. 使用 `cat` 命令查看 `.git-credentials` 文件的内容。 +### 使用凭证管理器 - ```shell - cat ~/.git-credentials - ``` +Git for Windows 以及较新的 Git 版本提供了凭证管理器(Credential Manager),可以在多平台下存储和管理凭证。 -这样,你就可以在使用 Git 进行操作时记住密码了。请注意,**使用 store 凭据存储方式会将密码明文保存在磁盘上**,所以请确保你的机器是安全的,并且不要在共享或公共设备上使用该功能。 +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 日志美化