一、配置多个SSH-Key
当前电脑已设置过了一个ssh-key,终端查看已配置的SSH-Key文件
cd ~/.ssh/
$ ls
id_rsa.pub
id_rsa
现在再配置另一个git账号的ssh-key,生成ssh-key文件时,文件用不同名称来区分,如git_key_rsa
$ ssh-keygen -t rsa -C "XXXXXX@XXX.com” -f ~/.ssh/git_key_rsa
此时会生成 git_key_rsa和git_key_rsa.pub私钥和公钥
cd ~/.ssh/
$ ls
id_rsa.pub
id_rsa
git_key_rsa.pub
git_key_rsa
1.将git_key_rsa.pub中的内容粘帖到GitLab服务器code.xxx.com的SSH-key的配置中。
2.通过config配置文件设置访问不同host,不同用户名使用不同的key,即电脑访问code.xxx.com时使用publickey登录,电脑将自己的私钥发送过去,根据用户名区分,发送的是 git_key_rsa 而不是id_rsa
vi ~/.ssh/config
Host git #自定义名称
HostName code.xxxx.com #域名或ip
User 登录名
PreferredAuthentications publickey
IdentityFile ~/.ssh/git_key_rsa
注意IdentityFile后面这项~/.ssh/git_key_rsa 文件名在生成的时候如果有个空格,设置的时候需要末尾加上空格,否则找不到这个文件
config文件的配置参数
Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
HostName : 要登录主机的主机名
User : 登录名
PreferredAuthentications:登录验证方式
IdentityFile : 指明上面User对应的identityFile路径
设置了publickey的验证方式,访问hostname为code.xxx.com并且会根据用户名的不同,去使用设置的IdentityFile里面的private key。PreferredAuthentications设置为password时,则登录验证时需要输入密码。
这种设置多个SSH-Key的方法适用于相同host不同user,不同host相同user,不同host不同user,只要配置成相对应的就好。注意私钥文件路径,是否有空格啥的。
配置好之后 查看.ssh
cd ~/.ssh/
$ ls
config
id_rsa.pub
id_rsa
git_key_rsa.pub
git_key_rsa
known_hosts
ps:ssh登录两种方式:
ssh 用户@ip 配置文件的user@HostName的ip
ssh 自定义名称 配置文件的host
记录一下当时生成私钥文件路径有空格的场景:为了区分本地已有的私钥文件,最开始选了其他路径(如下载)放私钥文件,私钥文件生成以后,并没有存放在这个指定的文件夹下面,而是放在和它同级的地方,而且这个私钥文件路径有个空格
二、python 运行git clone
1.远程git 上新建工程,在本地文件夹下将本地代码push
cd git_pulled
git init
git remote add origin git@code.xxxx.com:test/xxx.git
git add .
git commit -m "Initial commit"
git push
git_pulled下的本地仓库与远程git仓库建立了关联
ps: 终端在git_pulled下运行 git clone 会把工程下载到一个大目录xx,xx是工程名,需要再进入这个目录xx下,进行git pull 。本地git仓库在xx里面
2.通过python去git clone ,下载GitPython包
from git import Repo
git.Repo.clone_from('https://code.xxxxx.com/test/project.git', '../git_pulled')
第一个参数是工程地址,第二个参数是目的文件夹,下载到目的文件夹里面,是工程里的内容,不带外面那个名称是工程名的大目录,
这种方式在git clone 时,本地git_pulled目录下初始化了git仓库
3.继续git pull ,从git_pulled目录下
#使用包含 .git 文件夹的版本库路径创建 git.Repo 对象
r = Repo("../git_pulled")
r.remote().pull()
4.其他git操作
# 新建版本库对象
repo = Repo('路径')
# 获取版本库暂存区
index = repo.index
# 添加修改文件
index.add(['new.txt'])
# 提交修改到本地仓库
index.commit('this is a test')
# 获取远程仓库
remote = repo.remote()
# 拉去远程仓库数据
remote.pull()
# 推送本地修改到远程仓库
remote.push()