介绍
git
是一种版本管理工具,github
是一个网站,也可以认为是git的一种具体实现,常见的实现有github和gitlab。
安装
首先安装git-for-windows(这个是必须安装的),然后安装自己喜欢的git客户端,如TortoiseGit
或者SourceTree
,个人比较喜欢TortoiseGit
,关于TortoiseGit
的具体使用可以参考我另外单独写的一篇文章:TortoiseGit使用详细介绍。
配置
开始配置前需要了解的
- 很多命令既可以用
git bash
来执行,也可以用Windows
自带的命令行来操作,推荐统一用git bash
,因为很多命令只有git bash
才能执行,比如ssh-kengen
。 - 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
:
我一般喜欢把公司的电脑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的常见命令,请参考: