一、登录公私钥和git公私钥

1、服务器使用公钥,本地使用私钥;

2、ssh公钥登录服务器,与git公钥认证是同一套系统,不同的linux用户;

3、例如以root用户登入服务器,  cd ~/.ssh   vi authorized_keys

ssh-rsa AAA************* companyPC

ssh-rsa AAA************* myMacBook

4、切换到git用户,su git,同样的 cd ~/.ssh   vi authorized_keys,用于存放git验证的公钥,形如

git用户的ssh授权文件位置  /home/git/.ssh/authorized_keys

ssh-rsa AAA************* companyPC-git

ssh-rsa AAA************* myMacBook-git

5、公私钥生成命令(Linux或MAC系统)。

ssh-keygen -t rsa -P ''

这个命令则会在提示的指定目录生成两个文件   id_rsa 私钥文件  id_rsa.pub 公钥文件

6、打开id_rsa.pub文件,复制内容到第3或4的服务器文件中。

本地登录/GIT检出时,选择使用私钥的方式,使用刚才生成的id_rsa文件。

7、使用tortoiseGIT时,使用的私钥是ppk格式,需要下载puttygen,生成ppk格式类型的公私钥对,或转换成ppk格式的公私钥对。

 

二、搭建 git 服务器

1、安装git  yum install git

2、创建一个git用户,用来运行git服务 adduser git ,并 su git

3、在用户文件夹新建  mkdir ~/.ssh 文件夹,并设置文件夹权限为700 ,  chmod 700

3、创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到 /home/git/.ssh/authorized_keys

4、在服务器的 /git/myProj 文件夹中创建新的裸仓库 git init --bare ,并把owner改为git chown -R git /git/myProj

5、由于git默认拒绝了push操作,需要进行设置,修改 /git/myProj/config 文件后面添加如下代码:

[receive]
    denyCurrentBranch = ignore

 6、禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:git user:/git:/bin/bash
改为:
git:x:1001:1001:git user:/git:/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

三、MAC版sourceTree使用私钥登录仓库

1、MAC版sourceTree没有单独的项目设置公钥,使用的是系统里的配置登录;

2、使用上面的方法生成好公私钥文件,本地使用的是私钥文件;

3、假设私钥文件的存放路径为 /Users/batsing/git-key/id_rsa

4、MAC电脑打开命令行工具,进入本人目录  cd ~

5、现在所在的目录为 ~/.ssh,在本目录用VI编辑器新建config文件, vi config

Host 127.0.0.1
    Port 12200
    User git
    IdentityFile /Users/batsing/git-key/id_rsa

Host为git服务器的IP地址,Port为端口,User为登录用户,IdentityFile后面填私钥文件的路径;

6、保存并退出VI编辑器,这样sourceTree要用的git私钥就配置好了。

7、检查config文件和私钥文件,权限需要为600,chmod 600 id_rsa 否则也不能成功。若还有问题,使用控制台 git clone 项目

8、现在sourceTree就可以拉取、推送等操作了。重启电脑配置不会丢失。

9、命令行克隆项目到本地当前文件夹  git clone 项目网址 ./

 

四、git 撤销,放弃本地修改

1、未使用 git add 缓存代码时

可以使用  git checkout filepathname

此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

2、已经使用了  git add 缓存了代码

可以使用   git reset HEAD filepathname

此命令用来清除 git  对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。