在发布项目到线上时,很多时候需要修改文件的权限,如果是使用 git 版本管理软件来发布的话,那么下次更新线上文件的时候就会提示文件冲突。明明文件没有修改,为什么会冲突呢?原来 git 把文件权限也算作文件差异的一部分。下面笔者自己做了个简单的例子来演示这种情况。
1、修改版本库的文件的权限,然后使用 diff 查看下改变。
$ chmod 777 pack.php $ git diff pack.php [root@localhost php]‡ git diff pack.php diff --git a/php/pack.php b/php/pack.php old mode 100644 new mode 100755
git 文件权限修改示例
可以看到 git 把文件权限也列入了版本管理。
2、在另外一个地方 clone 这个版本库,修改 pack.php 文件,然后提交。
3、在原版本库下面更新内容。
[root@localhost php]# git pull Updating 804203e.. 4abe32e error: Your local changes to php/pack.php would be overwritten by merge Please, commit your changes or stash them before you can merge.
git 文件权限修改引起的冲突
可以看到提示冲突。
解决办法:
git 中可以加入忽略文件权限的配置,具体如下:
$ git config core.filemode false
这样就设置了忽略文件权限。查看下配置:
[root@localhost mycode]# cat .git/config [core] repositoryformatversion = 0 filemode = false bare = false logallrefuodates = true
git 忽略文件权限的配置
这时候再更新代码就 OK 了。