git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git fast-export not preserving executable permissions?

From
Torsten Bögershausen <tboegi@web.de>
Date
Apr 30, 2020, 03:42 UTC
Message-ID
<20200430034230.smqu3ai5nx3ewbdq@tb-raspi4>
In-Reply-To
<CAHTRwmjXXYAU_LTBF_9sX1CXFnGyHsu5_KHuCp1rB76-4zn=Gg@mail.gmail.com>
On Wed, Apr 29, 2020 at 09:36:31AM -0400, Doug Glidden wrote:
Show 18 quoted lines
> Hello Git world!
>
> I have run into an issue that I cannot seem to resolve with git
> fast-export. When running a fast-export on a repo that contains
> scripts with executable permissions (e.g. a gradlew script), the
> resulting export does not properly reflect the executable permissions
> on the script files.
>
> To illustrate this issue, I created a small sample repo, with one
> executable file and one non-executable file. From the output below,
> you can see that the mode in the output from fast-export is the same
> for both files; according to the documentation for fast-import, the
> mode for the executable file should be 100755 instead of 100644.
>
>     $ ls -gG
>     total 2
>     -rwxr-xr-x 1 106 Apr 29 09:13 executable_script.sh*
>     -rw-r--r-- 1  63 Apr 29 09:12 non_executable_file.txt

What does git ls-files -s give you here ? We need to know, how Git tracks the files, is it 100644 or 100755 ?

The following works for me:
user@pc:/tmp/fff> git init
Initialized empty Git repository in /private/tmp/fff/.git/
user@pc:/tmp/fff> echo file1 >file1
user@pc:/tmp/fff> git config core.filemode false
user@pc:/tmp/fff> echo file2 >file2
user@pc:/tmp/fff> git add file1 file2
user@pc:/tmp/fff> git ls-files -s
100644 e2129701f1a4d54dc44f03c93bca0a2aec7c5449 0       file1
100644 6c493ff740f9380390d5c9ddef4af18697ac9375 0       file2
user@pc:/tmp/fff> git update-index --chmod=+x file2
user@pc:/tmp/fff> git ls-files -s
100644 e2129701f1a4d54dc44f03c93bca0a2aec7c5449 0       file1
100755 6c493ff740f9380390d5c9ddef4af18697ac9375 0       file2
user@pc:/tmp/fff> git commit -m "Add file1 file2"
[master (root-commit) f75926e] Add file1 file2
 2 files changed, 2 insertions(+)
  create mode 100644 file1
  create mode 100755 file2

user@pc:/tmp/fff> git fast-export --all blob mark :1 data 6 file1

blob mark :2 data 6 file2

reset refs/heads/master commit refs/heads/master mark :3 author Torsten Bögershausen <tboegi@web.de> 1588217922 +0200 committer Torsten Bögershausen <tboegi@web.de> 1588217922 +0200 data 16 Add file1 file2 M 100644 :1 file1 M 100755 :2 file2

Previous: Johannes Schindelin
Message 6 of 6 in “git fast-export not preserving executable permissions?”
  1. Doug GliddenApr 29, 2020
  2. Taylor BlauApr 29, 2020
  3. Doug GliddenMay 1, 2020
  4. Taylor BlauMay 1, 2020
  5. Johannes SchindelinMay 4, 2020
  6. Torsten BögershausenApr 30, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.