首页 软件

CentOS 7安装git服务端

2021-09-02 16:23

系统版本:CentOS Linux release 7.6.1810 (Core)

Git版本:git version 1.8.3.1

Git安装:

一、安装git和创建用户

安装Git

# yum install git

创建一个git用户组和用户,用来运行git服务

# groupadd git$ adduser git -g git

禁止git用户登录:

修改/etc/passwd文件,修改: 找到这句:git:x:503:503::/home/git:/bin/bash ,改为:git:x:503:503::/home/git:/bin/git-shell

创建证书登录

# mkdir /home/git/.ssh

# chmod 700 /home/git/.ssh

# touch 700 /home/git/.ssh/authorized_keys

# chmod 600 /home/git/.ssh/authorized_keys

# owner改为git

# chown -R git:git /home/git/.ssh/

创建私钥,文件位于用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件(服务器设置公私钥请参照网上有关资料)

# ssh-keygen -t rsa

创建完公私钥后将私钥文件放到客户端的~/.ssh目录下

二、初始化git仓库

# cd /srvmkdir gitrepochown git:git gitrepo/cd gitrepo

创建一个空的Git仓库,服务器上的Git仓库通常都以.git结尾

# git init project.git

将仓库所属用户改为git

# chown -R git:git project.git

三、安装客户端

下载地址:https://git-scm.com/downloads按照安装界面一步步安装就可以了,在桌面上克隆服务器端project.git项目 打开git命令行,进入桌面git clone

$ git@xxx.xxx.xxx.xxx:xxxx/srv/gitrepo/project.git

接下来我们切换到project目录下,并手动创建1.txt(内自己写内容)文件

# touch 1.txt

接下来,我们从工作区添加到版本库的暂存区、仓库区,上传到服务

$ git add 1.txtgit commit -m 'new 1.txt'git push origin master

至此,我们已经完成了基本的创建新文件并保存的任务

注意事项:

在使用Git Push代码到数据仓库时,提示如下错误:

[remote rejected] master -> master (branch is currently checked out)

错误原型remote: error: refusing to update checked out branch: refs/heads/masterremote: error: By default, updating the current branch in a non-bare repositoryremote: error: is denied, because it will make the index and work tree inconsistentremote: error: with what you pushed, and will require 'git reset --hard' to matchremote: error: the work tree to HEAD.

错误原因以及解决:这是由于git默认拒绝了push操作,需要进行设置,修改/srv/gitrepo/project.git/.git/config文件后面添加如下代码:[receive]denyCurrentBranch = ignore

无法查看push后的git中文件的原因与解决方法:

在初始化远程仓库时最好使用 git --bare init 而不要使用:git init

如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时, 如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上, 也即在远程仓库的目录下对应的文件还是之前的内容。

解决方法:

#必须得使用命令git reset --hard才能看到push后的内容

搭建服务器上的GIT并实现自动同步到站点目录(www):#就比如刚才我们往远程仓库推送了index.php文件,虽然提示推送成功,但是我们现在在服务器端还看不到效果,心理总是不爽。又比如我写了个html页面,我想在站点中马上看到,那自动同步就派上用场了。

自动同步功能用到的是 git 的钩子功能,

服务器端:

进入裸仓库: /srv/gitrepo/project.git/.git

# cd /srv/gitrepo/project.git/.gitcd hooks

这里我们创建post-receive文件

# vim post-receive //在该文件里输入以下内容:

#!/bin/bashgit --work-tree=/data/www checkout -f

保存退出后,将该文件用户及用户组都设置成

# chown git:git post-receive

由于该文件其实就是一个shell文件,我们还应该为其设置可执行权限

# chmod +x post-receive

如果你在Git推送的工程中发现推送成功 但是在www目录下并没有自己的代码,这时候你可要注意了:这是由于文件夹的权限的原因造成的! 假设你的www目录的所属的用户组为root,你可以将你的git用户加入这个组;并给git添加写入权限,或者其他解决方法,反正你要服务器上的git用户有权限进入www文件夹。

# cd /data/www

# gpasswd -a git root

# chmod 775 /data/www

# git reset --hard

返回首页
返回顶部