Git自动化部署踩过的坑

  1. 编写php【用于执行hook.sh,注意使www用户有可执行的权限】
$jsonData = file_get_contents('php://input', 'r');

$postArray = json_decode($jsonData,true);

if (isset($postArray['ref']) && $postArray['ref'] == 'refs/heads/master') {

file_put_contents('/home/wwwlog/hook_log-'.date('Ymd').'.txt',date('Y-m-d H:i:s').'|-------|'.$jsonData.PHP_EOL, FILE_APPEND);

$status = @system('/home/wwwroot/bin-shells/hook.sh',$out);

}

exit('ok');
  1. 编写sh
#!/bin/sh

#判断是不是远端仓库




IS_BARE=$(git rev-parse --is-bare-repository)

#if [ -z "$IS_BARE" ]; then

#echo >&2 "fatal: post-receive: IS_NOT_BARE"

#exit 1

#fi




#unset GIT_DIR

DeployPath="/home/wwwroot/cash_advance"




echo "==============================================="

cd $DeployPath

echo "deploying the test web"




#git stash




#git pull origin master




git fetch --all

git reset --hard origin/master

git pull

#gitbook build

sleep 15




time=`date`

echo "web server pull at webserver at time: $time."

echo "================================================"

 

  1. 相关权限问题:
  • 要使www用户有执行shell脚本的权限:
vi /etc/passwd 将/sbin/nologin改为/bin/bash

 

  • 要将/root/.ssh/下的文件拷贝到www用户的宿主目录下:/home/www/.ssh/,因为web是以www用户来访问的;并将私钥加入到本地计算机的ssh-agent中:

➜ su www【切换到www用户】

➜ eval “$(ssh-agent -s)”

Agent pid 78370

➜ ssh-add /home/www/.ssh/id_rsa

Enter passphrase for /Users/Leo/.ssh/id_rsa: <myPassphrase>

Identity added: /Users/Leo/.ssh/id_rsa (/Users/Leo/.ssh/id_rsa)

  • 在git根目录下需要给隐藏目录.git 755的权限:

chmod -R 755 ./.git

git 的全局sudo -Hu www git config –global credential.helper store # 永久保存

sudo -Hu www git config –global user.name “name”

sudo -Hu www git config –global user.email “shample@gmail.com” # 邮箱请与github上一致

  • 修改ini文件:将system函数从禁用列表中删除

 

  1. 将外网可访问的http://xxx.xxx.com/hook.php配置到github后台的Web Hooks配置项中。

git文件名大小写问题

踩了git的坑

在windows下,一开始提交了一个coinLog.js文件,后来把它重命名为coinlog.js,居然提交不了。git提示没有改动。后来才知道,原来git默认对文件名的大小写不敏感。

如何解决git文件名大小写问题

步骤如下:

1.首先删除存储在git本地仓库的目标文件,以coinLog.js为例

  1. git rm coinLog.js

或者

  1. git rm -f coinLog.js

-f表示强制删除。

2.将修改后的文件放入当前目录,并走正常提交流程即可

SmartGit忽略文件提交

在需要忽略提交的文件夹中创建.gitignore文件。

首先要强调一点,这个文件的完整文件名就是“.gitignore”,注意最前面有个“.”。这样没有扩展名的文件在Windows下不太好创建,

这里给出win7的创建方法:

创建一个文件,文件名为:“.gitignore.”,注意前后都有一个点。保存之后系统会自动重命名为“.gitignore”。

一般来说每个Git项目中都需要一个“.gitignore”文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。

实际项目中,很多文件都是不需要版本管理的,比如Python的.pyc文件和一些包含密码的配置文件等等。

这个文件的内容是一些规则,Git会根据这些规则来判断是否将文件添加到版本控制中。

下面我们看看常用的规则:

  • /mtk/ 过滤整个文件夹
  • *.zip 过滤所有.zip文件
  • /mtk/do.c 过滤某个具体文件

很简单吧,被过滤掉的文件就不会出现在你的GitHub库中了,当然本地库中还有,只是push的时候不会上传。

需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中:

  • !*.zip
  • !/mtk/one.txt

唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。

为什么要有两种规则呢?

想象一个场景:我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理。那么我们就需要使用:

  • /mtk/
  • !/mtk/one.txt

假设我们只有过滤规则没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!

如果需要忽略整个文件夹,.gitignore中写一个*即可

最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。

简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。

所以大家一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦[需要删除该文件再push,然后重新创建该文件,之后.gitignore中的设置才能生效,忽略该文件的提交]。

CentOS生成github的SSH密钥

Linux创建SSH密钥:

第一步:

[执行命令]

  1. ssh-keygen  ##一直默认就可以了

第二步:

将公钥加入到Github账户信息Account Settings->SSH Key tiltle中填写上名字后,在key框中,将linux系统里主目录的.ssh/id_rsa.pub 文件中的内容全部复制到key框中即可

第三步:

测试验证是否成功。


[执行命令]

  1. ssh -T git@github.com
  2. Hi [YourGithub账号]! You’ve successfully authenticated, but GitHub does not provide shell access.

创建SSH Key连接github或gitlab

当我们从github或者gitlab上clone项目或者参与项目时,我们需要证明我们的身份。一种可能的解决方法是我们在每次访问的时候都带上账户名、密码,另外一种办法是在本地保存一个唯一key,在你的账户中也保存一份该key,在你访问时带上你的key即可。github、gitlab就是采用key来验证你的身份的,并且利用RSA算法来生成这个密钥。

第1步:
首先你需要在github上或者gitlab上有一个自己的账户
第2步:
打开git bash【如:在SmartGit,打开Tools->Open Git-Shell】,

输入命令ls -al ~/.ssh  

 1
检查是否显示有id_rsa.pub或者id_dsa.pub存在,如果存在请直接跳至第4步。
第3步:
在git bash中键入ssh-keygen -t rsa -C "your_email@example.com",注意将这里的邮箱地址替换成你自己的邮箱地址。在显示如下的输出后 2
一直按回车就可以了。然后就显示成这样:
在这里可以看到id_rsa和id_rsa.pub文件已经生成。并且生成的路径也已显示。
第4步:
用记事本之类的软件打开id_rsa.pub文件,并且复制全部内容。
3

在你的gitlab或者github的账户,打开SSH key标签。
4
然后选择Add SSH key按钮,将刚刚复制的内容粘贴进去即可,然后点击add key。
5

全部操作完成,只要你对你要操作的项目的有权限,接下来就可以顺利的进行git的操作了。