• Git中如何对文件权限做版本控制的?


    在开发中,经常会使用git来做版本管理,我们主要是用来管理文件的内容,今天首次发现git还可以记录文件的权限修改,特地记录下。

    比如,如下这个文件,没有修改前权限是644

    $ ll
    -rw-r--r--    1 staff  staff   932B Jan 13 11:01 webpack.mix.js
    

    现在,我们修改成755

    $ chmod 755 webpack.mix.js
    -rwxr-xr-x    1 staff  staff   932B Jan 13 11:01 webpack.mix.js
    

    查看git记录,里面已经记录了:

    $ git status
    
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
    	modified:   .idea/workspace.xml
            # 该文件已经被修改
    	modified:   webpack.mix.js
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    通过diff看看修改内容:

    $ git diff webpack.mix.js
    
    # 内容
    diff --git a/webpack.mix.js b/webpack.mix.js
    old mode 100644      # 原来644
    new mode 100755      # 现在755
    (END)
    

    644755最大的区别就是多了一个可执行权限:

    rw- r-- r-- 644
    rwx r-x r-x 755
    

    我们再来试着修改成其他不涉及可执行的权限,先把修改的文件撤销:

    git restore webpack.mix.js
    

    我再设置成666

    $ chmod 666 webpack.mix.js
    $ ll webpack.mix.js
    
    -rw-rw-rw-  1 staff  staff   932B Jan 13 16:06 webpack.mix.js
    

    查看git有没有记录:

    $ git status
    
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
    	modified:   .idea/workspace.xml
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    发现是没有记录的,接着我又试了其他权限,比如655654,仍然是不会记录。

    通过以上的实验发现,git中只记录对于当前用户的可执行权限的记录,比如当前用户原来没有执行权限,添加执行权限后,git就会记录,撤销执行权限也会记录,但对于当前用户组或其他用户是不会记录的。

    这就导致我们在拷贝文件过程中,会发现一个没有修改的文件也被git标记成unstaged file,原因可能就是权限被修改造成的,同时,由于Linux/MacWindows中,文件的权限是有差别的,互相复制拷贝也会出现这种情况。所以可以的话还是建议关闭这个功能

    这个功能是默认开启的,可以手动关闭这个功能:

    git config --local core.fileMode false
    

    --local只针对当前项目,如果需要全局,可以替换成--global,使用如下命令可以查看当前模式:

    git config --get --local  core.filemode
    
  • 相关阅读:
    GIS 中生成平头缓冲区的方法
    arcengine中图层路径的访问与修改
    Codeforces B. Nearest Fraction运行结果与codeblocks运行结果不一致,求大神指教
    html5各种页面切换效果和模态对话框
    java配置数据库连接池
    android动态壁纸调用
    cocod2d 兼容iphone/ipad 问题
    地方房产网站seo优化完善 提高流量和权重
    Python3.x实现网页登录表单提交功能
    进程地址空间的布局(整理)
  • 原文地址:https://www.cnblogs.com/bilberry/p/14272780.html
Copyright © 2020-2023  润新知