文章有点长,可以点击标题跳转明细
TortoiseGit和Git的区别和联系
TortoiseGit是可视化操作工具,默认使用putty格式的私钥,扩展名为.ppk
Git是客户端,默认使用的是OpenSSH格式的私钥,扩展名为.rsa
通常情况下,因为TortoiseGit和Git的默认密钥格式不一样,我们需要给TortoiseGit和Git分别配置密钥。
TortoiseGit密钥配置图文教程
1. 在【开始菜单】中找到【TortoiseGit】下的【PuTTYgen】(建议直接搜索PuTTYgen),单机运行。
2. 点击【Generate按钮】,鼠标需要在【Key区域】活动直至绿色进度条完成(切记,鼠标一定要动哦,鼠标不动的时候,绿色进度条就暂停啦)(注意英文提示:Please generate some randomness by moving the mouse over the blank area)用来生成随机数的一种机制
3. 【Key区域】 中【Public key for pasting into OpenSSH authorized_keys file:】多行文本的字符串就是公钥,可以将该公钥配置到码云、GitLab、Github等代码托管网站或服务器上(一般代码托管网站配置SSH公钥都在个人设置(Settings)中,找到SSH关键字,将当前获得的公钥填入,title(标题)随意填写,保存就行)
4. 点击【Save private key按钮】,保存成后缀名为.ppk的私钥文件
5. 在【开始菜单】中找到【TortoiseGit】下的【Pageant】(建议直接搜索Pageant),单机运行。程序启动后并不会直接弹出【Pageant Key List面板】,而是停靠或隐藏在任务栏中(经常启动Pageant后傻乎乎的等待面板弹出?),双击该图标,就能看到Pageant Key List啦
6. 点击【Add Key按钮】,将步骤四中保存在本地的.ppk私钥文件加入。大功告成
使用过程中,请确认【Pageant Key List】正在运行,且载入了对应私钥。
举例报错:Disconnected:No supported authentication methods availabled (server sent: publickey) 就是没有将步骤四中的私钥放进Pageant Key List中。每次电脑重启之后,就需要重新打开【Pageant】并添加私钥是不是很麻烦呢?请参阅,如何将私钥永久保存在Pageant Key List中?每次重启电脑都需要重新添加
7. 私钥公钥配置完成,就可以愉快的使用TortoiseGit的可视化操作界面啦!
Git密钥配置图文教程
1. 右键【Git Bash Here】打开终端命令工具,window系统自带的CMD( command 系统命令执行程序)也是可以的。
2. 生成新的SSH密钥,在命令工具中执行代码,邮箱可以随意填写
ssh-keygen -t rsa -C "你的邮箱"
3. 命令解析:
① 定义生成公钥私钥的文件名称;若不定义名称,密钥文件会以默认文件名存储在默认地址。(一般的,默认存储地址为C:\Users\用户名\.ssh,如图)
;若定义了名称,密钥文件会以定义好的名称为文件名,存储在当前文件夹内
如图示,在F:\gitssh文件夹下运行SSH秘钥生成命令,并设置了文件名testssh,就会在F:\gitssh目录下生成私钥和公钥文件。
(需要注意的是,若自定义了名称,生成密钥之后还是需要把文件移动到默认目录?)
② 设置密码,不需要设置时直接回车即可
③ 代表密钥生成成功
4. 根据图文提示找到存储密钥的文件,.pub文件中就是生成的公钥,将该公钥配置到码云、GitLab、Github等代码托管网站或服务器上(一般代码托管网站配置SSH公钥都在个人设置(Settings)中,找到SSH关键字,将当前获得的公钥填入,title(标题)随意填写,保存就行)。若果把密钥文件存储在了默认文件夹,找起来会比较麻烦,可以直接命令查找:
cat ~/.ssh/id_rsa.pub
5. 测试公钥是否配置成功(输入以下命令,会自动在.ssh目录生成known_hosts文件把私钥配置进去)
若未配置,会提示是否将对应私钥配置到known_hosts文件,请输入yes;若已配置,则提示successfully
ssh -T git@主机名
// 如码云(https://gitee.com)主机名为gitee.com
// 如github(https://github.com)主机名为github.com
6. 私钥公钥配置完成,就可以愉快的使用git clone / git pull / git push 命令啦,如拉取远程项目:
TortoiseGit和Git如何使用相同的密钥
使用【TortoiseGit】的【PuTTYgen】生成的私钥和使用Git的【ssh-keygen -t rsa -C "你的邮箱"】命令生成的私钥后缀名称是不一样的,文件内容也不一致。
我们不能将Git命令生成的.rsa文件加入TortoiseGit的Pageant Key List中,也不能直接拷贝TortoiseGit生成的密钥到 “c:\用户\自己的用户名\.ssh” 文件夹下。我们分两种情况进行操作,让TortoiseGit和Git能够使用相同的密钥。
假设TortoiseGit的密钥配置完成,这时我们可以用TortoiseGit可视化界面操作远程仓库,但不能用Git命令行操作远程仓库
方法一:PuTTYgen工具转换文件类型
TortoiseGit中的PuTTYgen工具不仅能够生成密钥,还能转换密钥类型。
TortoiseGit和Git公钥类型是一样的(默认文件名称有区别,但文件里的内容是一致的),只要将TortoiseGit生成的私钥转换成Git能识别的私钥类型就行。
转换私钥:启动【PuTTYgen工具】→打开工具栏【Conversions>import key】将配置TortoiseGit密钥时的私钥导入→点击【conversions>export openSSH key】,保存文件名为id_rsa的文件,不需要拓展名(保存到“c:\用户\自己的用户名\.ssh”,即Git默认的ssh存储地址)
保存公钥:将配置TortoiseGit密钥时的公钥,复制一份,保存到”c:\用户\自己的用户名\.ssh“,命名为id_rsa.pub。当然也可以就着上一步私钥转换的时候,直接保存公钥到默认文件夹。
注意事项:需要将密钥存储在GitSSH默认地址,一般window系统在“c:\用户\自己的用户名\.ssh”。Git私钥文件名为id_rsa,Git公钥文件名为id_rsa.pub
这样,相当于配置了一回Git的SSH(不通过ssh-keygen -t rsa -C "你的邮箱"命令配置,而是通过PuTTYgen将TortoiseGit的密钥转换成合适的格式),让openSSH与PuTTY使用相同的密钥,Git Bash使用openSSH连接,而TortoiseGit使用PuTTY连接,谁也不碍着谁。
假设Git的密钥配置完成,这时我们可以用Git命令行操作远程仓库,但不能用TortoiseGit可视化界面操作远程仓库
方法二:调整TortoiseGit中Network选项
空白地方右键-->TortoiseGit-->Settings,将Network(网络)中的SSH client(SSH客户端)改为Git目录下的ssh.exe(\Git\user\bin\ssh.exe)。
方法三:Re-run First Start Wizard
空白地方右键-->TortoiseGit-->Settings,General(常规设置)-->点击"Re-run First Start Wizard"(重新运行首次启动向导)
一直点击下一步 ,到如下界面选择【OpenSSH】,默认是【TortoiseGitPlink】,点击【完成】
这样,相当于 让TortoiseGit使用Git的密钥配置。TortoiseGit和Git都使用openSSH连接。
如何修改提交方式 https -> ssh
TortoiseGit修改https -> ssh
对应文件夹右键-->TortoiseGit-->Settings-->Git-->Remote(远端),修改对应的URL为SSH地址,Putty密钥定位到对应的私钥文件
Git修改https -> ssh
通过git命令调整协议
查看当前的 remote url命令:
git remote -v
调整协议方式命令:
// 传递两个参数origin 和 url
git remote set-url origin url
复制项目对应的ssh地址,运行上面的命令。
配置文件修改https -> ssh
各种修改https -> ssh 的方法,究其根本,都是修改了配置文件(.git/config文件 ),比较两种方式下的配置文件就能发现,修改https -> ssh,只需要修改配置文件中的url。
对于TortoiseGit调整成ssh方式的时候,不要忘记添加私钥文件,打开Pageant Key List 或者配置“puttykeyfile = 私钥文件所在目录”参数。
ssh方式:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = git@gitee.com:********.git
fetch = +refs/heads/*:refs/remotes/origin/*
puttykeyfile = F:\\gitssh\\putty_private.ppk
[branch "master"]
remote = origin
merge = refs/heads/master
https方式:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://gitee.com/********.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
与君共勉:再牛逼的梦想,也抵不住傻逼般的坚持!