Git 仓库与多个Key管理

仓库管理

创建本地仓库

1
2
mkdir XXX
git init

添加,检查、对比文件

1
2
3
git add "readme.txt"
git status
git diff "readme.txt"

diff用于还未commit的内容,可以进行对比

提交文件

1
git commit -m " add name"

工作区和版本库

  • 工作区:就是本地新建的目录
  • 版本库:是init时创建的git目录。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

往版本库里面增加内容分为2步

  • step1: 编辑完文件后先执行git add ,实际上就是把文件修改添加到暂存区;
  • step2: 再git commmit提交到版本,实际上就是把暂存区的所有内容提交到当前分支。

常用命令

回退上一个版本

1
git reset --hard HEAD^  #一个^表示上一个版本 回退第10个版本则HEAD~100

查看提交log

1
2
3
4
git log
git reflog
git log --graph #带分支图形
git log --pretty=oneline --abbrev-commit #查看提交记录

撤销工作区的修改

1
git checkout -- readme.txt

把暂存区的修改撤销掉(unstage)

1
git reset HEAD file

删除文件

1
git rm readme.txt

删除错误之后恢复文件

1
git checkout -- readme.txt  

–后面一定要有空格

远程仓库管理

创建SSH Key

1
$ ssh-keygen -t rsa -C "youremail@example.com"

一路三个回车,然后将公钥配置在github上面 id_rsa.pub文件里面的内容。

关联远程库

1
git remote add origin git@github.com:Shutune/learngit.git

查看,重命名、删除远程库

1
2
3
git remote -v  #查看仓库
git remote rm origin #删除远程仓库

推送代码到远程仓库

1
2
git push -u origin master
git push origin master

加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

从远程库复制

1
git clone git@github.com:xxx/gitskill.git

Git 账户全局设置

1
2
git config --global user.name "x'x"
git config --global user.email "xxx@qq.com"

通过clone创建本地目录

1
2
3
4
5
6
git clone git@git.xx.xx:testing/at-ivp.git
cd at-ivp
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

通过本地已经存在的目录或仓库关联远程仓库

1
2
3
4
5
6
cd existing_folder
git init
git remote add origin git@git.hunantv.com:testing/at-ivp.git
git add .
git commit
git push -u origin master

多个Key管理

生成不同的key

  • 打开终端输入如下命令,具体邮箱根据你的平台账号地址来填入。
1
ssh-keygen -t rsa -C “your email” -f id_rsa_xx
  • -f后可以自定义秘钥名称, 执行完成之后key生成的路径为用户目录(如果自定义了key的名称),默认的目录是.ssh/ 需要把生成的key全部移动到.ssh目录 需要把生成的key全部移动到.ssh目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Shuqing/.ssh/id_rsa): id_rsa_xxx
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_coding.
Your public key has been saved in id_rsa_coding.pub.
The key fingerprint is:
SHA256:m6Z/eQUIxxxxxxxxxx 57038xxxxx@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|o.oo+... . |
|o+.=.+ o . |
|+.*o+ . o . |
|o=oo. . . |
|o.=.. . S. . |
| * . o =E+. . |
|. o . o B oo . |
| . + o+.. |
| .... o. |
+----[SHA256]-----+

配置SSH-key

  • SSH默认只读取id_rsa,为了让SSH识别新的私钥,需要使用命令将其添加到SSH agent,命令如下:
    1
    2
    3
    4
    5
    $ssh-agent bash
    #输入私钥名称
    $ssh-add ~/.ssh/id_rsa_github
    $ssh-add ~/.ssh/id_rsa_gitlab
    $ssh-add ~/.ssh/id_rsa_coding
  • 将各自key的公钥文件(.pub后缀)内容复制到各个平台中。
  • ~./ssh目录下新建一个config文件,命令如下:

     

1
touch config
  • 配置config文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#coding
Host e.coding.net
HostName e.coding.net
PreferredAuthentications publickey
IdentityFile ~/.ssh/xxx

#gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/xxx



连接测试

coding

1
2
3
4
ssh -T git@e.coding.net
CODING 提示: Hello xx, You've connected to coding.net via SSH. This is a Personal Key.
清风穆云,你好,你已经通过 SSH 协议认证 coding.net 服务,这是一个个人公钥.

github

1
2
3
$ ssh -T git@github.com
Hi Sutune! You've successfully authenticated, but GitHub does not provide shell access.

gitlab

1
2
3
$ ssh -T git@git.xx.xx
Welcome to GitLab, xx!

gitee

1
2
mac@Sutune .ssh % ssh -T git@gitee.com
Hi sutune! You've successfully authenticated, but GITEE.COM does not provide shell access.

报错相关

push提交代码报错

1
GitLab: Deploy keys are not allowed to push code.
  • Gitlab中有两种key, 一种是deploy key,他是只读的,另一种为SSH key,可读可写。
  • 如果需要Push,应该添加SSH keySSH keyprofile setting中 ; deploykey在需要部署的某个projectsetting中。

UNPROTECTED PRIVATE KEY FILE!

1
2
3
4
5
6
7
ssh-add ~/.ssh/id_rsa_gitee.pub
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/mac/.ssh/id_rsa_gitee.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

这里是说密钥文件权限不能为0644,0644权限太开放了,要求你的密钥文件不能被其它用户读取。所以我们现在需要修改一下密钥文件权限。在命令行输入chmod 700 xxx即可

Permission denied (publickey)

这种报错一般是没有在仓库网站添加已经生成的私钥,或者私钥添加错误,

invalid format

1
Error loading key "/Users/mac/.ssh/id_rsa_gitee.pub": invalid format

这种情况是添加秘钥错误,不能添加公钥,只能添加私钥。

参考资料