Git 记录文件权限变更

Stella981
• 阅读 375

在编写 Dockerfile 时,遇到过几次文件权限的问题,每次都需要查询,总是记不住,整理一篇文章记录在这里。

查看文件权限

git ls-tree HEAD

可以查看当前 HEAD 指针所指版本中所跟踪的文件权限列表:

$ git ls-tree HEAD
100644 blob ad46b30886fa350c1f59761b100e5e4b01f9a7ec    .gitignore
100644 blob d3fa69c361cafb45d84c093c1de80c60df6fe73c    Dockerfile
100644 blob 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64    LICENSE
100644 blob 4e0131b7651a9c7da668b35fd4a80b4c36966ce8    README.md
100644 blob 0d6e13f66de19c906aad7c219f07a7a86ccfc55a    docker-compose.yml
100644 blob 20d23117c700e59f1793dd2fddecfa9bdb01085f    entrypoint.sh
040000 tree 7bf219dd6874e144f7801fe4ba4e9e5655ad9c4e    yapi

修改文件权限

Git 版本记录中,关于文件权限部分,由于在不同的系统中的各种特性,Git 仅记录了文件的执行权限,也就是不记录 文件所有者和所属组的变更。

LinuxMac 中,可以很方便的对文件权限进行变更,和追踪:

chmod +x entrypoint.sh

然后 git status 进行变更查看,再 git add entrypoint.shgit commit -m "update entrypoint.sh permission"

但是,再 Win 中,变更文件执行权限,需要通过 git update-index --chmod 来实现变更,具体步骤如下:

$ git update-index --chmod=+x entrypoint.sh

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   entrypoint.sh

$ git add entrypoint.sh

$ git commit -m "fix entrypoint.sh permission"
[master f50b894] fix entrypoint.sh permission
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 entrypoint.sh

$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 237 bytes | 237.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:registrys/yapi.git
   ac5722e..f50b894  master -> master

Git 记录文件权限变更

此时,再查看文件权限:

$ git ls-tree HEAD
100644 blob ad46b30886fa350c1f59761b100e5e4b01f9a7ec    .gitignore
100644 blob d3fa69c361cafb45d84c093c1de80c60df6fe73c    Dockerfile
100644 blob 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64    LICENSE
100644 blob 4e0131b7651a9c7da668b35fd4a80b4c36966ce8    README.md
100644 blob 0d6e13f66de19c906aad7c219f07a7a86ccfc55a    docker-compose.yml
100755 blob 20d23117c700e59f1793dd2fddecfa9bdb01085f    entrypoint.sh
040000 tree 7bf219dd6874e144f7801fe4ba4e9e5655ad9c4e    yapi

Github变更如下:

Git 记录文件权限变更

忽略文件权限

但是,有很多时候我们并不需要过多关注文件权限,特别是部署时会重置文件权限的情况,在开发时由于各环境不同,总是有文件权限的冲突,此时,我们可以忽略文件变更追踪。

git config core.filemode false

可以禁止 Git 跟踪文件权限。

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
刚刚好 刚刚好
4个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
晴空闲云 晴空闲云
4个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
3个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Wesley13 Wesley13
1年前
030 SSM综合练习06
1.权限操作涉及的三张表(1)用户表信息描述users!(https://oscimg.oschina.net/oscnet/a4a2b1f943cbc2db1c8ddd613e7ed00a9ae.png)sql语句:CREATETABLEusers(idVARCHAR2(32)DEFAU
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
helloworld_28799839 helloworld_28799839
4个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue