Skip to content

git.exe and many other apps do not have the Terminal Server aware flag set #3935

Closed
@ElemenTP

Description

@ElemenTP
  • I was not able to find an open or closed issue matching what I'm seeing

Setup

  • Which version of Git for Windows are you using? Is it 32-bit or 64-bit?
$ git --version --build-options

git version 2.37.0.windows.1
cpu: x86_64
built from commit: 989c3a6832b035f6124b0a23da9c0f8f18afa550
sizeof-long: 4
sizeof-size_t: 8
shell-path: /bin/sh
feature: fsmonitor--daemon
  • Which version of Windows are you running? Vista, 7, 8, 10? Is it 32-bit or 64-bit?
$ cmd.exe /c ver

Microsoft Windows [Version 10.0.22621.105]
  • What options did you set as part of the installation? Or did you choose the
    defaults?
Editor Option: VisualStudioCode
Custom Editor Path:
Default Branch Option:
Path Option: Cmd
SSH Option: ExternalOpenSSH
Tortoise Option: false
CURL Option: WinSSL
CRLF Option: CRLFAlways
Bash Terminal Option: ConHost
Git Pull Behavior Option: Merge
Use Credential Manager: Enabled
Performance Tweaks FSCache: Enabled
Enable Symlinks: Disabled
Enable Pseudo Console Support: Enabled
Enable FSMonitor: Disabled
  • Any other interesting things about your environment that might be related
    to the issue you're seeing?

none

Details

Terminal Server aware is an optional flag in the PE header.

According to the doc by Microsoft Create Terminal Server aware application, when loading an application with no Terminal Server aware flag, Terminal Server will do extra work(makes loading slower). This behavior is for compatibility with very old applications. Microsoft 's toolchain has made this flag set for every app by default for a long time.

I use a script and MSVC dumpbin util to check every .exe file in git for windows folder, finding git.exe and many bundled applications do not have Terminal Server aware flag set. They are in the list below. (By the way, the little program here #644 is also a good choice to check this flag)

D:\Program Files\Git\git-bash.exe
D:\Program Files\Git\git-cmd.exe
D:\Program Files\Git\bin\bash.exe
D:\Program Files\Git\bin\git.exe
D:\Program Files\Git\bin\sh.exe
D:\Program Files\Git\cmd\git-gui.exe
D:\Program Files\Git\cmd\git-lfs.exe
D:\Program Files\Git\cmd\git.exe
D:\Program Files\Git\cmd\gitk.exe
D:\Program Files\Git\mingw64\bin\acountry.exe
D:\Program Files\Git\mingw64\bin\adig.exe
D:\Program Files\Git\mingw64\bin\ahost.exe
D:\Program Files\Git\mingw64\bin\antiword.exe
D:\Program Files\Git\mingw64\bin\blocked-file-util.exe
D:\Program Files\Git\mingw64\bin\brotli.exe
D:\Program Files\Git\mingw64\bin\bunzip2.exe
D:\Program Files\Git\mingw64\bin\bzcat.exe
D:\Program Files\Git\mingw64\bin\bzip2.exe
D:\Program Files\Git\mingw64\bin\bzip2recover.exe
D:\Program Files\Git\mingw64\bin\connect.exe
D:\Program Files\Git\mingw64\bin\create-shortcut.exe
D:\Program Files\Git\mingw64\bin\curl.exe
D:\Program Files\Git\mingw64\bin\edit_test.exe
D:\Program Files\Git\mingw64\bin\edit_test_dll.exe
D:\Program Files\Git\mingw64\bin\envsubst.exe
D:\Program Files\Git\mingw64\bin\gettext.exe
D:\Program Files\Git\mingw64\bin\git-askpass.exe
D:\Program Files\Git\mingw64\bin\git-askyesno.exe
D:\Program Files\Git\mingw64\bin\git-credential-helper-selector.exe
D:\Program Files\Git\mingw64\bin\git-receive-pack.exe
D:\Program Files\Git\mingw64\bin\git-upload-archive.exe
D:\Program Files\Git\mingw64\bin\git-upload-pack.exe
D:\Program Files\Git\mingw64\bin\git.exe
D:\Program Files\Git\mingw64\bin\lzmadec.exe
D:\Program Files\Git\mingw64\bin\lzmainfo.exe
D:\Program Files\Git\mingw64\bin\odt2txt.exe
D:\Program Files\Git\mingw64\bin\openssl.exe
D:\Program Files\Git\mingw64\bin\p11-kit.exe
D:\Program Files\Git\mingw64\bin\pdftotext.exe
D:\Program Files\Git\mingw64\bin\pkcs1-conv.exe
D:\Program Files\Git\mingw64\bin\proxy-lookup.exe
D:\Program Files\Git\mingw64\bin\sexp-conv.exe
D:\Program Files\Git\mingw64\bin\tclsh.exe
D:\Program Files\Git\mingw64\bin\tclsh86.exe
D:\Program Files\Git\mingw64\bin\trust.exe
D:\Program Files\Git\mingw64\bin\unxz.exe
D:\Program Files\Git\mingw64\bin\WhoUses.exe
D:\Program Files\Git\mingw64\bin\wish.exe
D:\Program Files\Git\mingw64\bin\wish86.exe
D:\Program Files\Git\mingw64\bin\x86_64-w64-mingw32-agrep.exe
D:\Program Files\Git\mingw64\bin\x86_64-w64-mingw32-deflatehd.exe
D:\Program Files\Git\mingw64\bin\x86_64-w64-mingw32-inflatehd.exe
D:\Program Files\Git\mingw64\bin\xmlcatalog.exe
D:\Program Files\Git\mingw64\bin\xmllint.exe
D:\Program Files\Git\mingw64\bin\xmlwf.exe
D:\Program Files\Git\mingw64\bin\xz.exe
D:\Program Files\Git\mingw64\bin\xzcat.exe
D:\Program Files\Git\mingw64\bin\xzdec.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-add.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-am.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-annotate.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-apply.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-archive.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-bisect--helper.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-blame.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-branch.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-bugreport.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-bundle.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-cat-file.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-check-attr.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-check-ignore.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-check-mailmap.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-check-ref-format.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-checkout--worker.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-checkout-index.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-checkout.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-cherry-pick.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-cherry.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-clean.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-clone.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-column.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-commit-graph.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-commit-tree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-commit.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-config.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-count-objects.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-credential-cache--daemon.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-credential-cache.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-credential-store.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-credential-wincred.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-credential.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-daemon.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-describe.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-diff-files.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-diff-index.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-diff-tree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-diff.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-difftool.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-env--helper.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fast-export.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fast-import.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fetch-pack.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fetch.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fmt-merge-msg.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-for-each-ref.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-for-each-repo.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-format-patch.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fsck-objects.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fsck.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-fsmonitor--daemon.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-gc.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-get-tar-commit-id.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-grep.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-hash-object.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-help.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-hook.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-http-backend.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-http-fetch.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-http-push.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-imap-send.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-index-pack.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-init-db.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-init.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-interpret-trailers.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-log.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-ls-files.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-ls-remote.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-ls-tree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-mailinfo.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-mailsplit.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-maintenance.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge-base.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge-file.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge-index.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge-ours.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge-recursive.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge-subtree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge-tree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-merge.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-mktag.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-mktree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-multi-pack-index.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-mv.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-name-rev.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-notes.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-pack-objects.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-pack-redundant.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-pack-refs.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-patch-id.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-prune-packed.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-prune.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-pull.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-push.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-range-diff.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-read-tree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-rebase.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-receive-pack.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-reflog.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-remote-ext.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-remote-fd.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-remote-ftp.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-remote-ftps.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-remote-http.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-remote-https.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-remote.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-repack.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-replace.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-rerere.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-reset.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-restore.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-rev-list.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-rev-parse.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-revert.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-rm.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-send-pack.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-sh-i18n--envsubst.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-shortlog.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-show-branch.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-show-index.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-show-ref.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-show.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-sparse-checkout.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-stage.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-stash.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-status.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-stripspace.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-submodule--helper.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-switch.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-symbolic-ref.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-tag.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-unpack-file.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-unpack-objects.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-update-index.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-update-ref.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-update-server-info.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-upload-archive.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-upload-pack.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-var.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-verify-commit.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-verify-pack.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-verify-tag.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-whatchanged.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-worktree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git-write-tree.exe
D:\Program Files\Git\mingw64\libexec\git-core\git.exe
D:\Program Files\Git\mingw64\libexec\git-core\headless-git.exe
D:\Program Files\Git\mingw64\libexec\p11-kit\p11-kit-remote.exe
D:\Program Files\Git\mingw64\libexec\p11-kit\p11-kit-server.exe
D:\Program Files\Git\mingw64\share\git\compat-bash.exe
D:\Program Files\Git\mingw64\share\git\edit-git-bash.exe
D:\Program Files\Git\mingw64\share\git\git-wrapper.exe
D:\Program Files\Git\usr\bin\cygcheck.exe
D:\Program Files\Git\usr\bin\cygwin-console-helper.exe
D:\Program Files\Git\usr\bin\ldh.exe
D:\Program Files\Git\usr\bin\strace.exe
D:\Program Files\Git\usr\bin\winpty-agent.exe
D:\Program Files\Git\usr\bin\winpty-debugserver.exe
D:\Program Files\Git\usr\libexec\getprocaddr32.exe
D:\Program Files\Git\usr\libexec\getprocaddr64.exe

Some most used applications(git.exe, sh.exe, curl.exe, etc) do not have Terminal Server aware flag set, I think it will improve the performance of git for windows if we can set that flag of those apps.

For a mingw linker like git for windows is using, specifing --tsaware to the linker(-Wl,--tsaware) will get the work done. I have tested this with building aria2, but I havn't tried with git for windows yet.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions