| 1 | Git v1.8.2 Release Notes |
| 2 | ======================== |
| 3 | |
| 4 | Backward compatibility notes (this release) |
| 5 | ------------------------------------------- |
| 6 | |
| 7 | "git push $there tag v1.2.3" used to allow replacing a tag v1.2.3 |
| 8 | that already exists in the repository $there, if the rewritten tag |
| 9 | you are pushing points at a commit that is a descendant of a commit |
| 10 | that the old tag v1.2.3 points at. This was found to be error prone |
| 11 | and starting with this release, any attempt to update an existing |
| 12 | ref under refs/tags/ hierarchy will fail, without "--force". |
| 13 | |
| 14 | When "git add -u" and "git add -A" that does not specify what paths |
| 15 | to add on the command line is run from inside a subdirectory, the |
| 16 | scope of the operation has always been limited to the subdirectory. |
| 17 | Many users found this counter-intuitive, given that "git commit -a" |
| 18 | and other commands operate on the entire tree regardless of where you |
| 19 | are. In this release, these commands give a warning message that |
| 20 | suggests the users to use "git add -u/-A ." when they want to limit |
| 21 | the scope to the current directory; doing so will squelch the message, |
| 22 | while training their fingers. |
| 23 | |
| 24 | |
| 25 | Backward compatibility notes (for Git 2.0) |
| 26 | ------------------------------------------ |
| 27 | |
| 28 | When "git push [$there]" does not say what to push, we have used the |
| 29 | traditional "matching" semantics so far (all your branches were sent |
| 30 | to the remote as long as there already are branches of the same name |
| 31 | over there). In Git 2.0, the default will change to the "simple" |
| 32 | semantics that pushes the current branch to the branch with the same |
| 33 | name, only when the current branch is set to integrate with that |
| 34 | remote branch. There is a user preference configuration variable |
| 35 | "push.default" to change this. If you are an old-timer who is used |
| 36 | to the "matching" semantics, you can set it to "matching" to keep the |
| 37 | traditional behaviour. If you want to live in the future early, |
| 38 | you can set it to "simple" today without waiting for Git 2.0. |
| 39 | |
| 40 | When "git add -u" and "git add -A", that does not specify what paths |
| 41 | to add on the command line is run from inside a subdirectory, these |
| 42 | commands will operate on the entire tree in Git 2.0 for consistency |
| 43 | with "git commit -a" and other commands. Because there will be no |
| 44 | mechanism to make "git add -u" behave as if "git add -u .", it is |
| 45 | important for those who are used to "git add -u" (without pathspec) |
| 46 | updating the index only for paths in the current subdirectory to start |
| 47 | training their fingers to explicitly say "git add -u ." when they mean |
| 48 | it before Git 2.0 comes. |
| 49 | |
| 50 | |
| 51 | Updates since v1.8.1 |
| 52 | -------------------- |
| 53 | |
| 54 | UI, Workflows & Features |
| 55 | |
| 56 | * Initial ports to QNX and z/OS UNIX System Services have started. |
| 57 | |
| 58 | * Output from the tests is coloured using "green is okay, yellow is |
| 59 | questionable, red is bad and blue is informative" scheme. |
| 60 | |
| 61 | * Mention of "GIT/Git/git" in the documentation have been updated to |
| 62 | be more uniform and consistent. The name of the system and the |
| 63 | concept it embodies is "Git"; the command the users type is "git". |
| 64 | All-caps "GIT" was merely a way to imitate "Git" typeset in small |
| 65 | caps in our ASCII text only documentation and to be avoided. |
| 66 | |
| 67 | * The completion script (in contrib/completion) used to let the |
| 68 | default completer to suggest pathnames, which gave too many |
| 69 | irrelevant choices (e.g. "git add" would not want to add an |
| 70 | unmodified path). It learnt to use a more git-aware logic to |
| 71 | enumerate only relevant ones. |
| 72 | |
| 73 | * In bare repositories, "git shortlog" and other commands now read |
| 74 | mailmap files from the tip of the history, to help running these |
| 75 | tools in server settings. |
| 76 | |
| 77 | * Color specifiers, e.g. "%C(blue)Hello%C(reset)", used in the |
| 78 | "--format=" option of "git log" and friends can be disabled when |
| 79 | the output is not sent to a terminal by prefixing them with |
| 80 | "auto,", e.g. "%C(auto,blue)Hello%C(auto,reset)". |
| 81 | |
| 82 | * Scripts can ask Git that wildcard patterns in pathspecs they give do |
| 83 | not have any significance, i.e. take them as literal strings. |
| 84 | |
| 85 | * The patterns in .gitignore and .gitattributes files can have **/, |
| 86 | as a pattern that matches 0 or more levels of subdirectory. |
| 87 | E.g. "foo/**/bar" matches "bar" in "foo" itself or in a |
| 88 | subdirectory of "foo". |
| 89 | |
| 90 | * When giving arguments without "--" disambiguation, object names |
| 91 | that come earlier on the command line must not be interpretable as |
| 92 | pathspecs and pathspecs that come later on the command line must |
| 93 | not be interpretable as object names. This disambiguation rule has |
| 94 | been tweaked so that ":/" (no other string before or after) is |
| 95 | always interpreted as a pathspec; "git cmd -- :/" is no longer |
| 96 | needed, you can just say "git cmd :/". |
| 97 | |
| 98 | * Various "hint" lines Git gives when it asks the user to edit |
| 99 | messages in the editor are commented out with '#' by default. The |
| 100 | core.commentchar configuration variable can be used to customize |
| 101 | this '#' to a different character. |
| 102 | |
| 103 | * "git add -u" and "git add -A" without pathspec issues warning to |
| 104 | make users aware that they are only operating on paths inside the |
| 105 | subdirectory they are in. Use ":/" (everything from the top) or |
| 106 | "." (everything from the $cwd) to disambiguate. |
| 107 | |
| 108 | * "git blame" (and "git diff") learned the "--no-follow" option. |
| 109 | |
| 110 | * "git branch" now rejects some nonsense combinations of command line |
| 111 | arguments (e.g. giving more than one branch name to rename) with |
| 112 | more case-specific error messages. |
| 113 | |
| 114 | * "git check-ignore" command to help debugging .gitignore files has |
| 115 | been added. |
| 116 | |
| 117 | * "git cherry-pick" can be used to replay a root commit to an unborn |
| 118 | branch. |
| 119 | |
| 120 | * "git commit" can be told to use --cleanup=whitespace by setting the |
| 121 | configuration variable commit.cleanup to 'whitespace'. |
| 122 | |
| 123 | * "git diff" and other Porcelain commands can be told to use a |
| 124 | non-standard algorithm by setting diff.algorithm configuration |
| 125 | variable. |
| 126 | |
| 127 | * "git fetch --mirror" and fetch that uses other forms of refspec |
| 128 | with wildcard used to attempt to update a symbolic ref that match |
| 129 | the wildcard on the receiving end, which made little sense (the |
| 130 | real ref that is pointed at by the symbolic ref would be updated |
| 131 | anyway). Symbolic refs no longer are affected by such a fetch. |
| 132 | |
| 133 | * "git format-patch" now detects more cases in which a whole branch |
| 134 | is being exported, and uses the description for the branch, when |
| 135 | asked to write a cover letter for the series. |
| 136 | |
| 137 | * "git format-patch" learned "-v $count" option, and prepends a |
| 138 | string "v$count-" to the names of its output files, and also |
| 139 | automatically sets the subject prefix to "PATCH v$count". This |
| 140 | allows patches from rerolled series to be stored under different |
| 141 | names and makes it easier to reuse cover letter messages. |
| 142 | |
| 143 | * "git log" and friends can be told with --use-mailmap option to |
| 144 | rewrite the names and email addresses of people using the mailmap |
| 145 | mechanism. |
| 146 | |
| 147 | * "git log --cc --graph" now shows the combined diff output with the |
| 148 | ancestry graph. |
| 149 | |
| 150 | * "git log --grep=<pattern>" honors i18n.logoutputencoding to look |
| 151 | for the pattern after fixing the log message to the specified |
| 152 | encoding. |
| 153 | |
| 154 | * "git mergetool" and "git difftool" learned to list the available |
| 155 | tool backends in a more consistent manner. |
| 156 | |
| 157 | * "git mergetool" is aware of TortoiseGitMerge now and uses it over |
| 158 | TortoiseMerge when available. |
| 159 | |
| 160 | * "git push" now requires "-f" to update a tag, even if it is a |
| 161 | fast-forward, as tags are meant to be fixed points. |
| 162 | |
| 163 | * Error messages from "git push" when it stops to prevent remote refs |
| 164 | from getting overwritten by mistake have been improved to explain |
| 165 | various situations separately. |
| 166 | |
| 167 | * "git push" will stop without doing anything if the new "pre-push" |
| 168 | hook exists and exits with a failure. |
| 169 | |
| 170 | * When "git rebase" fails to generate patches to be applied (e.g. due |
| 171 | to oom), it failed to detect the failure and instead behaved as if |
| 172 | there were nothing to do. A workaround to use a temporary file has |
| 173 | been applied, but we probably would want to revisit this later, as |
| 174 | it hurts the common case of not failing at all. |
| 175 | |
| 176 | * Input and preconditions to "git reset" has been loosened where |
| 177 | appropriate. "git reset $fromtree Makefile" requires $fromtree to |
| 178 | be any tree (it used to require it to be a commit), for example. |
| 179 | "git reset" (without options or parameters) used to error out when |
| 180 | you do not have any commits in your history, but it now gives you |
| 181 | an empty index (to match non-existent commit you are not even on). |
| 182 | |
| 183 | * "git status" says what branch is being bisected or rebased when |
| 184 | able, not just "bisecting" or "rebasing". |
| 185 | |
| 186 | * "git submodule" started learning a new mode to integrate with the |
| 187 | tip of the remote branch (as opposed to integrating with the commit |
| 188 | recorded in the superproject's gitlink). |
| 189 | |
| 190 | * "git upload-pack" which implements the service "ls-remote" and |
| 191 | "fetch" talk to can be told to hide ref hierarchies the server |
| 192 | side internally uses (and that clients have no business learning |
| 193 | about) with transfer.hiderefs configuration. |
| 194 | |
| 195 | |
| 196 | Foreign Interface |
| 197 | |
| 198 | * "git fast-export" has been updated for its use in the context of |
| 199 | the remote helper interface. |
| 200 | |
| 201 | * A new remote helper to interact with bzr has been added to contrib/. |
| 202 | |
| 203 | * "git p4" got various bugfixes around its branch handling. It is |
| 204 | also made usable with Python 2.4/2.5. In addition, its various |
| 205 | portability issues for Cygwin have been addressed. |
| 206 | |
| 207 | * The remote helper to interact with Hg in contrib/ has seen a few |
| 208 | fixes. |
| 209 | |
| 210 | |
| 211 | Performance, Internal Implementation, etc. |
| 212 | |
| 213 | * "git fsck" has been taught to be pickier about entries in tree |
| 214 | objects that should not be there, e.g. ".", ".git", and "..". |
| 215 | |
| 216 | * Matching paths with common forms of pathspecs that contain wildcard |
| 217 | characters has been optimized further. |
| 218 | |
| 219 | * We stopped paying attention to $GIT_CONFIG environment that points |
| 220 | at a single configuration file from any command other than "git config" |
| 221 | quite a while ago, but "git clone" internally set, exported, and |
| 222 | then unexported the variable during its operation unnecessarily. |
| 223 | |
| 224 | * "git reset" internals has been reworked and should be faster in |
| 225 | general. We tried to be careful not to break any behaviour but |
| 226 | there could be corner cases, especially when running the command |
| 227 | from a conflicted state, that we may have missed. |
| 228 | |
| 229 | * The implementation of "imap-send" has been updated to reuse xml |
| 230 | quoting code from http-push codepath, and lost a lot of unused |
| 231 | code. |
| 232 | |
| 233 | * There is a simple-minded checker for the test scripts in t/ |
| 234 | directory to catch most common mistakes (it is not enabled by |
| 235 | default). |
| 236 | |
| 237 | * You can build with USE_WILDMATCH=YesPlease to use a replacement |
| 238 | implementation of pattern matching logic used for pathname-like |
| 239 | things, e.g. refnames and paths in the repository. This new |
| 240 | implementation is not expected change the existing behaviour of Git |
| 241 | in this release, except for "git for-each-ref" where you can now |
| 242 | say "refs/**/master" and match with both refs/heads/master and |
| 243 | refs/remotes/origin/master. We plan to use this new implementation |
| 244 | in wider places (e.g. "git ls-files '**/Makefile' may find Makefile |
| 245 | at the top-level, and "git log '**/t*.sh'" may find commits that |
| 246 | touch a shell script whose name begins with "t" at any level) in |
| 247 | future versions of Git, but we are not there yet. By building with |
| 248 | USE_WILDMATCH, using the resulting Git daily and reporting when you |
| 249 | find breakages, you can help us get closer to that goal. |
| 250 | |
| 251 | * Some reimplementations of Git do not write all the stat info back |
| 252 | to the index due to their implementation limitations (e.g. jgit). |
| 253 | A configuration option can tell Git to ignore changes to most of |
| 254 | the stat fields and only pay attention to mtime and size, which |
| 255 | these implementations can reliably update. This can be used to |
| 256 | avoid excessive revalidation of contents. |
| 257 | |
| 258 | * Some platforms ship with old version of expat where xmlparse.h |
| 259 | needs to be included instead of expat.h; the build procedure has |
| 260 | been taught about this. |
| 261 | |
| 262 | * "make clean" on platforms that cannot compute header dependencies |
| 263 | on the fly did not work with implementations of "rm" that do not |
| 264 | like an empty argument list. |
| 265 | |
| 266 | Also contains minor documentation updates and code clean-ups. |
| 267 | |
| 268 | |
| 269 | Fixes since v1.8.1 |
| 270 | ------------------ |
| 271 | |
| 272 | Unless otherwise noted, all the fixes since v1.8.1 in the maintenance |
| 273 | track are contained in this release (see release notes to them for |
| 274 | details). |
| 275 | |
| 276 | * An element on GIT_CEILING_DIRECTORIES list that does not name the |
| 277 | real path to a directory (i.e. a symbolic link) could have caused |
| 278 | the GIT_DIR discovery logic to escape the ceiling. |
| 279 | |
| 280 | * When attempting to read the XDG-style $HOME/.config/git/config and |
| 281 | finding that $HOME/.config/git is a file, we gave a wrong error |
| 282 | message, instead of treating the case as "a custom config file does |
| 283 | not exist there" and moving on. |
| 284 | |
| 285 | * The behaviour visible to the end users was confusing, when they |
| 286 | attempt to kill a process spawned in the editor that was in turn |
| 287 | launched by Git with SIGINT (or SIGQUIT), as Git would catch that |
| 288 | signal and die. We ignore these signals now. |
| 289 | (merge 0398fc34 pf/editor-ignore-sigint later to maint). |
| 290 | |
| 291 | * A child process that was killed by a signal (e.g. SIGINT) was |
| 292 | reported in an inconsistent way depending on how the process was |
| 293 | spawned by us, with or without a shell in between. |
| 294 | |
| 295 | * After failing to create a temporary file using mkstemp(), failing |
| 296 | pathname was not reported correctly on some platforms. |
| 297 | |
| 298 | * We used to stuff "user@" and then append what we read from |
| 299 | /etc/mailname to come up with a default e-mail ident, but a bug |
| 300 | lost the "user@" part. |
| 301 | |
| 302 | * The attribute mechanism didn't allow limiting attributes to be |
| 303 | applied to only a single directory itself with "path/" like the |
| 304 | exclude mechanism does. The initial implementation of this that |
| 305 | was merged to 'maint' and 1.8.1.2 was with a severe performance |
| 306 | degradations and needs to merge a fix-up topic. |
| 307 | |
| 308 | * The smart HTTP clients forgot to verify the content-type that comes |
| 309 | back from the server side to make sure that the request is being |
| 310 | handled properly. |
| 311 | |
| 312 | * "git am" did not parse datestamp correctly from Hg generated patch, |
| 313 | when it is run in a locale outside C (or en). |
| 314 | |
| 315 | * "git apply" misbehaved when fixing whitespace breakages by removing |
| 316 | excess trailing blank lines. |
| 317 | |
| 318 | * "git apply --summary" has been taught to make sure the similarity |
| 319 | value shown in its output is sensible, even when the input had a |
| 320 | bogus value. |
| 321 | |
| 322 | * A tar archive created by "git archive" recorded a directory in a |
| 323 | way that made NetBSD's implementation of "tar" sometimes unhappy. |
| 324 | |
| 325 | * "git archive" did not record uncompressed size in the header when |
| 326 | streaming a zip archive, which confused some implementations of unzip. |
| 327 | |
| 328 | * "git archive" did not parse configuration values in tar.* namespace |
| 329 | correctly. |
| 330 | (merge b3873c3 jk/config-parsing-cleanup later to maint). |
| 331 | |
| 332 | * Attempt to "branch --edit-description" an existing branch, while |
| 333 | being on a detached HEAD, errored out. |
| 334 | |
| 335 | * "git clean" showed what it was going to do, but sometimes end up |
| 336 | finding that it was not allowed to do so, which resulted in a |
| 337 | confusing output (e.g. after saying that it will remove an |
| 338 | untracked directory, it found an embedded git repository there |
| 339 | which it is not allowed to remove). It now performs the actions |
| 340 | and then reports the outcome more faithfully. |
| 341 | |
| 342 | * When "git clone --separate-git-dir=$over_there" is interrupted, it |
| 343 | failed to remove the real location of the $GIT_DIR it created. |
| 344 | This was most visible when interrupting a submodule update. |
| 345 | |
| 346 | * "git cvsimport" mishandled timestamps at DST boundary. |
| 347 | |
| 348 | * We used to have an arbitrary 32 limit for combined diff input, |
| 349 | resulting in incorrect number of leading colons shown when showing |
| 350 | the "--raw --cc" output. |
| 351 | |
| 352 | * "git fetch --depth" was broken in at least three ways. The |
| 353 | resulting history was deeper than specified by one commit, it was |
| 354 | unclear how to wipe the shallowness of the repository with the |
| 355 | command, and documentation was misleading. |
| 356 | (merge cfb70e1 nd/fetch-depth-is-broken later to maint). |
| 357 | |
| 358 | * "git log --all -p" that walked refs/notes/textconv/ ref can later |
| 359 | try to use the textconv data incorrectly after it gets freed. |
| 360 | |
| 361 | * We forgot to close the file descriptor reading from "gpg" output, |
| 362 | killing "git log --show-signature" on a long history. |
| 363 | |
| 364 | * The way "git svn" asked for password using SSH_ASKPASS and |
| 365 | GIT_ASKPASS was not in line with the rest of the system. |
| 366 | |
| 367 | * The --graph code fell into infinite loop when asked to do what the |
| 368 | code did not expect. |
| 369 | |
| 370 | * http transport was wrong to ask for the username when the |
| 371 | authentication is done by certificate identity. |
| 372 | |
| 373 | * "git pack-refs" that ran in parallel to another process that |
| 374 | created new refs had a nasty race. |
| 375 | |
| 376 | * Rebasing the history of superproject with change in the submodule |
| 377 | has been broken since v1.7.12. |
| 378 | |
| 379 | * After "git add -N" and then writing a tree object out of the |
| 380 | index, the cache-tree data structure got corrupted. |
| 381 | |
| 382 | * "git clone" used to allow --bare and --separate-git-dir=$there |
| 383 | options at the same time, which was nonsensical. |
| 384 | |
| 385 | * "git rebase --preserve-merges" lost empty merges in recent versions |
| 386 | of Git. |
| 387 | |
| 388 | * "git merge --no-edit" computed who were involved in the work done |
| 389 | on the side branch, even though that information is to be discarded |
| 390 | without getting seen in the editor. |
| 391 | |
| 392 | * "git merge" started calling prepare-commit-msg hook like "git |
| 393 | commit" does some time ago, but forgot to pay attention to the exit |
| 394 | status of the hook. |
| 395 | |
| 396 | * A failure to push due to non-ff while on an unborn branch |
| 397 | dereferenced a NULL pointer when showing an error message. |
| 398 | |
| 399 | * When users spell "cc:" in lowercase in the fake "header" in the |
| 400 | trailer part, "git send-email" failed to pick up the addresses from |
| 401 | there. As e-mail headers field names are case insensitive, this |
| 402 | script should follow suit and treat "cc:" and "Cc:" the same way. |
| 403 | |
| 404 | * Output from "git status --ignored" showed an unexpected interaction |
| 405 | with "--untracked". |
| 406 | |
| 407 | * "gitweb", when sorting by age to show repositories with new |
| 408 | activities first, used to sort repositories with absolutely |
| 409 | nothing in it early, which was not very useful. |
| 410 | |
| 411 | * "gitweb"'s code to sanitize control characters before passing it to |
| 412 | "highlight" filter lost known-to-be-safe control characters by |
| 413 | mistake. |
| 414 | |
| 415 | * "gitweb" pages served over HTTPS, when configured to show picon or |
| 416 | gravatar, referred to these external resources to be fetched via |
| 417 | HTTP, resulting in mixed contents warning in browsers. |
| 418 | |
| 419 | * When a line to be wrapped has a solid run of non space characters |
| 420 | whose length exactly is the wrap width, "git shortlog -w" failed |
| 421 | to add a newline after such a line. |
| 422 | |
| 423 | * Command line completion leaked an unnecessary error message while |
| 424 | looking for possible matches with paths in <tree-ish>. |
| 425 | |
| 426 | * Command line completion for "tcsh" emitted an unwanted space |
| 427 | after completing a single directory name. |
| 428 | |
| 429 | * Command line completion code was inadvertently made incompatible with |
| 430 | older versions of bash by using a newer array notation. |
| 431 | |
| 432 | * "git push" was taught to refuse updating the branch that is |
| 433 | currently checked out long time ago, but the user manual was left |
| 434 | stale. |
| 435 | (merge 50995ed wk/man-deny-current-branch-is-default-these-days later to maint). |
| 436 | |
| 437 | * Some shells do not behave correctly when IFS is unset; work it |
| 438 | around by explicitly setting it to the default value. |
| 439 | |
| 440 | * Some scripted programs written in Python did not get updated when |
| 441 | PYTHON_PATH changed. |
| 442 | (cherry-pick 96a4647fca54031974cd6ad1 later to maint). |
| 443 | |
| 444 | * When autoconf is used, any build on a different commit always ran |
| 445 | "config.status --recheck" even when unnecessary. |
| 446 | |
| 447 | * A fix was added to the build procedure to work around buggy |
| 448 | versions of ccache broke the auto-generation of dependencies, which |
| 449 | unfortunately is still relevant because some people use ancient |
| 450 | distros. |
| 451 | |
| 452 | * The autoconf subsystem passed --mandir down to generated |
| 453 | config.mak.autogen but forgot to do the same for --htmldir. |
| 454 | (merge 55d9bf0 ct/autoconf-htmldir later to maint). |
| 455 | |
| 456 | * A change made on v1.8.1.x maintenance track had a nasty regression |
| 457 | to break the build when autoconf is used. |
| 458 | (merge 7f1b697 jn/less-reconfigure later to maint). |
| 459 | |
| 460 | * We have been carrying a translated and long-unmaintained copy of an |
| 461 | old version of the tutorial; removed. |
| 462 | |
| 463 | * t0050 had tests expecting failures from a bug that was fixed some |
| 464 | time ago. |
| 465 | |
| 466 | * t4014, t9502 and t0200 tests had various portability issues that |
| 467 | broke on OpenBSD. |
| 468 | |
| 469 | * t9020 and t3600 tests had various portability issues. |
| 470 | |
| 471 | * t9200 runs "cvs init" on a directory that already exists, but a |
| 472 | platform can configure this fail for the current user (e.g. you |
| 473 | need to be in the cvsadmin group on NetBSD 6.0). |
| 474 | |
| 475 | * t9020 and t9810 had a few non-portable shell script construct. |
| 476 | |
| 477 | * Scripts to test bash completion was inherently flaky as it was |
| 478 | affected by whatever random things the user may have on $PATH. |
| 479 | |
| 480 | * An element on GIT_CEILING_DIRECTORIES could be a "logical" pathname |
| 481 | that uses a symbolic link to point at somewhere else (e.g. /home/me |
| 482 | that points at /net/host/export/home/me, and the latter directory |
| 483 | is automounted). Earlier when Git saw such a pathname e.g. /home/me |
| 484 | on this environment variable, the "ceiling" mechanism did not take |
| 485 | effect. With this release (the fix has also been merged to the |
| 486 | v1.8.1.x maintenance series), elements on GIT_CEILING_DIRECTORIES |
| 487 | are by default checked for such aliasing coming from symbolic |
| 488 | links. As this needs to actually resolve symbolic links for each |
| 489 | element on the GIT_CEILING_DIRECTORIES, you can disable this |
| 490 | mechanism for some elements by listing them after an empty element |
| 491 | on the GIT_CEILING_DIRECTORIES. e.g. Setting /home/me::/home/him to |
| 492 | GIT_CEILING_DIRECTORIES makes Git resolve symbolic links in |
| 493 | /home/me when checking if the current directory is under /home/me, |
| 494 | but does not do so for /home/him. |
| 495 | (merge 7ec30aa mh/maint-ceil-absolute later to maint). |