跳过正文
记录一下在git上的一些设置

记录一下在git上的一些设置

··
目录

今天想调一下我电脑上的git的一些设置,主要是设置git的GPG签名以及通过ssh连接git的远程仓库,在其中遇到了一些设置的问题,所以写下这些以做记录。(注:我的电脑环境为Linux,其他操作系统的相关设置不怎么了解)。

设置GPG签名
#

主要参考来源:

生成GPG密钥
#

gpg --full-generate-key

输入相关信息后就可以生成密钥了。

可以查看生成后的密钥:

gpg --list-secret-keys --keyid-format=long

可能会显示类似的输出:

$ gpg --list-secret-keys --keyid-format=long
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot <hubot@example.com>
ssb   4096R/4BB6D45482678BE3 2016-03-10

从 GPG 密钥列表中复制您想要使用的 GPG 密钥 ID 的长形式。 在本例中,GPG 密钥 ID 为 3AA5C34371567BD2,导出GPG密钥:

gpg --armor --export 3AA5C34371567BD2

复制以 -----BEGIN PGP PUBLIC KEY BLOCK----- 开头并以 -----END PGP PUBLIC KEY BLOCK----- 结尾的 GPG 密钥。

之后再按照github文档上的操作将密钥添加到账户中。

git上设置GPG
#

我更喜欢在局部设置git,所以我习惯于设置git时不加--global选项,但下面我还是以github docs上面的命令为准。

git config --global user.signingkey 3AA5C34371567BD2

密钥ID以上面的ID为例。

git config --global commit.gpgsign true

至此,配置应该基本完成。

设置ssh连接远程仓库
#

主要参考来源:

生成ssh密钥
#

ssh-keygen -t ed25519 -C "your_email@example.com"

输入一些信息以完成ssh密钥的生成。

之后再按照github文档上的操作将生成的公钥添加到github账户上。

关于ssh的一些本地设置
#

为了不显示未知指纹的警告,可以在家目录下的.ssh/文件夹中创建known_hosts文件,在这个文件中添加:

github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=

来源

如果你的密钥文件不在常规文件夹,可以在家目录下的.ssh/文件夹中创建config文件,在文件中添加:

Host github.com
  User git
  IdentityFile ~/.ssh/id_rsa.github
  IdentitiesOnly yes

注意将IdentityFile后面的参数改为你的私钥所在路径。

至此,配置基本完成。

关于git子模块
#

这里主要是列举常用的git子模块命令。

注意: 如果远程仓库使用了git子模块,在克隆或拉取这个远程仓库时,git子模块并不会自动初始化或更新。

git子模块添加
#

git submodule add [--depth=1] [--branch name] [submodule-repository-url] [path]
  • --branch: 设置子模块跟踪的分支

git子模块初始化
#

git submodule init [path]
  • [path]: 初始化特定子模块

git子模块更新
#

git submodule update [--init] [--recursive] [--remote] [--merge]
  • --init: 加入这个选项后就无需运行git submodule init
  • --recursive: 告诉 Git 检查子模块中的嵌套子模块并更新它们
  • --remote: 使用远程源的新内容更新
  • --merge: 将子模块的上游更改与本地版本合并

git子模块状态
#

git submodule status [--recursive]

该命令打印出 SHA-1 和每个子模块的路径。SHA-1 字符串可以具有三个不同的前缀:

  • -前缀标记未初始化的子模块
  • +标志表明签出的子模块提交与原始子模块存储库的状态不同
  • U前缀会提醒合并冲突
  • --recursive选项可在状态报告中包含嵌套子模块

git子模块删除
#

# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule

# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule

# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule

git子模块设置跟踪分支
#

git submodule set-branch --branch main [path]
作者
Ask Me Why