使用ssh协议进行git服务器和客户端之间的通信。
一、搭建Git服务器和客户端配置
git服务器的简单搭建
1、公钥的生成
任何一个需要使用git服务器的工程师都需要生成一个ssh的公钥(在客户端)。
可以通过ssh-keygen来生成
~/.ssh$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/shizhen/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/shizhen/.ssh/id_rsa.
Your public key has been saved in /home/shizhen/.ssh/id_rsa.pub.
The key fingerprint is:
a8:19:49:f4:e6:e8:4f:8f:3e:47:c9:19:4c:09:ee:7f shizhen@sz-desktop
The key's randomart image is:
首先会让你输入要保存公钥的位置,直接回车即可,接着会提示让你重复一个密码两次,
如果不想再使用公钥的时候输入密码,直接回车即可。完成后会在home目录下的.ssh目录
中生成两个文件id_rsa(私有密钥)和id_rsa.pub(公钥)。
如果不想再使用公钥的时候输入密码,直接回车即可。完成后会在home目录下的.ssh目录
中生成两个文件id_rsa(私有密钥)和id_rsa.pub(公钥)。
将生成的公钥即id_rsa.pub发给git仓库的管理者。(通过email 或其他)
2、架设服务器
(1)服务器端
最好建立一个git组,让后再添加一个git用户,并且添加到该组当中。
sudo adduser git
sudo passwd git //设置密码
su git
cd ~
mkdir .ssh
在git用户新建一个.ssh的目录,将开发者的SSH公钥(通过邮件或其他方式收到)添加到git这个用户的authorized_keys
这个文件当中。如有zhangsan,lisi两个开发者。
这个文件当中。如有zhangsan,lisi两个开发者。
cat /tmp/id_rsa_zhangsan.pub >> ~/.ssh/authorized_keys (
cat /home/testuser/.ssh/id_rsa.pub > /home/git/.ssh/authorized_keys )
cat /tmp/id_rsa_lisi.pub >> ~/.ssh/authorized_keys
建立一个空的仓库
cd work
mkdir project.git
cd project.git
git --bare init
使用--bare会初始化一个不带任何工作目录的仓库,不会看到工程
源码。
(2)开发者端
若没有仓库的情况下,需要首先新建一个仓库。在需要建立仓库的,目录下执行以下的命令。
cd my_project
git init
git add . (将所有文件加入仓库管理)
git commit -m "initial commit"
git remote add origin git@gitserver:/home/git/work/project.git (即:git@192.168.1.100:/home/git/work/project.git)
git push origin master
若本地已有仓库,但想把其中的代码push到我们新的服务器上,可以直接用下面的命令
把想要push的分支代码新建成master分支
git checkout -b master xxxxx
git push origin master
这样一个简单的服务器就可以工作了,其他的开发者可以直接从服务器上进行代码开发了。
为了保护git服务器,限制开发者登陆服务器,可以采用如下的措施。(在git服务器上)
sudo vim /etc/passwd
在文件结尾找到这样的类
git:x:1001:1001:,,,:/home/git:/bin/bash
将其中的/bin/bash/改为/user/bin/git-shell
现在开发者只能通过SSH来推送和获取代码,不能登陆ssh服务端了。
3.问题
現在的 ssh 使用同樣的方法會出現錯誤訊息
Agent admitted failure to sign using the key
解決方式 使用 ssh-add 指令将私钥 加进来 (根据个人的密匙命名不同更改 id_rsa)
即各自的开发者执行命令
ssh-add id_rsa
二、 Git服务器使用
1、在Git服务器端
在 /home/git/ 下创建 project1.git 目录,进入该目录,执行 git --bare init,建立一个纯 Git仓库。
2、客户端 (1)
#初始化本地库
mkdir my_project
cd my_project
git init
echo "fuck this shit" > hello.txt
git add .
git commit -m "initial commit"
#添加远程库
git remote add testp git@ipipipip:/git/project1.git #通过 git remote -v 可以查看远程库
#从远程库获得最新的更新
git fetch testp md #获得远程库testp 的md分支的最新更新
#将更新和本地合并
git merge testp/md #将远程库 testp 的md 分支合并到本地的当前分支
....本地操作.....
git push testp master:md #将本地的 master分支推送到testp库的md分支
客户端(2)
mkdir my_project
cd my_project
git clone git@xxxip:/home/git/project1.git -b md #将远程库xxxx/project1.git 的md分支克隆到本地
git push命令,将本地分支推送到远程库的分支
$ git push origin test:master // 提交本地test分支作为远程origin的master分支
$ git push origin test:test // 提交本地test分支作为远程origin的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
}