Git是什么?
Git是目前世界上最先进的分布式版本控制系统,有极其强大的分支管理,详细或与SVN等集中版本控制区别,请自行百度。
服务端
1. 检查并卸载
git --version
yum remove git
2. 安装
yum install -y git
3. 创建管理Git服务的组和用户(非必须步骤)
groupadd git #创建用户组
id git #检查该用户是否存在
useradd git -g git #创建用户,并将该用户分配到git组下
passwd git #为该用户设置密码
su git #切换到git用户,这里若不切换,后面会设计到权限问题,很麻烦
4. 创建一个裸仓库
mkdir /home/git/git.git #创建一个git.git目录
git init --bare /home/git/git.git #将该目录初始化一个空仓库
chown -R git:git /home/git/git.git #改变该目录的所有者和组(若已切换到git用户,则不需要此操作)
5. 修改ssh配置(免密登录)
su #切换回root用户(默认root用户才有权限)
vim /etc/ssh/sshd_config #进入该配置,i编辑 esc退出编辑 q关闭文件 q!强制关闭文件 wq保存编辑内存并关闭文件
修改以下配置:
RSAAuthentication yes #秘钥认证(centos7.4及以上,该配置默认开启)
PubkeyAuthentication yes #允许密码认证
AuthorizedKeysFile .ssh/authorized_keys #公钥存放路径
systemctl restart sshd.service #重启ssh服务
su git
注:由 AuthorizedKeysFile
得知公钥的存放路径是 .ssh/authorized_keys
,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 git,所以实际存放公钥的路径是 /home/git/.ssh/authorized_keys
创建公钥文件:
mkdir /home/git/.ssh #在对应用户下创建.ssh隐藏目录
ls -a #查看隐藏文件或目录
chown -R git:git /home/git/.ssh #改变该目录的所有者和组(若已切换到git用户,则不需要此操作)
ll -a #查看目录或文件详细信息
touch /home/git/.ssh/authorized_keys #创建公钥文件authorized_keys
chmod 700 /home/git/.ssh #将.shh目录权限设置为700
chmod 600 /home/git/.ssh/authorized_keys#将公钥文件权限设置为600
6. 禁止 git 用户 ssh 登录服务器(建议在全部搭建完成后执行该步骤,不然后面将不能切换到git用户)
服务器端创建的 git 用户不允许 ssh 登录服务器
su
vim /etc/passwd
将
git:x :502:504::/home/git:/bin/bash
修改为
git:x :502:504:, , ,:/home/git:/usr/bin/git-shell
此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。
客户端
1. 安装
下载 Git for Windows:Git Bash
安装完之后,可以使用 Git Bash 作为命令行客户端。
centos客户端安装和服务端安装一样
2. 生成公钥秘钥(免密登录)
检查密钥文件 (已存在,跳过)
cd ~/.ssh
注册用户及邮箱
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址
–global参数,表示这台机器上所有的Git仓库都会使用这个配置
git config --global user.name "user.name"
git config --global user.email "yourmail@youremail.com.cn"
创建密钥文件
ssh-keygen -t rsa -C "yourmail@youremail.com"
此时 C:\Users\用户名.ssh 下会生成两个文件
id_rsa
私钥
id_rsa.pub
公钥
3.将客户端公钥导入服务器
ssh git@127.0.0.1 [-p ssh端口] 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
#[-p ssh端口] 当ssh不是默认端口22时,需指定端口号
若有多个客户端,则每个客户端都需要将公钥配置到服务器,一行一个
搭建完成,即可进行git的一系列操作
当第一次关联服务端远程仓库时,首先得将远程仓库版本克隆到本地
git clone [-b 分支] [ssh://]git@127.0.0.1:[ssh端口]/home/git/git.git
#克隆服务器仓库到本地
#[-b 分支] 克隆指定分支,默认master
#[ssh://] 如果非默认端口22 则需指定
克隆到本地后,就可以进行一些推送等操作
当第一次连接到目标 Git 服务端时会得到一个提示:
The authenticity of host ‘127.0.0.1 (127.0.0.1)’ can’t be
established.RSA key fingerprint is
SHA256:Ve6WV/SCA059EqoUOzbFoZdfmMh3B259nigfmvdadqQ.Are you sure you
want to continue connecting (yes/no)? yes Warning: Permanently added
‘127.0.0.1’ (RSA) to the list of known hosts.
此时 C:\Users\用户名.ssh 下会多出一个known_hosts文件,该文件中记录了我们所访问服务器的公钥,当下次再进行连接时,就通过该公钥进行比对,若比对时出现如下错误:
WARNING: REMOTE HOST
IDENTIFICATION HAS CHANGED!
表示公钥已经失效,则需重新写入新的公钥(删除文件,自动生成)