1GIT v1.5.1 Release Notes 2======================== 3 4Updates since v1.5.0 5-------------------- 6 7* Deprecated commands and options. 8 9 - git-diff-stages and git-resolve have been removed. 10 11* New commands and options. 12 13 - "git log" and friends take --reverse, which instructs them 14 to give their output in the order opposite from their usual. 15 They typically output from new to old, but with this option 16 their output would read from old to new. "git shortlog" 17 usually lists older commits first, but with this option, 18 they are shown from new to old. 19 20 - "git log --pretty=format:<string>" to allow more flexible 21 custom log output. 22 23 - "git diff" learned --ignore-space-at-eol. This is a weaker 24 form of --ignore-space-change. 25 26 - "git diff --no-index pathA pathB" can be used as diff 27 replacement with git specific enhancements. 28 29 - "git diff --no-index" can read from '-' (standard input). 30 31 - "git diff" also learned --exit-code to exit with non-zero 32 status when it found differences. In the future we might 33 want to make this the default but that would be a rather big 34 backward incompatible change; it will stay as an option for 35 now. 36 37 - "git diff --quiet" is --exit-code with output turned off, 38 meant for scripted use to quickly determine if there is any 39 tree-level difference. 40 41 - Textual patch generation with "git diff" without -w/-b 42 option has been significantly optimized. "git blame" got 43 faster because of the same change. 44 45 - "git log" and "git rev-list" has been optimized 46 significantly when they are used with pathspecs. 47 48 - "git branch --track" can be used to set up configuration 49 variables to help it easier to base your work on branches 50 you track from a remote site. 51 52 - "git format-patch --attach" now emits attachments. Use 53 --inline to get an inlined multipart/mixed. 54 55 - "git name-rev" learned --refs=<pattern>, to limit the tags 56 used for naming the given revisions only to the ones 57 matching the given pattern. 58 59 - "git remote update" is to run "git fetch" for defined remotes 60 to update tracking branches. 61 62 - "git cvsimport" can now take '-d' to talk with a CVS 63 repository different from what are recorded in CVS/Root 64 (overriding it with environment CVSROOT does not work). 65 66 - "git bundle" can help sneaker-netting your changes between 67 repositories. 68 69 - "git mergetool" can help 3-way file-level conflict 70 resolution with your favorite graphical merge tools. 71 72 - A new configuration "core.symlinks" can be used to disable 73 symlinks on filesystems that do not support them; they are 74 checked out as regular files instead. 75 76 - You can name a commit object with its first line of the 77 message. The syntax to use is ':/message text'. E.g. 78 79 $ git show ":/object name: introduce ':/<oneline prefix>' notation" 80 81 means the same thing as: 82 83 $ git show 28a4d940443806412effa246ecc7768a21553ec7 84 85 - "git bisect" learned a new command "run" that takes a script 86 to run after each revision is checked out to determine if it 87 is good or bad, to automate the bisection process. 88 89 - "git log" family learned a new traversal option --first-parent, 90 which does what the name suggests. 91 92 93* Updated behavior of existing commands. 94 95 - "git-merge-recursive" used to barf when there are more than 96 one common ancestors for the merge, and merging them had a 97 rename/rename conflict. This has been fixed. 98 99 - "git fsck" does not barf on corrupt loose objects. 100 101 - "git rm" does not remove newly added files without -f. 102 103 - "git archimport" allows remapping when coming up with git 104 branch names from arch names. 105 106 - git-svn got almost a rewrite. 107 108 - core.autocrlf configuration, when set to 'true', makes git 109 to convert CRLF at the end of lines in text files to LF when 110 reading from the filesystem, and convert in reverse when 111 writing to the filesystem. The variable can be set to 112 'input', in which case the conversion happens only while 113 reading from the filesystem but files are written out with 114 LF at the end of lines. Currently, which paths to consider 115 'text' (i.e. be subjected to the autocrlf mechanism) is 116 decided purely based on the contents, but the plan is to 117 allow users to explicitly override this heuristic based on 118 paths. 119 120 - The behavior of 'git-apply', when run in a subdirectory, 121 without --index nor --cached were inconsistent with that of 122 the command with these options. This was fixed to match the 123 behavior with --index. A patch that is meant to be applied 124 with -p1 from the toplevel of the project tree can be 125 applied with any custom -p<n> option. A patch that is not 126 relative to the toplevel needs to be applied with -p<n> 127 option with or without --index (or --cached). 128 129 - "git diff" outputs a trailing HT when pathnames have embedded 130 SP on +++/--- header lines, in order to help "GNU patch" to 131 parse its output. "git apply" was already updated to accept 132 this modified output format since ce74618d (Sep 22, 2006). 133 134 - "git cvsserver" runs hooks/update and honors its exit status. 135 136 - "git cvsserver" can be told to send everything with -kb. 137 138 - "git diff --check" also honors the --color output option. 139 140 - "git name-rev" used to stress the fact that a ref is a tag too 141 much, by saying something like "v1.2.3^0~22". It now says 142 "v1.2.3~22" in such a case (it still says "v1.2.3^0" if it does 143 not talk about an ancestor of the commit that is tagged, which 144 makes sense). 145 146 - "git rev-list --boundary" now shows boundary markers for the 147 commits omitted by --max-age and --max-count condition. 148 149 - The configuration mechanism now reads $(prefix)/etc/gitconfig. 150 151 - "git apply --verbose" shows what preimage lines were wanted 152 when it couldn't find them. 153 154 - "git status" in a read-only repository got a bit saner. 155 156 - "git fetch" (hence "git clone" and "git pull") are less 157 noisy when the output does not go to tty. 158 159 - "git fetch" between repositories with many refs were slow 160 even when there are not many changes that needed 161 transferring. This has been sped up by partially rewriting 162 the heaviest parts in C. 163 164 - "git mailinfo" which splits an e-mail into a patch and the 165 meta-information was rewritten, thanks to Don Zickus. It 166 handles nested multipart better. The command was broken for 167 a brief period on 'master' branch since 1.5.0 but the 168 breakage is fixed now. 169 170 - send-email learned configurable bcc and chain-reply-to. 171 172 - "git remote show $remote" also talks about branches that 173 would be pushed if you run "git push remote". 174 175 - Using objects from packs is now seriously optimized by clever 176 use of a cache. This should be most noticeable in git-log 177 family of commands that involve reading many tree objects. 178 In addition, traversing revisions while filtering changes 179 with pathspecs is made faster by terminating the comparison 180 between the trees as early as possible. 181 182 183* Hooks 184 185 - The part to send out notification e-mails was removed from 186 the sample update hook, as it was not an appropriate place 187 to do so. The proper place to do this is the new post-receive 188 hook. An example hook has been added to contrib/hooks/. 189 190 191* Others 192 193 - git-revert, git-gc and git-cherry-pick are now built-ins. 194 195Fixes since v1.5.0 196------------------ 197 198These are all in v1.5.0.x series. 199 200* Documentation updates 201 202 - Clarifications and corrections to 1.5.0 release notes. 203 204 - The main documentation did not link to git-remote documentation. 205 206 - Clarified introductory text of git-rebase documentation. 207 208 - Converted remaining mentions of update-index on Porcelain 209 documents to git-add/git-rm. 210 211 - Some i18n.* configuration variables were incorrectly 212 described as core.*; fixed. 213 214 - added and clarified core.bare, core.legacyheaders configurations. 215 216 - updated "git-clone --depth" documentation. 217 218 - user-manual updates. 219 220 - Options to 'git remote add' were described insufficiently. 221 222 - Configuration format.suffix was not documented. 223 224 - Other formatting and spelling fixes. 225 226 - user-manual has better cross references. 227 228 - gitweb installation/deployment procedure is now documented. 229 230 231* Bugfixes 232 233 - git-upload-pack closes unused pipe ends; earlier this caused 234 many zombies to hang around. 235 236 - git-rerere was recording the contents of earlier hunks 237 duplicated in later hunks. This prevented resolving the same 238 conflict when performing the same merge the other way around. 239 240 - git-add and git-update-index on a filesystem on which 241 executable bits are unreliable incorrectly reused st_mode 242 bits even when the path changed between symlink and regular 243 file. 244 245 - git-daemon marks the listening sockets with FD_CLOEXEC so 246 that it won't be leaked into the children. 247 248 - segfault from git-blame when the mandatory pathname 249 parameter was missing was fixed; usage() message is given 250 instead. 251 252 - git-rev-list did not read $GIT_DIR/config file, which means 253 that did not honor i18n.logoutputencoding correctly. 254 255 - Automated merge conflict handling when changes to symbolic 256 links conflicted were completely broken. The merge-resolve 257 strategy created a regular file with conflict markers in it 258 in place of the symbolic link. The default strategy, 259 merge-recursive was even more broken. It removed the path 260 that was pointed at by the symbolic link. Both of these 261 problems have been fixed. 262 263 - 'git diff maint master next' did not correctly give combined 264 diff across three trees. 265 266 - 'git fast-import' portability fix for Solaris. 267 268 - 'git show-ref --verify' without arguments did not error out 269 but segfaulted. 270 271 - 'git diff :tracked-file `pwd`/an-untracked-file' gave an extra 272 slashes after a/ and b/. 273 274 - 'git format-patch' produced too long filenames if the commit 275 message had too long line at the beginning. 276 277 - Running 'make all' and then without changing anything 278 running 'make install' still rebuilt some files. This 279 was inconvenient when building as yourself and then 280 installing as root (especially problematic when the source 281 directory is on NFS and root is mapped to nobody). 282 283 - 'git-rerere' failed to deal with two unconflicted paths that 284 sorted next to each other. 285 286 - 'git-rerere' attempted to open(2) a symlink and failed if 287 there was a conflict. Since a conflicting change to a 288 symlink would not benefit from rerere anyway, the command 289 now ignores conflicting changes to symlinks. 290 291 - 'git-repack' did not like to pass more than 64 arguments 292 internally to underlying 'rev-list' logic, which made it 293 impossible to repack after accumulating many (small) packs 294 in the repository. 295 296 - 'git-diff' to review the combined diff during a conflicted 297 merge were not reading the working tree version correctly 298 when changes to a symbolic link conflicted. It should have 299 read the data using readlink(2) but read from the regular 300 file the symbolic link pointed at. 301 302 - 'git-remote' did not like period in a remote's name. 303 304 - 'git.el' honors the commit coding system from the configuration. 305 306 - 'blameview' in contrib/ correctly digs deeper when a line is 307 clicked. 308 309 - 'http-push' correctly makes sure the remote side has leading 310 path. Earlier it started in the middle of the path, and 311 incorrectly. 312 313 - 'git-merge' did not exit with non-zero status when the 314 working tree was dirty and cannot fast forward. It does 315 now. 316 317 - 'cvsexportcommit' does not lose yet-to-be-used message file. 318 319 - int-vs-size_t typefix when running combined diff on files 320 over 2GB long. 321 322 - 'git apply --whitespace=strip' should not touch unmodified 323 lines. 324 325 - 'git-mailinfo' choke when a logical header line was too long. 326 327 - 'git show A..B' did not error out. Negative ref ("not A" in 328 this example) does not make sense for the purpose of the 329 command, so now it errors out. 330 331 - 'git fmt-merge-msg --file' without file parameter did not 332 correctly error out. 333 334 - 'git archimport' barfed upon encountering a commit without 335 summary. 336 337 - 'git index-pack' did not protect itself from getting a short 338 read out of pread(2). 339 340 - 'git http-push' had a few buffer overruns. 341 342 - Build dependency fixes to rebuild fetch.o when other headers 343 change. 344 345 - git.el does not add duplicate sign-off lines. 346 347 - git-commit shows the full stat of the resulting commit, not 348 just about the files in the current directory, when run from 349 a subdirectory. 350 351 - "git-checkout -m '@{8 hours ago}'" had a funny failure from 352 eval; fixed. 353 354 - git-merge (hence git-pull) did not refuse fast-forwarding 355 when the working tree had local changes that would have 356 conflicted with it. 357 358 - a handful small fixes to gitweb. 359 360 - build procedure for user-manual is fixed not to require locally 361 installed stylesheets. 362 363 - "git commit $paths" on paths whose earlier contents were 364 already updated in the index were failing out. 365 366 367* Tweaks 368 369 - sliding mmap() inefficiently mmaped the same region of a 370 packfile with an access pattern that used objects in the 371 reverse order. This has been made more efficient.