首页 > 其他分享 >git pull或git checkout 后保持权限不变

git pull或git checkout 后保持权限不变

时间:2024-01-31 18:47:12浏览次数:24  
标签:pull www git data post 权限 checkout

1. 起因

       服务器上的项目,一般都是使用用户组www-data或者www来保证权限安全,不会使用root的。但是git pull下来的新文件或者修改的文件,则会把原有的文件的权限更改为644,用户组改为root。

如下图所示:

 

2. 危害

例如日志文件异步程序,定时任务,配置文件之类的,由于最后运行用户的用户不对或者权限不够,可能会导致异常退出,文件无法读取,日志无法写入等等。所以,这个问题是值得引起我们重视的。

3. 解决办法

3.1. 手动解决

想法很简单,重新修改文件的权限。比如,回到站点上级目录,执行如下命令

chmod -R 755 www.guaosi.com/
# 修改项目内所有文件为755权限
chown -R www-data:www-data www.guaosi.com/
# 修改项目内所有文件的用户和用户组为www-data

只要不嫌累,每次git pull 或者 git checkout . 后退回上级目录执行一次,还是可以舒舒服服解决这个问题的.

3.2. git hook函数

接下来是这篇文章的重点了,我们可以使用git内置的钩子函数来解决这个问题.

先来看一下怎么操作:

3.2.1. git pull 操作

1.进入项目目录

cd www.guaosi.com

2.进入.git目录

cd .git/hooks/

3.新建post-merge文件

vim post-merge

4.写入钩子内容

#!/bin/sh
pwd
echo "This is post-merge hook"
chmod -R 755 ./* && chown -R www-data:www-data ./*

5.给予运行权限

chmod +x post-merge

3.2.2. git checkout 操作

1.进入项目目录

cd www.guaosi.com

2.进入.git目录

cd .git/hooks/

3.新建post-checkout文件

vim post-checkout

4.写入钩子内容

#!/bin/sh
pwd
echo "This is post-checkout hook"
chmod -R 755 ./* && chown -R www-data:www-data ./*

5.给予运行权限

chmod +x post-checkout

3.2.3. 原理

看了钩子内容应该大家都明白了,其实就是把手动运行的内容放入了钩子函数。在执行git pull命令时,会自动调用post-merge。在执行git checkout时,会自动调用git checkout.这样我们以后就不用再操心,怕遗忘权限有没有修改的问题了

转自:https://www.guaosi.com/2018/12/06/git-auto-change/

标签:pull,www,git,data,post,权限,checkout
From: https://www.cnblogs.com/houdj/p/17999896

相关文章

  • 极狐GitLab在线发布(数据库)方法论
    前言其他公司——邮件“这周五凌晨6点公司产品发布,请相关的产品、设计、测试、运维、DBA、后端、前端、客服准时就位,6点开始我们准时挂维护页面。“产品公告栏“各位客户,我们产品定于xxxx(本周五)版本发布,维护xx小时,由此带来的不便请谅解,特此通告!“极狐GitLabSRE:昨天发布了。......
  • ssh: connect to host github.com port 22: Connection timed out
    ssh:connecttohostgithub.comport22:Connectiontimedout本地pull/push推送代码到github.com项目报错22端口超时,测试连接也是超时,如下图: 因为已经开强了,所以网络是通的,Google也正常访问怀疑是ssh秘钥问题,发现官方文档有相关介绍,按着操作解决。官方文档放在最后。......
  • git删除某条记录的大文件提交
    由于git误提交了个大文件(>1G),虽然删除了,但是提交记录还在,导致出发了git大文件警告。需求:找到提交大文件的记录,删除提交的大文件。针对所有分支删除该次提交的大文件:gitfilter-branch--index-filter'gitrm--cached--ignore-unmatch"DONS/MemoryCaptures/Snapshot-63841......
  • mac下git命令自动补全
    本文亲测可用。老版本macos方法:1、打开网页,https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash全选,复制内容。2、在~/.bash_profile文件(如果没有需要创建)中加入以下内容即可生效if\[-f~/.git-completion.bash\];then.~/.gi......
  • gitlab备份
    1)Gitlab的备份目录路径设置123456789101112[root@code-server~]#vim/etc/gitlab/gitlab.rbgitlab_rails['manage_backup_path']= truegitlab_rails['backup_path']= "/data/gitlab/backups"    //gitlab备份目录gitlab_rail......
  • github加速访问
    来源:https://github.com/521xueweihan/GitHub520/blob/main/README.md2.1手动方式2.1.1复制下面的内容#GitHub520HostStart140.82.113.25alive.github.com140.82.112.5api.github.com185.199.110.153assets-cdn.gi......
  • [git] out of memory malloc failed 解决
    [git]outofmemorymallocfailed解决-个人文章-SegmentFault思否git提交时,报错"Fatal:Outofmemory,mallocfailed(triedtoallocate42446849bytes)" 解决这个报错1、需要把windowMemory容量调大(默认10m,调整为50m)2、建议同时调整postbuffer的容量。3、最后还......
  • Git:删除所有 Commit 提交记录
    如果想要删除 Git 项目下的所有 Commit 提交,可以使用以下方法。 1. 创建孤立分支,并切换到该分支:gitcheckout--orphanlatest_branch2.暂存所有文件:gitadd-A3.提交所有更改:gitcommit-am"FirstCommit"4.删除主分支master:gitbranch-Dmaster5.重命名当前分......
  • mac配置gitlab
    使用ssh方式拉取gitlab仓库代码背景在公司mac电脑上需要将gitee仓库代码迁移到公司gitlab代码仓库中,而我习惯使用ssh方式关联git仓库。我也喜欢使用下面简单粗暴的方式来配置git,之前玩git在window10系统上玩的比较多,各种操作都玩过,比如:创建分支、切换分支、分支代码合并、单文件......
  • Java:JetBrains系列IDEA使用Git很慢(任何git操作都很慢)
    问题说明公司电脑上使用IntelliJIDEA的时候发现操作Git特别的慢,status、fetch、pull、checkout、commit这些基础操作都特别特别慢!!!!!让人爆发的是在Settings里面查Git的版本需要20多秒!!!!!!(有时候真的想砸电脑……)解决办法这里查了好久的博文,几乎都是说commit屏蔽TODO检查的文章......