Skip to content

Windows/diff endpoints v07#7

Open
jonmathews-ensoft wants to merge 2 commits into
windows/mainfrom
windows/diff-endpoints_v07
Open

Windows/diff endpoints v07#7
jonmathews-ensoft wants to merge 2 commits into
windows/mainfrom
windows/diff-endpoints_v07

Conversation

@jonmathews-ensoft
Copy link
Copy Markdown
Owner

No description provided.

Jon Mathews added 2 commits May 7, 2026 09:45
Git diff is about comparing two endpoints. Pass endpoints as determined
by diff argument parsing to external tools via environment variables.

External tools receive a path and the contents to compare in temporary
files. Tools are unable to display the commits being compared, nor the
paths if one was renamed. A common scenario is a GUI client invoking
an external tool via difftool. The GUI client knows the selected
commits, but few if any clients pass that information to the external
tool. Git receives the commits to compare, and is in a position to share
the endpoints with the external tool.

External tools should be able to display endpoints that enable users to
locate the content being compared, ideally in terms of commit objects
and paths.

Address this problem by exporting the following variables:

GIT_DIFF_ENDPOINT_A
GIT_DIFF_ENDPOINT_B
GIT_DIFF_PATH_A
GIT_DIFF_PATH_B

The ENDPOINT_* variables are the endpoints as determined by the
builtin diff argument parsing. Ideally the values are object ids for
commits, but will degrade to tree objects if the arguments are trees.

A PATH_* variable is the path of the contents in the corresponding
endpoint. For clarity, both variables are set even if the paths are the
same. When a blob is added or deleted, the other path is /dev/null.

If --relative is specified, the paths are relative.

Out of scope:

 - diffs vs the index, working tree, or no-index: these could be handled
   in the future by indicating the endpoint is 'index', 'working-tree'
   or 'no-index'.

 - merge-commits: the current approach does not consider how to handle
   more than two endpoints. Environment variables will not be set.

 - GIT_EXTERNAL_DIFF does not support --submodule=diff, and therefore
   is not considered at this time.

 - difftool --dir-diff invokes the external tool on two directories.
   This is achieved by invoking diff to find the differences.
   This prevents environment variables from being passed back to
   difftool.
Git for Windows v2.54.0

Changes since Git for Windows v2.53.0(3) (April 14th 2026)

Due to persistent maintenance challenges, git svn is no longer included
in Git for Windows. Users who still need this command are highly
encouraged to use a Linux version of git svn via the Windows Subsystem
for Linux instead, or switch to a regular MSYS2 setup: install MSYS2,
then run the following command in the MSYS2 UCRT64 Bash: pacman -Sy
mingw-w64-ucrt-x86_64-git-svn. After that, the git svn command will be
available in that Bash. On Windows/ARM64, you will want to use the
CLANGARM64 variant instead (and install
mingw-w64-clang-aarch64-git-svn).

New Features

  * Comes with Git v2.54.0.
  * Comes with Bash v5.3.9.
  * Comes with Git Credential Manager v2.7.3.
  * Comes with MinTTY v3.8.2.
  * The shell aliases in Git Bash that ensured that interpreters such
    as Python and Node.JS are executed via winpty are no longer
    necessary, and have therefore been dropped.
  * Comes with the MSYS2 runtime (Git for Windows flavor) based on
    Cygwin v3.6.7.
  * Comes with cURL v8.19.0.
  * Comes with OpenSSH v10.3.P1.
  * Comes with OpenSSL v3.5.6.

Bug Fixes

  * The iconv executable, which was inadvertently dropped from Git for
    Windows v2.53.0's installer, is now included again.
  * In some circumstances, when typing while a still-running program is
    about to terminate, the typed characters could arrive out of order
    in Git Bash. This bug was fixed.
  * Similar to how git clean already avoids traversing NTFS junctions,
    git worktree remove now does the same.
  * The number of CPU cores is now detected correctly on multi-socket
    systems.
  * When fetching/pushing via Secure Channel (the default TLS/SSL
    method), the timeout to renegotiate (e.g. using client
    certificates) was recently reduced to 7 seconds, which was too
    short. It has been extended to 60 seconds.
  * The recent security bug fix that disables NTLM by default missed
    the NTLM fallback in the Kerberos protocol. This fallback is now
    disabled, following the cURL project's guidance.
  * A really old bug which prevented Kerberos authentication from
    working with the default http.emptyAuth ("auto"), was fixed.
  * The git instaweb command is no longer distributed with Git for
    Windows because it would require GitWeb (which has not been
    distributed with Git for Windows for quite a few years).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant