不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2020-05-23 18:36  分类:电脑/软件使用  编辑

在发布项目到线上时,很多时候需要修改文件的权限,如果是使用git版本管理软件来发布的话,那么下次更新线上文件的时候就会提示文件冲突。明明文件没有修改,为什么会冲突呢?原来git把文件权限也算作文件差异的一部分。下面笔者自己做了个简单的例子来演示这种情况。

1、修改版本库的文件的权限,然后使用diff查看下改变。

$ chmod 777 pack.php
$ git diff pack.php

git文件权限修改示例

可以看到git把文件权限也列入了版本管理。

2、在另外一个地方clone这个版本库,修改pack.php文件,然后提交。

3、在原版本库下面更新内容。

$ git pull

git文件权限修改引起的冲突

可以看到提示冲突。

解决办法:

git中可以加入忽略文件权限的配置,具体如下:

$ git config core.filemode false  // 当前版本库【这个起作用了】
$ git config --global core.fileMode false // 所有版本库 【设置了,好像没起作用】

这样就设置了忽略文件权限。查看下配置:

$ cat .git/config // 查看git的配置文件

git忽略文件权限的配置

这时候再更新代码就OK了。

 


脚本备用

文件名:01-cz-update.sh

#!/bin/bash

# 常州
SITE_ROOT="/alidata/www/cz.xxx.com"

if [ ! -d "${SITE_ROOT}" ]; then
    echo "${SITE_ROOT} 不存在" 
    exit 1
fi

cd ${SITE_ROOT}

# Git 中忽略文件权限或文件拥有者的改变 带来的版本变动
# 参考:http://php-note.com/article/1778.html
git config core.filemode false
chmod -R 777 ${SITE_ROOT}
echo 'ok'