git网站(Coding)

第零步:修改服务器名云服务器默认的名字又臭又长,很占命令行空间,所以我想改了它。先查看一下当前名称:hostname然后修改/etc/hostname文件里的名字,改为Tank,看起来舒服多了。sudo vim /etc/hostname最后重启再看主机名就改好了。sudo rebootGit是个神奇的工具,它除了可以用来管理本地代码仓库,还可以实现网站部署。其原理也很简单,就是利用Git hooks抓取git push动作,你在本地push那么远程就会有post-receive。post-receive被抓取后,这个所谓勾子就会根据设定来执行动作,这里就是部署代码。由于这是个直播帖,我是一边做一边截图一边写文,所以中间如果有翻车还请见谅。原文链接:https://segmentfault.com/a/1190000003836345第一步:创建仓库首先我们登录到服务器,在~目录下创建一个裸仓库,它只包含各类配置文件,但代码不会放到这里。第7话里我们的实际代码放在/var/www/tanyugang目录下,一会再操作它。git init –bare tanyugang.git这样就会在~/目录下创建一个裸仓库tanyugang.git。第二步:初始化目录这一步是把/var/www/tanyugang初始化为一个git仓库,然后从刚才的裸仓库同步代码。首先是切换到/var/www/tanyugang目录,然后执行git init。cd /var/www/tanyugang
sudo git init然后把这个仓库的更新源设置为~/tanyugang.gitsudo git remote add orgin ~/tanyugang.git下一步是获取仓库分支sudo git fetch再下一步是检出master分支,这一步我就与原文链接里不一样了,我这里报错了。sudo git checkout master提示信息意思是找不到master分支。如果在我本地电脑git clone一下,会提示是个空仓库,这个其实没啥问题,不过也没有分支。那我们就创建一个分支叫做master,这里跟原文就不太一样了。创建命令仍然不好使,谭老师有些郁闷,于是又差了一下,说空仓库必须先添加文件提交后,才能使用master分支,其实不用创建。那我就把/var/www/tanyugang/index.html文件提交了,看是不是可行。sudo git add index.html
sudo git commit -m "Add index.html"执行命令后结果如下图所示。草率了,还没有配置好git信息,你看几天不用放爪就忘了,那就按照提示的命令搞一下。再次commit发现还是有问题,同样提示不知道我是谁。我就把git config加上sudo试试,果然可以了,并且commit成功后,也可以看到master分支了。sudo git config –global user.email "[email protected]"
sudo git config –global user.name "tanyugang"
sudo git commit -m "Add index.html"
git branch -a欧几把可,充分说明在Server上没有管理员权限啥都干不了。再次回到本地电脑,获取分支后再检出。呵呵,获取不到呢,删了吧。把clone的tanyugang目录删除后,重新clone还是获取不到,这不是日了狗了吗?想想我可能会错意了,我不应该在服务器上做commit,我应该在本地创建文件,然后把服务器添加为远程的源,并进行commit。又或者我忘记在服务器进行push了,所以~/tanyugang.git还没有拿到/var/www/tanyugang里的master分支。谭老师心急,已经把index.html删掉了,不过master分支还在。git status
sudo git rm index.html
sudo git commit -m "Delete index.html"
sudo git branch你看看这一系列的骚操作,果然脑子不清楚了。其实问题不大,反正master分支还在,那就push上去好了。第一次直接git push,忘记写分支名也是没谁了;第二次记得了,不过还是有错误提示,上层没有master分支,没有就对了。我们按照提示来为~/tanyugang.git添加master分支。sudo git push –set-upstream master master还是不行啊,感觉成了一个先有鸡还是先有蛋的问题。还是得搞下去,真可谓是心急吃不了热豆腐。把本地电脑clone的tanyugang目录删了;新建了tanyugang目录,并初始化git;新建了index.html文件,并git add;cd /~
rm -rf tanyugang/
ls
mkdir tanyugang
cd tanyugang
git init
vim index.html
git add .
git commit -m "Add index.html"想git commit没成功,先git config;git commit成功了;添加远程仓库;git config –global user.email "[email protected]"
git config –global user.name "tanyugang"
git commit -m "Add index.html"
git remote add origin tan:tanyugang.gitgit push成功;git push tan:tanyugang.git master然后再次来到服务器端,进行如下操作:删除/var/www/tanyugang;重新创建/var/www/tanyugang;修改tanyugang目录权限;来到tanyugang并git init;sudo git add remote origin;获取远程分支;查看当前分支;cd /var/www
sudo rm -rf tanyugang
sudo mkdir tanyugang
sudo chmod -R 755 tanyugang
cd tanyugang
sudo git init
sudo git remote add origin ~/tanyugang.git
sudo git fetch
git branch -a终于可以看到正确的分支了,我们checkout试试,提示已经在master分支了,并且可以看到index.html文件,这第二步总算完成了。第三步:Git hooks希望这第三步不要出什么幺蛾子,不过第一步就遇到坎了,原文里说的post-receive.sample文件找不到。那我们就新建一个文件,叫做post-receive,并把它的权限修改为777。#!/bin/sh

unset GIT_DIR

NowPath=`pwd`
DeployPath="/var/www/tanyugang"

cd $DeployPath
git pull origin master

cd $NowPath
exit 0做个测试吧,在本地修改index.html,并推送到远程分支,看是否能自动同步。vim index.html
先git add再git commit。最后git push,仍然在犯错误,现在需要使用如下命令:git push origin master最后我们刷新一下网页,看看内容是否变化。然而我刷新多次后,并没有什么卵用,总不会我这一晚上白费了吧。不行!老纸一定要搞定!我猜测脚本写的可能没问题,就是跳转到/var/www/tanyugang/,然后执行git pull origin master。于是我手动执行了一次,发现没有权限···可以看到当初我新建目录使用了sudo,所以文件的归属者是root,所以在/var/www/tanyugang目录下执行命令都要sudo。那么分析起来有2种解决方案:修改post-receive脚本,加上sudo。修改tanyugang目录归属为ubuntu。先试试第一种,修改脚本:git pull origin master->sudo git pull origin master。在本地电脑修改index.html并push,然后查看是否自动同步。卧槽!终于同步了,这也算告一段落了。个人分析第二种方法应该也可以,使用chown命令修改tanyugang目录所属用户。sudo chown -R ubuntu:ubuntu ./tanyugang/然后删掉~/tanyugang.git/hooks/post-receive里面的sudo。再次修改本地的index.html并push,可以看到这种方法也是可行的,世界终于清静了,再见!

本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.175ku.com/37608.html