threads / bug / 52316

[Bug] git diff assumes executable permissions change is always 0755

Subject: [Bug] git diff assumes executable permissions change is always 0755

## tl;dr

3 messages between Nov 22, 2019 and Nov 22, 2019.

replies: 2people: 3as markdown or json

Wes Hurd· Nov 22, 2019, 19:47 UTC · lore

git 2.24.0 macOS 10.14.6

To reproduce:
 - Start a file, commit in git
 - chmod 0744 file.txt
 - git diff
 - ls -l file.txt

git diff reports : old mode 100644 new mode 100755

expected: git lists actual permissions of file new mode 100744 File's permissions are 0744 (-rwxr--r--)

Thanks,
Elijah Newren· Nov 22, 2019, 20:08 UTC · re: Wes Hurd · lore

Re: [Bug] git diff assumes executable permissions change is always 0755

On Fri, Nov 22, 2019 at 11:50 AM Wes Hurd <13hurdw@gmail.com> wrote:
Show 18 quoted lines
>
> git 2.24.0
> macOS 10.14.6
>
> To reproduce:
>  - Start a file, commit in git
>  - chmod 0744 file.txt
>  - git diff
>  - ls -l file.txt
>
> git diff reports :
> old mode 100644
> new mode 100755
>
> expected:
> git lists actual permissions of file
> new mode 100744
> File's permissions are 0744 (-rwxr--r--)

Thanks for the report, but this isn't a bug. See the final paragraph of https://git-scm.com/docs/user-manual#tree-object. (Said another way, git doesn't track full permisions of files nor ACLs nor creation/modification/access times, or other filesystem-specific data. It's reporting to you the data as recorded in git which for normal files will be either 100644 or 100755.)

Denton Liu· Nov 22, 2019, 20:11 UTC · re: Wes Hurd · lore

Re: [Bug] git diff assumes executable permissions change is always 0755

Hi Wes,
On Fri, Nov 22, 2019 at 02:47:02PM -0500, Wes Hurd wrote:
Show 19 quoted lines
> git 2.24.0
> macOS 10.14.6
> 
> To reproduce:
>  - Start a file, commit in git
>  - chmod 0744 file.txt
>  - git diff
>  - ls -l file.txt
> 
> git diff reports :
> old mode 100644
> new mode 100755
> 
> expected:
> git lists actual permissions of file
> new mode 100744
> File's permissions are 0744 (-rwxr--r--)
> 
> Thanks,

This is expected behaviour. Git only tracks the user executable bit and extends it to group and other. See here[1] for more details.

Would setting your umask help in any way?
Thanks,
Denton
[1]: https://git-scm.com/docs/user-manual#tree-object

← back to recent threads