On Wed, Apr 29, 2020 at 09:36:31AM -0400, Doug Glidden wrote: > 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@xxxxxx> 1588217922 +0200 committer Torsten Bögershausen <tboegi@xxxxxx> 1588217922 +0200 data 16 Add file1 file2 M 100644 :1 file1 M 100755 :2 file2