CentOS 7安装git服务端
系统版本: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
留言评论