环境说明:
角色 IP
git服务端 192.168.0.106
git客户端 192.168.0.107
git客户端1 192.168.0.108
在服务端先发布仓库
[root@localhost ~]# cd /data/
[root@localhost ~]# cd /data/
[root@localhost data]# mkdir base1
[root@localhost data]# git init --bare base1/
初始化空的 Git 版本库于 /data/base1/
[root@localhost data]# cd base1/
[root@localhost base1]# ls
branches config description HEAD hooks info objects refs
此时我们在服务端已经初始化了一个不带工作区的仓库
创建系统用户,git客户端用此用户来克隆服务端得仓库
#在服务端操作
[root@localhost ~]# useradd test1
[root@localhost ~]# passwd test1
更改用户 test1 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
#将仓库的权限改为test1用户
[root@localhost ~]# chown -R test1:test1 /data/base1/
如果使用密码得话,每次更新、提交、都要输入用户密码,所以我们这里配置test1用户使用密钥通信
#在客户端1操作
[root@localhost ~]#
[root@localhost ~]# ssh-keygen -t rsa
#过程中所有得选择都回车即可
[root@localhost ~]# ls -a
. .. .bash_logout .bash_profile .bashrc .cache .config .mozilla .ssh
#在test1用户的家目录下产生了.ssh目录
[root@localhost ~]# cd .ssh/
[test1@localhost .ssh]$ ls
id_rsa id_rsa.pub
#id_rsa:私钥
#id_rsa.pub 公钥
#在客户端1操作
[root@localhost .ssh]# ssh-copy-id -i id_rsa.pub test1@192.168.0.106
The authenticity of host '192.168.0.106 (192.168.0.106)' can't be established.
ECDSA key fingerprint is 1f:bc:36:f6:7f:49:a9:70:ca:64:73:2c:b2:91:6a:6b.
Are you sure you want to continue connecting (yes/no)? yes #这里输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
test1@192.168.0.106's password: #这里输入test1的密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
#在客户端1操作
#查看是否能够通过密钥的形式连接到服务器
[root@localhost ~]# ssh test1@192.168.0.106
Last login: Sun Nov 29 14:37:15 2020
[test1@localhost ~]$ ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.106 netmask 255.255.255.0 broadcast 192.168.0.255
#我们发现已经不用通过密码就可以通过test1用户连接到服务器,IP已经是服务器的地址了
#在客户端1操作
#不要忘记在客户端退出test1用户,使用客户端的用户操作
#git clone格式:
#git clone 服务端的用户@服务端的IP地址:服务端仓库的绝对路径
[root@localhost ~]# mkdir /data/
[root@localhost ~]# git clone test1@192.168.0.106:/data/base1 /data
Cloning into '/data'...
warning: You appear to have cloned an empty repository. #这个警告可不用管,提示你克隆一个空的仓库
[root@localhost ~]# cd /data/
#在此目录下出现了隐藏目录。git 说明我们已经克隆成功了
[root@localhost data]# ls -a
. .. .git
7.查看远程仓库
#我们在data目录下输入以下命令可以查看到远程仓库的信息,因为我们是克隆的远程服务器的仓库,所以会自动建立联系
[root@localhost data]# git remote -v
origin test1@192.168.0.106:/data/base1 (fetch)
origin test1@192.168.0.106:/data/base1 (push
#在客户端1操作
#我们将本地数据提交到服务端上的远程仓库上
[root@localhost ~]# cd /data/
[root@localhost data]# touch test1
[root@localhost data]# echo "version 1" >> test1
[root@localhost data]# git add test1
[root@localhost data]# git commit -m '1' test1
[master bfb8ea5] 1
1 file changed, 1 insertion(+)
create mode 100644 test1
#将本地数据提交到服务器上的远程仓库
[root@localhost data]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 208 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To test1@192.168.0.106:/data/base1
* [new branch] master -> master
#origin:这是远程仓库的名字
#master 这是本地的master分支
#首先在客户端2生成密钥,并且把公钥赋值给服务端
[root@localhost ~]# ssh-keygen -t rsa
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# ssh-copy-id -i id_rsa.pub test1@192.168.0.106
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
The authenticity of host '192.168.0.106 (192.168.0.106)' can't be established.
ECDSA key fingerprint is SHA256:dGzRnSYCpHgjmv2rTLqqwBQ+M291fkU9NRCaGY2fZRI.
ECDSA key fingerprint is MD5:1f:bc:36:f6:7f:49:a9:70:ca:64:73:2c:b2:91:6a:6b.
Are you sure you want to continue connecting (yes/no)? yes #输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
test1@192.168.0.106's password: #输入test1的密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost ~]# mkdir /data
[root@localhost ~]# cd /data/
[root@localhost data]# git clone test1@192.168.0.106:/data/base1 ./
Cloning into '.'...
warning: You appear to have cloned an empty repository.
#克隆成功
[root@localhost data]# git clone test1@192.168.0.106:/data/base1/ ./
Cloning into '.'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
#我们发现在客户端2已经有客户端1提交的数据了
[root@localhost data]# ls
test1
[root@localhost data]# touch test2
[root@localhost data]# echo "test2" >> test2
[root@localhost data]# git add -A
[root@localhost data]# git commit -m '2' test2
[root@localhost data]# git push origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:/data/base1/
45bc3bd..8b6a573 master -> master
#我们发现数据成功提交到远程仓库
[root@localhost data]# git pull
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From 192.168.0.106:/data/base1
45bc3bd..8b6a573 master -> origin/master
Updating 45bc3bd..8b6a573
Fast-forward
test2 | 1 +
1 file changed, 1 insertion(+)
create mode 100644 test2
[root@localhost data]# ls
test1 test2
[root@localhost data]# cat test2
test2
#我们发现在客户端1成功拉取到了客户端2提交的数据
#在客户端1操作
#上边实例中的客户端是从服务端克隆下来的,自动就和服务端建立了联系
#如果我们在客户的端自己初始化的数据库,是不会与服务端建立联系的
[root@localhost ~]# mkdir /client1
[root@localhost ~]# git init /client1/
Initialized empty Git repository in /client1/.git/
#我们使用git remote -v 查看是看不到有远程仓库的
[root@localhost client1]# git remote -v
[root@localhost client1]# git remote add server test1@192.168.0.106:/data/base1
[root@localhost client1]# git remote -v
server test1@192.168.0.106:/data/base1 (fetch)
server test1@192.168.0.106:/data/base1 (push)
[root@localhost client1]# git pull server master
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From 192.168.0.106:/data/base1
* branch master -> FETCH_HEAD
#我们发现我成功从远程仓库上拉取了数据
[root@localhost client1]# ls
test1 test2
[root@localhost client1]# touch test3
[root@localhost client1]# echo "test3" >> test3
[root@localhost client1]# git add -A
[root@localhost client1]# git commit -m '3'
[master 87dbe64] 3
1 file changed, 1 insertion(+)
create mode 100644 test3
#将本地的master 提交到远程仓库上。此处的server 就是上边例子中origin 。server只是我们自定义的名字
[root@localhost client1]# git push server master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 284 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To test1@192.168.0.106:/data/base1
8b6a573..87dbe64 master -> master
[root@localhost ~]# cd /data/
[root@localhost data]# ls
test1 test2
[root@localhost data]# git pull
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From 192.168.0.106:/data/base1
8b6a573..87dbe64 master -> origin/master
Updating 8b6a573..87dbe64
Fast-forward
test3 | 1 +
1 file changed, 1 insertion(+)
create mode 100644 test3
#我们发现test3已成成功的拉取到了本地
[root@localhost data]# ls
test1 test2 test3