这篇文章主要介绍“如何搭建git服务器管理网站”,在日常操作中,相信很多人在如何搭建git服务器管理网站问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何搭建git服务器管理网站”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
拓扑是这样的:
网站服务器WS,就是你看到的本站的服务器啦。WS上我们主要需要做的是git服务器配置;
开发服务器DS,就是找的其他的服务器。DS上主要做的是配置git本地环境;
本地机PC,就是写代码的电脑了。
也就是说,预想的正确操作是:PC用PhpStorm开发代码,用自带的ssh提交功能提交到开发服务器上,DS提供web预览,及时地预览效果,当效果稳定后,使用git提交到网站服务器,就完成了功能迭代。同时git还能够做版本控制,想想都有点小激动呢~有关如何搭建LNMP环境、如何配置PhpStorm的ssh,百度一下会出来很多资料,也可以评论和邮件我,这里不多介绍。
相关的版本一览:
机器 | 软件 | 版本 |
---|---|---|
WS/DS | 操作系统 | Debian 8.2 |
WS/DS | git | 2.1.4 |
这里的源是163提供的给Debian 8(Jessie)的源,你可以自己去寻找适合自己版本的163源、清华大学镜像站源等等。
vi /etc/apt/sources.list
加入:
deb http://mirrors.163.com/debian/ jessie main non-free contrib deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib deb-src http://mirrors.163.com/debian/ jessie main non-free contrib deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
apt-get install git apt-get install sudo
adduser bwb
密码一定要输哦,这个密码是登录这个账户的密码。
vi /etc/sudoers
添加:
bwb ALL=(ALL:ALL) ALL
并使用wq!
进行强制保存。
cd ~/.ssh ssh-keygen -t rsa
会提示输入密码,这个密码是这个密钥的密码,推荐输入哦(虽然不输入也能成功)。如果没有.ssh目录的话,可以手动创建一个。
可以使用类似xftp4
这类ftp工具,把生成的id_rsa.pub
从DS拷贝到WS上。如果使用xftp4的话,注意通过菜单栏的工具
→选项
,勾选“显示隐藏的文件”来看到.ssh这个隐藏目录。
从root用户进入(或者直接从bwb用户进入):
su bwb sudo mkdir ~/.ssh sudo cd ~/.ssh sudo cat id_rsa.pub >> authorized_keys sudo service ssh restart
(1)如果没有.ssh才创建.ssh
(2)这里的id_rsa.pub
注意填为你拷贝的文件路径。
(3)配置好后,你可以在DS上通过:
touch test.txt scp -r test.txt bwb@xxx.xxx.xxx.xxx:/home/bwb
来观察test.txt
有没有拷贝到WS上的/home/bwb
目录下。这里的xxx.xxx.xxx.xxx是WS的IP,当然你也可以填网址域名。
我们全程假设web工程的目录为/home/testweb。
(1)进入目录
cd /home/testweb
(2)初始化空仓库
git init
会提示:
初始化空的 Git 版本库于 /home/testweb/.git/
(3)修改config
vi .git/config
加入:
[receive] denyCurrentBranch = ignore
(4)修改hook
新建一个hook
vi .git/hooks/post-receive
加入:
#!/bin/sh GIT_WORK_TREE=/home/testweb git checkout -f
(5)加入README.md
touch README.md
(6)加入工程下的所有的文件到git
git add .
注意后面的点哦。
(7)提交到本地仓库
git commit -m "Initial commit"
(1)安装环境
和前面配置源、安装git的操作一致,只需要这两步就可以了。
(2)克隆项目:
git clone bwb@xxx.xxx.xxx.xxx:/home/testweb
会提示输入密码,这是之前设置的id_rsa的密码。
(3)[ 可选 ] 创建robot.txt禁止爬取所有文件:
vi robot.txt
加入:
User-agent: * Disallow: /
(4)[ 可选 ] 创建不想被上传的文件的规则:
vi .gitignore
加入:
#self /.gitignore #robot robot.txt
(5)测试是否成功
echo "123" >> README.md git add . git status git commit -m "test" git push
git status是在提交前查看一下要提交的有哪些东西,可以不用这条命令。
如果前面的成功了,基本就搭建完了。这里只是为了更安全限制bwb的权限,只能git,不能登录,且不能用sudo提权了:
(1)修改shell权限
vi /etc/passwd
把:
bwb:x:1000:1000:,,,:/home/bwb:/bin/bash
改为:
bwb:x:1000:1000:,,,:/home/bwb:/usr/bin/git-shell
(2)修改sudo权限
vi /etc/sudoers
把之前添加的:
bwb ALL=(ALL:ALL) ALL
用#注释掉:
#bwb ALL=(ALL:ALL) ALL
注意使用wq!
强制保存,恭喜你,搭建完成了~
因为如果不加的话,DS进行push就会报错,大意是它不是个裸仓库:
remote: error: refusing to update checked out branch: refs/heads/master remote: error: By default, updating the current branch in a non-bare repository remote: error: is denied, because it will make the index and work tree inconsistent remote: error: with what you pushed, and will require 'git reset --hard' to match remote: error: the work tree to HEAD. remote: error: remote: error: You can set 'receive.denyCurrentBranch' configuration variable to remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into remote: error: its current branch; however, this is not recommended unless you remote: error: arranged to update its work tree to match what you pushed in some remote: error: other way. remote: error: remote: error: To squelch this message and still keep the default behaviour, set remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
因为如果不加hook的话,DS进行push,WS是看不到结果的,因为没有更新worktree。你用在WS上使用git status就能看出区别了,它一直停留在master分支上。解决方法是手动更新:
git reset --hard
但是这样太麻烦了,所以加hook,加了的话,就会自动更新,hook的意思就是“if做了什么操作,then就去做什么操作”,它帮你完成了。
这是一个我研究了好久并且实践过的问题,答案是,--bare不适合web代码管理。
(1)外观
首先来看一下 git init --bare
(以下简称bare)和git init
(以下简称init)的外观区别:
init会创建一个.git的隐藏文件夹,内容有branches、config、description、HEAD、hooks、info、objects、refs;
bare不会创建.git文件夹,而是直接在当前文件夹下创建同样的这些内容。
(2)功能
init可以在git服务器上执行git操作;
bare不能在git服务器上执行git操作,会报错:This operation must be run in a work tree
(3)本质
init的本质是会创建工作目录,而bare的本质是只记录历史信息,不维护工作目录。
因此,init适合于web项目的维护,可以在WS上实时地看到更新后的完整的web项目文件。而bare适合于多人的项目维护,不需要在远端仓库看到更新后的工作目录,只需要记录每个人操作了些什么东西即可。如果用bare维护web项目,DS进行push后,WS是没有任何反应的(当然会更新objects文件,只是其他文件没有反应),并且不能在WS上执行任何git操作。所以应该使用init。
git add . //重新提交 .ignore文件 git rm -r --cached . //清空缓存 git add . //重新提交 所有文件 git commit -m "update .gitignore" git push
注意命令中的点。
userdel -r bwb
bwb为你不想创建的用户。
提示:
Are you sure you want to continue connecting (yes/no)? Host key verification failed. fatal: Could not read from remote repository.
这是因为你输入的是回车而不是“yes”,输入yes即可。
跟着提示设置一下config即可:
git config --global user.email "you@example.com" git config --global user.name "Your Name"
它的实质是去修改.git/config
文件。
首先检查你是否有那个文件的权限(比如它是root用户才能访问的文件夹),如果没有请赋予权限:
chown -R bwb:bwb home/testweb
然后检查是否把DS的id_rsa.pub的内容成功添加进WS的authorized_keys了。
最后非常可能的就是你配错了用户。比如你把DS的id_rsa.pub配到WS的root用户的authorized_keys里去了,结果后面访问的ssh又是bwb用户,当然被拒绝了。
如果还不行,debian操作系统可以查看/var/log/auth.log
,其他操作系统可以查看/var/log/secure
,然后:
tail -n100 /var/log/auth.log|grep sshd
来观察到底有没有进行过连接、到底是哪个地方出了问题。
#忽略文件 test.txt #忽略根目录下的文件 /test.txt #忽略指定目录下的文件 /src/test.txt #忽略目录 /test #忽略文件夹,但不忽略其中的某些文件 /test !/test/test.txt
robot.txt在线生成
简书的robot.txt
爱奇艺的robot.txt
最简单的配置:
User-agent: * 这里的*代表的所有的搜索引擎种类,*是一个通配符 Disallow: / 这里定义是禁止爬寻站点所有的内容
到此,关于“如何搭建git服务器管理网站”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。