| 1 | Git 2.7 Release Notes |
| 2 | ===================== |
| 3 | |
| 4 | Updates since v2.6 |
| 5 | ------------------ |
| 6 | |
| 7 | UI, Workflows & Features |
| 8 | |
| 9 | * The appearance of "gitk", particularly on high DPI monitors, have |
| 10 | been improved. "gitk" also comes with an undated translation for |
| 11 | Swedish and Japanese. |
| 12 | |
| 13 | * "git remote" learned "get-url" subcommand to show the URL for a |
| 14 | given remote name used for fetching and pushing. |
| 15 | |
| 16 | * There was no way to defeat a configured rebase.autostash variable |
| 17 | from the command line, as "git rebase --no-autostash" was missing. |
| 18 | |
| 19 | * "git log --date=local" used to only show the normal (default) |
| 20 | format in the local timezone. The command learned to take 'local' |
| 21 | as an instruction to use the local timezone with other formats, |
| 22 | |
| 23 | * The refs used during a "git bisect" session is now per-worktree so |
| 24 | that independent bisect sessions can be done in different worktrees |
| 25 | created with "git worktree add". |
| 26 | |
| 27 | * Users who are too busy to type three extra keystrokes to ask for |
| 28 | "git stash show -p" can now set stash.showPatch configuration |
| 29 | variable to true to always see the actual patch, not just the list |
| 30 | of paths affected with feel for the extent of damage via diffstat. |
| 31 | |
| 32 | * "quiltimport" allows to specify the series file by honoring the |
| 33 | $QUILT_SERIES environment and also --series command line option. |
| 34 | |
| 35 | * The use of 'good/bad' in "git bisect" made it confusing to use when |
| 36 | hunting for a state change that is not a regression (e.g. bugfix). |
| 37 | The command learned 'old/new' and then allows the end user to |
| 38 | say e.g. "bisect start --term-old=fast --term-new=slow" to find a |
| 39 | performance regression. |
| 40 | |
| 41 | * "git interpret-trailers" can now run outside of a Git repository. |
| 42 | |
| 43 | * "git p4" learned to re-encode the pathname it uses to communicate |
| 44 | with the p4 depot with a new option. |
| 45 | |
| 46 | * Give progress meter to "git filter-branch". |
| 47 | |
| 48 | * Allow a later "!/abc/def" to override an earlier "/abc" that |
| 49 | appears in the same .gitignore file to make it easier to express |
| 50 | "everything in /abc directory is ignored, except for ...". |
| 51 | |
| 52 | * Teach "git p4" to send large blobs outside the repository by |
| 53 | talking to Git LFS. |
| 54 | |
| 55 | * Prepare for Git on-disk repository representation to undergo |
| 56 | backward incompatible changes by introducing a new repository |
| 57 | format version "1", with an extension mechanism. |
| 58 | |
| 59 | * "git worktree" learned a "list" subcommand. |
| 60 | |
| 61 | * "git clone --dissociate" learned that it can be used even when |
| 62 | "--reference" was not used at the same time. |
| 63 | |
| 64 | * "git blame" learnt to take "--first-parent" and "--reverse" at the |
| 65 | same time when it makes sense. |
| 66 | |
| 67 | * "git checkout" did not follow the usual "--[no-]progress" |
| 68 | convention and implemented only "--quiet" that is essentially |
| 69 | a superset of "--no-progress". Extend the command to support the |
| 70 | usual "--[no-]progress". |
| 71 | |
| 72 | * The semantics of transfer.hideRefs configuration variable have been |
| 73 | extended to work better with the ref "namespace" feature that lets |
| 74 | you throw unrelated bunches of repositories in a single physical |
| 75 | repository and virtually serve them as separate ones. |
| 76 | |
| 77 | * send-email config variables whose values are pathnames now go |
| 78 | through the ~username/ expansion. |
| 79 | |
| 80 | * bash completion learnt to TAB-complete recipient addresses given |
| 81 | to send-email. |
| 82 | |
| 83 | * The credential-cache daemon can be told to ignore SIGHUP to work |
| 84 | around issue when running Git from inside emacs. |
| 85 | |
| 86 | * "git push" learned new configuration for doing "--recurse-submodules" |
| 87 | on each push. |
| 88 | |
| 89 | * "format-patch" has learned a new option to zero-out the commit |
| 90 | object name on the mbox "From " line. |
| 91 | |
| 92 | |
| 93 | Performance, Internal Implementation, Development Support etc. |
| 94 | |
| 95 | * The infrastructure to rewrite "git submodule" in C is being built |
| 96 | incrementally. Let's polish these early parts well enough and make |
| 97 | them graduate to 'next' and 'master', so that the more involved |
| 98 | follow-up can start cooking on a solid ground. |
| 99 | |
| 100 | * Some features from "git tag -l" and "git branch -l" have been made |
| 101 | available to "git for-each-ref" so that eventually the unified |
| 102 | implementation can be shared across all three. The version merged |
| 103 | to the 'master' branch earlier had a performance regression in "tag |
| 104 | --contains", which has since been corrected. |
| 105 | |
| 106 | * Because "test_when_finished" in our test framework queues the |
| 107 | clean-up tasks to be done in a shell variable, it should not be |
| 108 | used inside a subshell. Add a mechanism to allow 'bash' to catch |
| 109 | such uses, and fix the ones that were found. |
| 110 | |
| 111 | * The debugging infrastructure for pkt-line based communication has |
| 112 | been improved to mark the side-band communication specifically. |
| 113 | |
| 114 | * Update "git branch" that list existing branches, using the |
| 115 | ref-filter API that is shared with "git tag" and "git |
| 116 | for-each-ref". |
| 117 | |
| 118 | * The test for various line-ending conversions has been enhanced. |
| 119 | |
| 120 | * A few test scripts around "git p4" have been improved for |
| 121 | portability. |
| 122 | |
| 123 | * Many allocations that is manually counted (correctly) that are |
| 124 | followed by strcpy/sprintf have been replaced with a less error |
| 125 | prone constructs such as xstrfmt. |
| 126 | |
| 127 | * The internal stripspace() function has been moved to where it |
| 128 | logically belongs to, i.e. strbuf API, and the command line parser |
| 129 | of "git stripspace" has been updated to use the parse_options API. |
| 130 | |
| 131 | * "git am" used to spawn "git mailinfo" via run_command() API once |
| 132 | per each patch, but learned to make a direct call to mailinfo() |
| 133 | instead. |
| 134 | |
| 135 | * The implementation of "git mailinfo" was refactored so that a |
| 136 | mailinfo() function can be directly called from inside a process. |
| 137 | |
| 138 | * With a "debug" helper, debugging of a single "git" invocation in |
| 139 | our test scripts has become a lot easier. |
| 140 | |
| 141 | * The "configure" script did not test for -lpthread correctly, which |
| 142 | upset some linkers. |
| 143 | |
| 144 | * Cross completed task off of subtree project's todo list. |
| 145 | |
| 146 | * Test cleanups for the subtree project. |
| 147 | |
| 148 | * Clean up style in an ancient test t9300. |
| 149 | |
| 150 | * Work around some test flakiness with p4d. |
| 151 | |
| 152 | * Fsck did not correctly detect a NUL-truncated header in a tag. |
| 153 | |
| 154 | * Use a safer behavior when we hit errors verifying remote certificates. |
| 155 | |
| 156 | * Speed up filter-branch for cases where we only care about rewriting |
| 157 | commits, not tree data. |
| 158 | |
| 159 | * The parse-options API has been updated to make "-h" command line |
| 160 | option work more consistently in all commands. |
| 161 | |
| 162 | * "git svn rebase/mkdirs" got optimized by keeping track of empty |
| 163 | directories better. |
| 164 | |
| 165 | * Fix some racy client/server tests by treating SIGPIPE the same as a |
| 166 | normal non-zero exit. |
| 167 | |
| 168 | * The necessary infrastructure to build topics using the free Travis |
| 169 | CI has been added. Developers forking from this topic (and enabling |
| 170 | Travis) can do their own builds, and we can turn on auto-builds for |
| 171 | git/git (including build-status for pull requests that people |
| 172 | open). |
| 173 | |
| 174 | * The write(2) emulation for Windows learned to set errno to EPIPE |
| 175 | when necessary. |
| 176 | |
| 177 | |
| 178 | Also contains various documentation updates and code clean-ups. |
| 179 | |
| 180 | |
| 181 | Fixes since v2.6 |
| 182 | ---------------- |
| 183 | |
| 184 | Unless otherwise noted, all the fixes since v2.6 in the maintenance |
| 185 | track are contained in this release (see the maintenance releases' |
| 186 | notes for details). |
| 187 | |
| 188 | * Very small number of options take a parameter that is optional |
| 189 | (which is not a great UI element as they can only appear at the end |
| 190 | of the command line). Add notice to documentation of each and |
| 191 | every one of them. |
| 192 | |
| 193 | * "git blame --first-parent v1.0..v2.0" was not rejected but did not |
| 194 | limit the blame to commits on the first parent chain. |
| 195 | |
| 196 | * "git subtree" (in contrib/) now can take whitespaces in the |
| 197 | pathnames, not only in the in-tree pathname but the name of the |
| 198 | directory that the repository is in. |
| 199 | |
| 200 | * The ssh transport, just like any other transport over the network, |
| 201 | did not clear GIT_* environment variables, but it is possible to |
| 202 | use SendEnv and AcceptEnv to leak them to the remote invocation of |
| 203 | Git, which is not a good idea at all. Explicitly clear them just |
| 204 | like we do for the local transport. |
| 205 | |
| 206 | * Correct "git p4 --detect-labels" so that it does not fail to create |
| 207 | a tag that points at a commit that is also being imported. |
| 208 | |
| 209 | * The Makefile always runs the library archiver with hardcoded "crs" |
| 210 | options, which was inconvenient for exotic platforms on which |
| 211 | people want to use programs with totally different set of command |
| 212 | line options. |
| 213 | |
| 214 | * Customization to change the behaviour with "make -w" and "make -s" |
| 215 | in our Makefile was broken when they were used together. |
| 216 | |
| 217 | * Allocation related functions and stdio are unsafe things to call |
| 218 | inside a signal handler, and indeed killing the pager can cause |
| 219 | glibc to deadlock waiting on allocation mutex as our signal handler |
| 220 | tries to free() some data structures in wait_for_pager(). Reduce |
| 221 | these unsafe calls. |
| 222 | |
| 223 | * The way how --ref/--notes to specify the notes tree reference are |
| 224 | DWIMmed was not clearly documented. |
| 225 | |
| 226 | * "git gc" used to barf when a symbolic ref has gone dangling |
| 227 | (e.g. the branch that used to be your upstream's default when you |
| 228 | cloned from it is now gone, and you did "fetch --prune"). |
| 229 | |
| 230 | * "git clone --dissociate" runs a big "git repack" process at the |
| 231 | end, and it helps to close file descriptors that are open on the |
| 232 | packs and their idx files before doing so on filesystems that |
| 233 | cannot remove a file that is still open. |
| 234 | |
| 235 | * Description of the "log.follow" configuration variable in "git log" |
| 236 | documentation is now also copied to "git config" documentation. |
| 237 | |
| 238 | * "git rebase -i" had a minor regression recently, which stopped |
| 239 | considering a line that begins with an indented '#' in its insn |
| 240 | sheet not a comment. Further, the code was still too picky on |
| 241 | Windows where CRLF left by the editor is turned into a trailing CR |
| 242 | on the line read via the "read" built-in command of bash. Both of |
| 243 | these issues are now fixed. |
| 244 | |
| 245 | * After "git checkout --detach", "git status" reported a fairly |
| 246 | useless "HEAD detached at HEAD", instead of saying at which exact |
| 247 | commit. |
| 248 | |
| 249 | * When "git send-email" wanted to talk over Net::SMTP::SSL, |
| 250 | Net::Cmd::datasend() did not like to be fed too many bytes at the |
| 251 | same time and failed to send messages. Send the payload one line |
| 252 | at a time to work around the problem. |
| 253 | |
| 254 | * When "git am" was rewritten as a built-in, it stopped paying |
| 255 | attention to user.signingkey, which was fixed. |
| 256 | |
| 257 | * It was not possible to use a repository-lookalike created by "git |
| 258 | worktree add" as a local source of "git clone". |
| 259 | |
| 260 | * On a case insensitive filesystems, setting GIT_WORK_TREE variable |
| 261 | using a random cases that does not agree with what the filesystem |
| 262 | thinks confused Git that it wasn't inside the working tree. |
| 263 | |
| 264 | * Performance-measurement tests did not work without an installed Git. |
| 265 | |
| 266 | * A test script for the HTTP service had a timing dependent bug, |
| 267 | which was fixed. |
| 268 | |
| 269 | * There were some classes of errors that "git fsck" diagnosed to its |
| 270 | standard error that did not cause it to exit with non-zero status. |
| 271 | |
| 272 | * Work around "git p4" failing when the P4 depot records the contents |
| 273 | in UTF-16 without UTF-16 BOM. |
| 274 | |
| 275 | * When "git gc --auto" is backgrounded, its diagnosis message is |
| 276 | lost. Save it to a file in $GIT_DIR and show it next time the "gc |
| 277 | --auto" is run. |
| 278 | |
| 279 | * The submodule code has been taught to work better with separate |
| 280 | work trees created via "git worktree add". |
| 281 | |
| 282 | * "git gc" is safe to run anytime only because it has the built-in |
| 283 | grace period to protect young objects. In order to run with no |
| 284 | grace period, the user must make sure that the repository is |
| 285 | quiescent. |
| 286 | |
| 287 | * A recent "filter-branch --msg-filter" broke skipping of the commit |
| 288 | object header, which is fixed. |
| 289 | |
| 290 | * The normalize_ceiling_entry() function does not muck with the end |
| 291 | of the path it accepts, and the real world callers do rely on that, |
| 292 | but a test insisted that the function drops a trailing slash. |
| 293 | |
| 294 | * A test for interaction between untracked cache and sparse checkout |
| 295 | added in Git 2.5 days were flaky. |
| 296 | |
| 297 | * A couple of commands still showed "[options]" in their usage string |
| 298 | to note where options should come on their command line, but we |
| 299 | spell that "[<options>]" in most places these days. |
| 300 | |
| 301 | * The synopsis text and the usage string of subcommands that read |
| 302 | list of things from the standard input are often shown as if they |
| 303 | only take input from a file on a filesystem, which was misleading. |
| 304 | |
| 305 | * "git am -3" had a small regression where it is aborted in its error |
| 306 | handling codepath when underlying merge-recursive failed in certain |
| 307 | ways, as it assumed that the internal call to merge-recursive will |
| 308 | never die, which is not the case (yet). |
| 309 | |
| 310 | * The linkage order of libraries was wrong in places around libcurl. |
| 311 | |
| 312 | * The name-hash subsystem that is used to cope with case insensitive |
| 313 | filesystems keeps track of directories and their on-filesystem |
| 314 | cases for all the paths in the index by holding a pointer to a |
| 315 | randomly chosen cache entry that is inside the directory (for its |
| 316 | ce->ce_name component). This pointer was not updated even when the |
| 317 | cache entry was removed from the index, leading to use after free. |
| 318 | This was fixed by recording the path for each directory instead of |
| 319 | borrowing cache entries and restructuring the API somewhat. |
| 320 | |
| 321 | * "git merge-file" tried to signal how many conflicts it found, which |
| 322 | obviously would not work well when there are too many of them. |
| 323 | |
| 324 | * The error message from "git blame --contents --reverse" incorrectly |
| 325 | talked about "--contents --children". |
| 326 | |
| 327 | * "git imap-send" did not compile well with older version of cURL library. |
| 328 | |
| 329 | * Merging a branch that removes a path and another that changes the |
| 330 | mode bits on the same path should have conflicted at the path, but |
| 331 | it didn't and silently favoured the removal. |
| 332 | |
| 333 | * "git --literal-pathspecs add -u/-A" without any command line |
| 334 | argument misbehaved ever since Git 2.0. |
| 335 | |
| 336 | * "git daemon" uses "run_command()" without "finish_command()", so it |
| 337 | needs to release resources itself, which it forgot to do. |
| 338 | |
| 339 | * "git status --branch --short" accessed beyond the constant string |
| 340 | "HEAD", which has been corrected. |
| 341 | |
| 342 | * We peek objects from submodule's object store by linking it to the |
| 343 | list of alternate object databases, but the code to do so forgot to |
| 344 | correctly initialize the list. |
| 345 | |
| 346 | * The code to prepare the working tree side of temporary directory |
| 347 | for the "dir-diff" feature forgot that symbolic links need not be |
| 348 | copied (or symlinked) to the temporary area, as the code already |
| 349 | special cases and overwrites them. Besides, it was wrong to try |
| 350 | computing the object name of the target of symbolic link, which may |
| 351 | not even exist or may be a directory. |
| 352 | |
| 353 | * A Range: request can be responded with a full response and when |
| 354 | asked properly libcurl knows how to strip the result down to the |
| 355 | requested range. However, we were hand-crafting a range request |
| 356 | and it did not kick in. |
| 357 | |
| 358 | * Having a leftover .idx file without corresponding .pack file in |
| 359 | the repository hurts performance; "git gc" learned to prune them. |
| 360 | |
| 361 | * Apple's common crypto implementation of SHA1_Update() does not take |
| 362 | more than 4GB at a time, and we now have a compile-time workaround |
| 363 | for it. |
| 364 | |
| 365 | * Produce correct "dirty" marker for shell prompts, even when we |
| 366 | are on an orphan or an unborn branch. |
| 367 | |
| 368 | * A build without NO_IPv6 used to use gethostbyname() when guessing |
| 369 | user's hostname, instead of getaddrinfo() that is used in other |
| 370 | codepaths in such a build. |
| 371 | |
| 372 | * The exit code of git-fsck did not reflect some types of errors |
| 373 | found in packed objects, which has been corrected. |
| 374 | |
| 375 | * The helper used to iterate over loose object directories to prune |
| 376 | stale objects did not closedir() immediately when it is done with a |
| 377 | directory--a callback such as the one used for "git prune" may want |
| 378 | to do rmdir(), but it would fail on open directory on platforms |
| 379 | such as WinXP. |
| 380 | |
| 381 | * "git p4" used to import Perforce CLs that touch only paths outside |
| 382 | the client spec as empty commits. It has been corrected to ignore |
| 383 | them instead, with a new configuration git-p4.keepEmptyCommits as a |
| 384 | backward compatibility knob. |
| 385 | |
| 386 | * The completion script (in contrib/) used to list "git column" |
| 387 | (which is not an end-user facing command) as one of the choices |
| 388 | (merge 160fcdb sg/completion-no-column later to maint). |
| 389 | |
| 390 | * The error reporting from "git send-email", when SMTP TLS fails, has |
| 391 | been improved. |
| 392 | (merge 9d60524 jk/send-email-ssl-errors later to maint). |
| 393 | |
| 394 | * When getpwuid() on the system returned NULL (e.g. the user is not |
| 395 | in the /etc/passwd file or other uid-to-name mappings), the |
| 396 | codepath to find who the user is to record it in the reflog barfed |
| 397 | and died. Loosen the check in this codepath, which already accepts |
| 398 | questionable ident string (e.g. host part of the e-mail address is |
| 399 | obviously bogus), and in general when we operate fmt_ident() function |
| 400 | in non-strict mode. |
| 401 | (merge 92bcbb9 jk/ident-loosen-getpwuid later to maint). |
| 402 | |
| 403 | * "git symbolic-ref" forgot to report a failure with its exit status. |
| 404 | (merge f91b273 jk/symbolic-ref-maint later to maint). |
| 405 | |
| 406 | * History traversal with "git log --source" that starts with an |
| 407 | annotated tag failed to report the tag as "source", due to an |
| 408 | old regression in the command line parser back in v2.2 days. |
| 409 | (merge 728350b jk/pending-keep-tag-name later to maint). |
| 410 | |
| 411 | * "git p4" when interacting with multiple depots at the same time |
| 412 | used to incorrectly drop changes. |
| 413 | |
| 414 | * Code clean-up, minor fixes etc. |