1Git v2.9.4 Release Notes 2======================== 3 4Fixes since v2.9.3 5------------------ 6 7 * There are certain house-keeping tasks that need to be performed at 8 the very beginning of any Git program, and programs that are not 9 built-in commands had to do them exactly the same way as "git" 10 potty does. It was easy to make mistakes in one-off standalone 11 programs (like test helpers). A common "main()" function that 12 calls cmd_main() of individual program has been introduced to 13 make it harder to make mistakes. 14 15 * "git merge" with renormalization did not work well with 16 merge-recursive, due to "safer crlf" conversion kicking in when it 17 shouldn't. 18 19 * The reflog output format is documented better, and a new format 20 --date=unix to report the seconds-since-epoch (without timezone) 21 has been added. 22 23 * "git push --force-with-lease" already had enough logic to allow 24 ensuring that such a push results in creation of a ref (i.e. the 25 receiving end did not have another push from sideways that would be 26 discarded by our force-pushing), but didn't expose this possibility 27 to the users. It does so now. 28 29 * "import-tars" fast-import script (in contrib/) used to ignore a 30 hardlink target and replaced it with an empty file, which has been 31 corrected to record the same blob as the other file the hardlink is 32 shared with. 33 34 * "git mv dir non-existing-dir/" did not work in some environments 35 the same way as existing mainstream platforms. The code now moves 36 "dir" to "non-existing-dir", without relying on rename("A", "B/") 37 that strips the trailing slash of '/'. 38 39 * The "t/" hierarchy is prone to get an unusual pathname; "make test" 40 has been taught to make sure they do not contain paths that cannot 41 be checked out on Windows (and the mechanism can be reusable to 42 catch pathnames that are not portable to other platforms as need 43 arises). 44 45 * When "git merge-recursive" works on history with many criss-cross 46 merges in "verbose" mode, the names the command assigns to the 47 virtual merge bases could have overwritten each other by unintended 48 reuse of the same piece of memory. 49 50 * "git checkout --detach <branch>" used to give the same advice 51 message as that is issued when "git checkout <tag>" (or anything 52 that is not a branch name) is given, but asking with "--detach" is 53 an explicit enough sign that the user knows what is going on. The 54 advice message has been squelched in this case. 55 56 * "git difftool" by default ignores the error exit from the backend 57 commands it spawns, because often they signal that they found 58 differences by exiting with a non-zero status code just like "diff" 59 does; the exit status codes 126 and above however are special in 60 that they are used to signal that the command is not executable, 61 does not exist, or killed by a signal. "git difftool" has been 62 taught to notice these exit status codes. 63 64 * On Windows, help.browser configuration variable used to be ignored, 65 which has been corrected. 66 67 * The "git -c var[=val] cmd" facility to append a configuration 68 variable definition at the end of the search order was described in 69 git(1) manual page, but not in git-config(1), which was more likely 70 place for people to look for when they ask "can I make a one-shot 71 override, and if so how?" 72 73 * The tempfile (hence its user lockfile) API lets the caller to open 74 a file descriptor to a temporary file, write into it and then 75 finalize it by first closing the filehandle and then either 76 removing or renaming the temporary file. When the process spawns a 77 subprocess after obtaining the file descriptor, and if the 78 subprocess has not exited when the attempt to remove or rename is 79 made, the last step fails on Windows, because the subprocess has 80 the file descriptor still open. Open tempfile with O_CLOEXEC flag 81 to avoid this (on Windows, this is mapped to O_NOINHERIT). 82 83Also contains minor documentation updates and code clean-ups.