Git环境搭建
本文由 小茗同学 发表于 2017-04-06 浏览(4786)
最后修改 2022-03-21 标签:git ssh

介绍

git是一种版本管理工具,github是一个网站,也可以认为是git的一种具体实现,常见的实现有githubgitlab

安装

首先安装git-for-windows(这个是必须安装的),然后安装自己喜欢的git客户端,如TortoiseGit或者SourceTree,个人比较喜欢TortoiseGit,关于TortoiseGit的具体使用可以参考我另外单独写的一篇文章:TortoiseGit使用详细介绍

配置

开始配置前需要了解的

  1. 很多命令既可以用git bash来执行,也可以用Windows自带的命令行来操作,推荐统一用git bash,因为很多命令只有git bash才能执行,比如ssh-kengen
  2. git的配置有全局global配置,也有针对某个项目的具体local配置,这个一定要注意。全局配置使用命令git config --global,文件保存在C:\Users\Administrator\.gitconfig

配置用户名和邮箱

git config --global user.name "sxei" # 你的github用户名,非昵称
git config --global user.email  "xxx@qq.com" # 填写你的github注册邮箱

以上配置的用户名和邮箱只是用作提交记录(也就是你随便写什么都可以),真正提交到远程还是会通过密码或者SSH进行身份校验。

详细可参考github的ssh配置教程:https://docs.github.com/cn/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

配置SSH

客户端肯定是要与远程服务器连接的,但是直接使用密码不安全,一般都是用SSH连接,所以才有了这里的SSH KEY配置。

生成密钥

右键Git Bash Here,然后执行:

# 完整命令示例
ssh-keygen -t rsa -b 4096 -C "这里是备注"

参数含义:

  • -t指定密钥类型,默认是rsa,所以可以省略;
  • -C设置注释文字,比如邮箱;
  • -f指定密钥文件存储文件名,不指定的话会有一个默认位置,一般都不指定;

然后会提示设置文件的保存位置以及密码,一般都忽略,一路连续回车,然后就生成好了,文件默认生成在C:\Users\Administrator\.ssh下面:

  • id_rsa:私钥文件
  • id_rsa.pub: 公钥文件
  • known_hosts: 保存已经连接过的远程git host和rsa的映射关系,每新增加一个域名这里面的内容会递增

添加公钥到网站

gitlab和github都差不多,我们这里以GitHub为例:

打开用户目录,找到.ssh\id_rsa.pub文件并用记事本打开,复制里面的内容,然后打开你的github主页,进入个人设置 -> SSH and GPG keys -> New SSH key

add ssh key

我一般喜欢把公司的电脑title写为company,家里就写home,这样方便区分。

测试连接

如果是GitHub,可以直接使用如下命令测试:

ssh -T git@github.com # 注意邮箱地址不用改

如果提示Are you sure you want to continue connecting (yes/no)?,输入yes,然后会看到:

Hi liuxianan! You’ve successfully authenticated, but GitHub does not provide shell access.

看到这个信息说明SSH已配置成功!

gitlab不知道有没有这样的命令,没有也没关系,克隆一个项目试试就知道有没有配置成功了。

假如不用上面的测试命令,当使用ssh方式第一次克隆某个地址时,会提示如下:

执行这一步之后就会在~/.ssh/下面生成一个known_hosts文件,这个文件保存了网站和rsa的映射关系。

HTTP和SSH地址的区别

以GitHub为例:

SSH地址示例:git@github.com:liuxianan/xei.git
HTTP地址示例:https://github.com/liuxianan/xei.git

我们上面进行的SSH Key的配置仅仅是当你使用ssh地址克隆项目时才生效的,如果你使用http地址,无论你有没有配置SSH key都需要输入密码(当然,public项目在克隆的时候不需要),这就是两者的最大区别。

有的人会问,不对啊,我用TortoiseGit克隆GitHub的HTTP地址的项目时,什么都没配置也不用输入密码啊?那是因为克隆github的公开项目本来就不需要密码,但是当你修改一些东西然后提交的时候就要输入用户名密码了。

还有一个需要注意的地方,就是GitHub和GitLab的SSH地址格式是不一样的,千万别搞错了!

gitlab:ssh://git@gitlab.xxxx.com/test/myproject.git
github:git@github.com:liuxianan/xei.git

看到了吧,gitlab前面有ssh://的前缀,GitHub没有,千万别自己随便加上,否则会提示如下错误:

ssh: Could not resolve hostname github.com:liuxianan: Name or service not known
fatal: Could not read from remote repository.

特别说明

如果你使用的是TortoiseGit,由于它默认使用的SSH客户端是基于PuTTY改造的TortoiseGitPlink,而不是git默认的OpenSSH,所以如果你没有进行特殊配置的话,以上SSH Key的配置是无效的!关于TortoiseGit的更多详细问题,请参考另外一篇专门介绍它的文章:TortoiseGit使用详细介绍

其它

关于git的常见命令,请参考:

http://blog.liuxianan.com/git-cmd.html