纵有疾风起
人生不言弃

服务器自建git仓库,提交后修改了文件权限的处理方法

我先说一下我的问题:

我在自己远程服务器搭建自己的仓库,仓库和项目是分开的,不在同一个文件夹下,是建的裸仓库,git -init –bare,导致执行不了git的基本命令,而我项目里有些配置文件一开始加入了版本跟踪,比如保存在根目录的微信的token(访问量大不适合存数据库),每次提交的时候都会把线上的这个文件更新掉,然后我就设置了文件忽略,.gitignore,懂行的就知道,也没有用,然后就把文件从git缓存区清除了,git rm –cached 这样的,这样修改后,文件变更后确实不会再提交了。但是我线上的用的自动更新的钩子文件是这样写的:

先解释一下意思,git –work-tree=工作目录  checkout -f

因为仓库和工作区分离了,所以,要执行git 部分命令,所以可以这样写git –work-tree,

但也只能实现很有限的部分功能,其中checkout 就是其中一个,还有一个是reset HEAD,这两个命令其实都差不多,checkout -f  是强制取消本地修改。我每次提交后,线上有过手动权限修改的文件也会被修改回来,因为要实现自动更新,项目的文件所有者得是chown -R  git:git,但是网站运行时,是以www的角色在运行的,查看日志发现,微信token文件没有权限读取。试了很多种方法,也包括git config filemode false。最终这种方法是对的:

在git仓库/hooks/下随便建一个以这样命名的:post-*,你比如post-receive,或者post-checkout,

官方文档里有说明钩子的作用:post-*就是本地push后触发的。

里面这样写:

本地git push 查看一下果然可以:

总结一下:

之前搭建仓库都是看别人的,其中道理的根本没有多想,也没时间多去试,直到遇到问题了才不得不去解决,也是看了很多人写的,但大部分人的也都是一知半解,git是个很灵活的东西,shell也是很灵活的,用和知道为什么这么用可能就差一分钟的时间,所以还是要心沉下来才能做东西。

参考文档:

https://blog.csdn.net/swatyb/article/details/52050846

https://blog.csdn.net/baidu_30000217/article/details/51327289

https://blog.csdn.net/sun2009_/article/details/70198580

https://blog.csdn.net/technofiend/article/details/51361393

建议阅读一下

 

——————发现上面的方法并不奏效,阿西巴——————

下面这两种是可以试一哈:

方法一:

从暂存区清除

git –git-dir=/www/git/weika –work-tree=/www/wwwroot/weika update-index –assume-unchanged ticket.txt

方法二(我的是这种,可以了):

从版本库中删除,便文件还在

git –git-dir=/www/git/weika –work-tree=/www/wwwroot/weika rm –cached ticket.txt

git –git-dir=/www/git/weika –work-tree=/www/wwwroot/weika add .

git –git-dir=/www/git/weika –work-tree=/www/wwwroot/weika commit  -m ‘从版本库取消文件跟踪’

git –git-dir=/www/git/weika –work-tree=/www/wwwroot/weika add push /www/git/weika

未经允许不得转载:起风网 » 服务器自建git仓库,提交后修改了文件权限的处理方法
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录