I Use This!
Very High Activity

News

Analyzed 2 days ago. based on code collected 2 days ago.
Posted 5 days ago by Junio C Hamano
A release candidate Git v2.18.0-rc2 is now available for testing at the usual places. It is comprised of 852 non-merge commits since v2.17.0, contributed by 65 people, 20 of which are new faces. The tarballs are found at: ... [More] https://www.kernel.org/pub/software/scm/git/testing/ The following public repositories all have a copy of the 'v2.18.0-rc2' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = https://github.com/gitster/git New contributors whose contributions weren't in v2.17.0 are as follows. Welcome to the Git development community! Bill Ritcher, Birger Skogeng Pedersen, Casey Fitzpatrick, Dan Jacques, Drew DeVault, Eckhard S. Maaß, Erik E Brady, Florian Gamböck, Harald Nordgren, Leif Middelschulte, Loganaden Velvindron, Luis Marsano, Paul-Sebastian Ungureanu, Pedro Alvarez Piedehierro, Pratik Karki, Ryan Dammrose, Takuto Ikuta, Tao Qingyun, Wink Saville, and Yuki Kokubun. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Anders Kaseorg, Andreas Heiduk, Antonio Ospite, Beat Bolli, Ben Peart, Brandon Williams, brian m. carlson, Christian Couder, Christian Hesse, Clemens Buchacher, David Turner, Derrick Stolee, Elijah Newren, Eric Sunshine, Jameson Miller, Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kaartic Sivaraam, Lars Schneider, Lucas Werkmeister, Luke Diamand, Martin Ågren, Michal Nazarewicz, Michele Locati, Nguyễn Thái Ngọc Duy, Olga Telezhnaya, Orgad Shaneh, Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe, Robert P. J. Day, Sergey Organov, Stefan Agner, Stefan Beller, SZEDER Gábor, Taylor Blau, Thomas Gummerer, Todd Zullinger, and Torsten Bögershausen. ---------------------------------------------------------------- Git 2.18 Release Notes (draft) ============================== Updates since v2.17 ------------------- UI, Workflows & Features * Rename detection logic that is used in "merge" and "cherry-pick" has learned to guess when all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is likely that x/d added in the meantime would also want to move to z/d by taking the hint that the entire directory 'x' moved to 'z'. A bug causing dirty files involved in a rename to be overwritten during merge has also been fixed as part of this work. Incidentally, this also avoids updating a file in the working tree after a (non-trivial) merge whose result matches what our side originally had. * "git filter-branch" learned to use a different exit code to allow the callers to tell the case where there was no new commits to rewrite from other error cases. * When built with more recent cURL, GIT_SSL_VERSION can now specify "tlsv1.3" as its value. * "git gui" learned that "~/.ssh/id_ecdsa.pub" and "~/.ssh/id_ed25519.pub" are also possible SSH key files. (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint). * "git gui" performs commit upon CTRL/CMD+ENTER but the CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the same key binding. It now does. (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint). * "git gui" has been taught to work with old versions of tk (like 8.5.7) that do not support "ttk::style theme use" as a way to query the current theme. (merge 4891961105 cb/git-gui-ttk-style later to maint). * "git rebase" has learned to honor "--signoff" option when using backends other than "am" (but not "--preserve-merges"). * "git branch --list" during an interrupted "rebase -i" now lets users distinguish the case where a detached HEAD is being rebased and a normal branch is being rebased. * "git mergetools" learned talking to guiffy. * The scripts in contrib/emacs/ have outlived their usefulness and have been replaced with a stub that errors out and tells the user there are replacements. * The new "working-tree-encoding" attribute can ask Git to convert the contents to the specified encoding when checking out to the working tree (and the other way around when checking in). * The "git config" command uses separate options e.g. "--int", "--bool", etc. to specify what type the caller wants the value to be interpreted as. A new "--type=" option has been introduced, which would make it cleaner to define new types. * "git config --get" learned the "--default" option, to help the calling script. Building on top of the above changes, the "git config" learns "--type=color" type. Taken together, you can do things like "git config --get foo.color --default blue" and get the ANSI color sequence for the color given to foo.color variable, or "blue" if the variable does not exist. * "git ls-remote" learned an option to allow sorting its output based on the refnames being shown. * The command line completion (in contrib/) has been taught that "git stash save" has been deprecated ("git stash push" is the preferred spelling in the new world) and does not offer it as a possible completion candidate when "git stash push" can be. * "git gc --prune=nonsense" spent long time repacking and then silently failed when underlying "git prune --expire=nonsense" failed to parse its command line. This has been corrected. * Error messages from "git push" can be painted for more visibility. * "git http-fetch" (deprecated) had an optional and experimental "feature" to fetch only commits and/or trees, which nobody used. This has been removed. * The functionality of "$GIT_DIR/info/grafts" has been superseded by the "refs/replace/" mechanism for some time now, but the internal code had support for it in many places, which has been cleaned up in order to drop support of the "grafts" mechanism. * "git worktree add" learned to check out an existing branch. * "git --no-pager cmd" did not have short-and-sweet single letter option. Now it does as "-P". (merge 7213c28818 js/no-pager-shorthand later to maint). * "git rebase" learned "--rebase-merges" to transplant the whole topology of commit graph elsewhere. * "git status" learned to pay attention to UI related diff configuration variables such as diff.renames. * The command line completion mechanism (in contrib/) learned to load custom completion file for "git $command" where $command is a custom "git-$command" that the end user has on the $PATH when using newer version of bash. * "git send-email" can sometimes offer confirmation dialog "Send this email?" with choices 'Yes', 'No', 'Quit', and 'All'. A new action 'Edit' has been added to this dialog's choice. * With merge.renames configuration set to false, the recursive merge strategy can be told not to spend cycles trying to find renamed paths and merge them accordingly. * "git status" learned to honor a new status.renames configuration to skip rename detection, which could be useful for those who want to do so without disabling the default rename detection done by the "git diff" command. * Command line completion (in contrib/) learned to complete pathnames for various commands better. * "git blame" learns to unhighlight uninteresting metadata from the originating commit on lines that are the same as the previous one, and also paint lines in different colors depending on the age of the commit. * Transfer protocol v2 learned to support the partial clone. * When a short hexadecimal string is used to name an object but there are multiple objects that share the string as the prefix of their names, the code lists these ambiguous candidates in a help message. These object names are now sorted according to their types for easier eyeballing. * "git fetch $there $refspec" that talks over protocol v2 can take advantage of server-side ref filtering; the code has been extended so that this mechanism triggers also when fetching with configured refspec. * Our HTTP client code used to advertise that we accept gzip encoding from the other side; instead, just let cURL library to advertise and negotiate the best one. * "git p4" learned to "unshelve" shelved commit from P4. (merge 123f631761 ld/p4-unshelve later to maint). Performance, Internal Implementation, Development Support etc. * A "git fetch" from a repository with insane number of refs into a repository that is already up-to-date still wasted too many cycles making many lstat(2) calls to see if these objects at the tips exist as loose objects locally. These lstat(2) calls are optimized away by enumerating all loose objects beforehand. It is unknown if the new strategy negatively affects existing use cases, fetching into a repository with many loose objects from a repository with small number of refs. * Git can be built to use either v1 or v2 of the PCRE library, and so far, the build-time configuration USE_LIBPCRE=YesPlease instructed the build procedure to use v1, but now it means v2. USE_LIBPCRE1 and USE_LIBPCRE2 can be used to explicitly choose which version to use, as before. * The build procedure learned to optionally use symbolic links (instead of hardlinks and copies) to install "git-foo" for built-in commands, whose binaries are all identical. * Conversion from uchar[20] to struct object_id continues. * The way "git worktree prune" worked internally has been simplified, by assuming how "git worktree move" moves an existing worktree to a different place. * Code clean-up for the "repository" abstraction. (merge 00a3da2a13 nd/remove-ignore-env-field later to maint). * Code to find the length to uniquely abbreviate object names based on packfile content, which is a relatively recent addtion, has been optimized to use the same fan-out table. * The mechanism to use parse-options API to automate the command line completion continues to get extended and polished. * Copies of old scripted Porcelain commands in contrib/examples/ have been removed. * Some tests that rely on the exact hardcoded values of object names have been updated in preparation for hash function migration. * Perf-test update. * Test helper update. * The effort continues to refactor the internal global data structure to make it possible to open multiple repositories, work with and then close them, * Small test-helper programs have been consolidated into a single binary. * API clean-up around ref-filter code. * Shell completion (in contrib) that gives list of paths have been optimized somewhat. * The index file is updated to record the fsmonitor section after a full scan was made, to avoid wasting the effort that has already spent. * Performance measuring framework in t/perf learned to help bisecting performance regressions. * Some multi-word source filenames are being renamed to separate words with dashes instead of underscores. * An reusable "memory pool" implementation has been extracted from fast-import.c, which in turn has become the first user of the mem-pool API. * A build-time option has been added to allow Git to be told to refer to its associated files relative to the main binary, in the same way that has been possible on Windows for quite some time, for Linux, BSDs and Darwin. * Precompute and store information necessary for ancestry traversal in a separate file to optimize graph walking. * The effort to pass the repository in-core structure throughout the API continues. This round deals with the code that implements the refs/replace/ mechanism. * The build procedure "make DEVELOPER=YesPlease" learned to enable a bit more warning options depending on the compiler used to help developers more. There also is "make DEVOPTS=tokens" knob available now, for those who want to help fixing warnings we usually ignore, for example. * A new version of the transport protocol is being worked on. * The code to interface to GPG has been restructured somewhat to make it cleaner to integrate with other types of signature systems later. * The code has been taught to use the duplicated information stored in the commit-graph file to learn the tree object name for a commit to avoid opening and parsing the commit object when it makes sense to do so. * "git gc" in a large repository takes a lot of time as it considers to repack all objects into one pack by default. The command has been taught to pretend as if the largest existing packfile is marked with ".keep" so that it is left untouched while objects in other packs and loose ones are repacked. * The transport protocol v2 is getting updated further. * The codepath around object-info API has been taught to take the repository object (which in turn tells the API which object store the objects are to be located). * "git pack-objects" needs to allocate tons of "struct object_entry" while doing its work, and shrinking its size helps the performance quite a bit. * The implementation of "git rebase -i --root" has been updated to use the sequencer machinery more. * Developer support update, by using BUG() macro instead of die() to mark codepaths that should not happen more clearly. * Developer support. Use newer GCC on one of the builds done at TravisCI.org to get more warnings and errors diagnosed. * Conversion from uchar[20] to struct object_id continues. * By code restructuring of submodule merge in merge-recursive, informational messages from the codepath are now given using the same mechanism as other output, and honor the merge.verbosity configuration. The code also learned to give a few new messages when a submodule three-way merge resolves cleanly when one side records a descendant of the commit chosen by the other side. * Avoid unchecked snprintf() to make future code auditing easier. (merge ac4896f007 jk/snprintf-truncation later to maint). * Many tests hardcode the raw object names, which would change once we migrate away from SHA-1. While some of them must test against exact object names, most of them do not have to use hardcoded constants in the test. The latter kind of tests have been updated to test the moral equivalent of the original without hardcoding the actual object names. * The list of commands with their various attributes were spread across a few places in the build procedure, but it now is getting a bit more consolidated to allow more automation. * Quite a many tests assumed that newly created refs are made as loose refs using the files backend, which have been updated to use proper plumbing like rev-parse and update-ref, to avoid breakage once we start using different ref backends. Also contains various documentation updates and code clean-ups. Fixes since v2.17 ----------------- * "git shortlog cruft" aborted with a BUG message when run outside a Git repository. The command has been taught to complain about extra and unwanted arguments on its command line instead in such a case. (merge 4aa0161e83 ma/shortlog-revparse later to maint). * "git stash push -u -- " gave an unnecessary and confusing error message when there was no tracked files that match the , which has been fixed. (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint). * "git tag --contains no-such-commit" gave a full list of options after giving an error message. (merge 3bb0923f06 ps/contains-id-error-message later to maint). * "diff-highlight" filter (in contrib/) learned to undertand "git log --graph" output better. (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint). * when refs that do not point at committish are given, "git filter-branch" gave a misleading error messages. This has been corrected. (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint). * "git submodule status" misbehaved on a submodule that has been removed from the working tree. (merge 74b6bda32f rs/status-with-removed-submodule later to maint). * When credential helper exits very quickly without reading its input, it used to cause Git to die with SIGPIPE, which has been fixed. (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint). * "git rebase --keep-empty" still removed an empty commit if the other side contained an empty commit (due to the "does an equivalent patch exist already?" check), which has been corrected. (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint). * Some codepaths, including the refs API, get and keep relative paths, that go out of sync when the process does chdir(2). The chdir-notify API is introduced to let these codepaths adjust these cached paths to the new current directory. (merge fb9c2d2703 jk/relative-directory-fix later to maint). * "cd sub/dir && git commit ../path" ought to record the changes to the file "sub/path", but this regressed long time ago. (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint). * Recent introduction of "--log-destination" option to "git daemon" did not work well when the daemon was run under "--inetd" mode. (merge e67d906d73 lw/daemon-log-destination later to maint). * Small fix to the autoconf build procedure. (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint). * Fix an unexploitable (because the oversized contents are not under attacker's control) buffer overflow. (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint). * Recent simplification of build procedure forgot a bit of tweak to the build procedure of contrib/mw-to-git/ (merge d8698987f3 ab/simplify-perl-makefile later to maint). * Moving a submodule that itself has submodule in it with "git mv" forgot to make necessary adjustment to the nested sub-submodules; now the codepath learned to recurse into the submodules. * "git config --unset a.b", when "a.b" is the last variable in an otherwise empty section "a", left an empty section "a" behind, and worse yet, a subsequent "git config a.c value" did not reuse that empty shell and instead created a new one. These have been (partially) corrected. (merge c71d8bb38a js/empty-config-section-fix later to maint). * "git worktree remove" learned that "-f" is a shorthand for "--force" option, just like for "git worktree add". (merge d228eea514 sb/worktree-remove-opt-force later to maint). * The completion script (in contrib/) learned to clear cached list of command line options upon dot-sourcing it again in a more efficient way. (merge 94408dc71c sg/completion-clear-cached later to maint). * "git svn" had a minor thinko/typo which has been fixed. (merge 51db271587 ab/git-svn-get-record-typofix later to maint). * During a "rebase -i" session, the code could give older timestamp to commits created by later "pick" than an earlier "reword", which has been corrected. (merge 12f7babd6b js/ident-date-fix later to maint). * "git submodule status" did not check the symbolic revision name it computed for the submodule HEAD is not the NULL, and threw it at printf routines, which has been corrected. (merge 0b5e2ea7cf nd/submodule-status-fix later to maint). * When fed input that already has In-Reply-To: and/or References: headers and told to add the same information, "git send-email" added these headers separately, instead of appending to an existing one, which is a violation of the RFC. This has been corrected. (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint). * "git fast-export" had a regression in v2.15.0 era where it skipped some merge commits in certain cases, which has been corrected. (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint). * The code did not propagate the terminal width to subprocesses via COLUMNS environment variable, which it now does. This caused trouble to "git column" helper subprocess when "git tag --column=row" tried to list the existing tags on a display with non-default width. (merge b5d5a567fb nd/term-columns later to maint). * We learned that our source files with ".pl" and ".py" extensions are Perl and Python files respectively and changes to them are better viewed as such with appropriate diff drivers. (merge 7818b619e2 ab/perl-python-attrs later to maint). * "git rebase -i" sometimes left intermediate "# This is a combination of N commits" message meant for the human consumption inside an editor in the final result in certain corner cases, which has been fixed. (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint). * A test to see if the filesystem normalizes UTF-8 filename has been updated to check what we need to know in a more direct way, i.e. a path created in NFC form can be accessed with NFD form (or vice versa) to cope with APFS as well as HFS. (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint). * "git format-patch --cover --attach" created a broken MIME multipart message for the cover letter, which has been fixed by keeping the cover letter as plain text file. (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint). * The split-index feature had a long-standing and dormant bug in certain use of the in-core merge machinery, which has been fixed. (merge 7db118303a en/unpack-trees-split-index-fix later to maint). * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not render illustration in a literal block correctly when indented with HT by default. The problem is fixed by forcing 8-space tabs. (merge 379805051d bc/asciidoctor-tab-width later to maint). * Code clean-up to adjust to a more recent lockfile API convention that allows lockfile instances kept on the stack. (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint). * the_repository->index is not a allocated piece of memory but repo_clear() indiscriminately attempted to free(3) it, which has been corrected. (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint). * Code clean-up to avoid non-standard-conformant pointer arithmetic. (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint). * Code clean-up to turn history traversal more robust in a semi-corrupt repository. (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint). * "git update-ref A B" is supposed to ensure that ref A does not yet exist when B is a NULL OID, but this check was not done correctly for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD. * "git submodule update" and "git submodule add" supported the "--reference" option to borrow objects from a neighbouring local repository like "git clone" does, but lacked the more recent invention "--dissociate". Also "git submodule add" has been taught to take the "--progress" option. (merge a0ef29341a cf/submodule-progress-dissociate later to maint). * Update credential-netrc helper (in contrib/) to allow customizing the GPG used to decrypt the encrypted .netrc file. (merge 786ef50a23 lm/credential-netrc later to maint). * "git submodule update" attempts two different kinds of "git fetch" against the upstream repository to grab a commit bound at the submodule's path, but it incorrectly gave up if the first kind (i.e. a normal fetch) failed, making the second "last resort" one (i.e. fetching an exact commit object by object name) ineffective. This has been corrected. (merge e30d833671 sb/submodule-update-try-harder later to maint). * Error behaviour of "git grep" when it cannot read the index was inconsistent with other commands that uses the index, which has been corrected to error out early. (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint). * We used to call regfree() after regcomp() failed in some codepaths, which have been corrected. (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint). * The import-tars script (in contrib/) has been taught to handle tarballs with overly long paths that use PAX extended headers. (merge 12ecea46e3 pa/import-tars-long-names later to maint). * "git rev-parse Y..." etc. misbehaved when given endpoints were not committishes. (merge 0ed556d38f en/rev-parse-invalid-range later to maint). * "git pull --recurse-submodules --rebase", when the submodule repository's history did not have anything common between ours and the upstream's, failed to execute. We need to fetch from them to continue even in such a case. (merge 4d36f88be7 jt/submodule-pull-recurse-rebase later to maint). * "git remote update" can take both a single remote nickname and a nickname for remote groups, but only one of them was documented. (merge a97447a42a nd/remote-update-doc later to maint). * "index-pack --strict" has been taught to make sure that it runs the final object integrity checks after making the freshly indexed packfile available to itself. (merge 3737746120 jk/index-pack-maint later to maint). * Other minor doc, test and build updates and code cleanups. (merge 248f66ed8e nd/trace-with-env later to maint). (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint). (merge 5988eb631a ab/doc-hash-brokenness later to maint). (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint). (merge 05e293c1ac jk/flockfile-stdio later to maint). (merge e9184b0789 jk/t5561-missing-curl later to maint). (merge b1801b85a3 nd/worktree-move later to maint). (merge bbd374dd20 ak/bisect-doc-typofix later to maint). (merge 4855f06fb3 mn/send-email-credential-doc later to maint). (merge 8523b1e355 en/doc-typoes later to maint). (merge 43b44ccfe7 js/t5404-path-fix later to maint). (merge decf711fc1 ps/test-chmtime-get later to maint). (merge 22d11a6e8e es/worktree-docs later to maint). (merge 92a5dbbc22 tg/use-git-contacts later to maint). (merge adc887221f tq/t1510 later to maint). (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint). (merge 73364e4f10 tz/doc-git-urls-reference later to maint). (merge cd1e606bad bc/mailmap-self later to maint). (merge f7997e3682 ao/config-api-doc later to maint). (merge ee930754d8 jk/apply-p-doc later to maint). (merge 011b648646 nd/pack-format-doc later to maint). (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint). (merge f6b82970aa sg/t5516-fixes later to maint). (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint). (merge 7d0ee47c11 js/test-unset-prereq later to maint). (merge 5356a3c354 ah/misc-doc-updates later to maint). (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint). (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint). (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint). (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint). (merge 590551ca2c rd/tag-doc-lightweight later to maint). (merge 44f560fc16 rd/init-typo later to maint). (merge f156a0934a rd/p4-doc-markup-env later to maint). (merge 2a00502b14 tg/doc-sec-list later to maint). (merge 47cc91310a jk/submodule-fsck-loose-fixup later to maint). [Less]
Posted 14 days ago by Junio C Hamano
A release candidate Git v2.18.0-rc1 is now available for testing at the usual places. It is comprised of 842 non-merge commits since v2.17.0, contributed by 65 people, 20 of which are new faces. I plan to go offline for most of the remainder of the ... [More] week, and then tag (hopefully) the last -rc early next week, with any urgent regression fix accumulated on the list during this week. Happy bug hunting ;-) The tarballs are found at: https://www.kernel.org/pub/software/scm/git/testing/ The following public repositories all have a copy of the 'v2.18.0-rc1' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = https://github.com/gitster/git New contributors whose contributions weren't in v2.17.0 are as follows. Welcome to the Git development community! Bill Ritcher, Birger Skogeng Pedersen, Casey Fitzpatrick, Dan Jacques, Drew DeVault, Eckhard S. Maaß, Erik E Brady, Florian Gamböck, Harald Nordgren, Leif Middelschulte, Loganaden Velvindron, Luis Marsano, Paul-Sebastian Ungureanu, Pedro Alvarez Piedehierro, Pratik Karki, Ryan Dammrose, Takuto Ikuta, Tao Qingyun, Wink Saville, and Yuki Kokubun. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Anders Kaseorg, Andreas Heiduk, Antonio Ospite, Beat Bolli, Ben Peart, Brandon Williams, brian m. carlson, Christian Couder, Christian Hesse, Clemens Buchacher, David Turner, Derrick Stolee, Elijah Newren, Eric Sunshine, Jameson Miller, Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kaartic Sivaraam, Lars Schneider, Lucas Werkmeister, Luke Diamand, Martin Ågren, Michal Nazarewicz, Michele Locati, Nguyễn Thái Ngọc Duy, Olga Telezhnaya, Orgad Shaneh, Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe, Robert P. J. Day, Sergey Organov, Stefan Agner, Stefan Beller, SZEDER Gábor, Taylor Blau, Thomas Gummerer, Todd Zullinger, and Torsten Bögershausen. ---------------------------------------------------------------- Git 2.18 Release Notes (draft) ============================== Updates since v2.17 ------------------- UI, Workflows & Features * Rename detection logic in "diff" family that is used in "merge" has learned to guess when all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is likely that x/d added in the meantime would also want to move to z/d by taking the hint that the entire directory 'x' moved to 'z'. A bug causing dirty files involved in a rename to be overwritten during merge has also been fixed as part of this work. Incidentally, this also avoids updating a file in the working tree after a (non-trivial) merge whose result matches what our side originally had. * "git filter-branch" learned to use a different exit code to allow the callers to tell the case where there was no new commits to rewrite from other error cases. * When built with more recent cURL, GIT_SSL_VERSION can now specify "tlsv1.3" as its value. * "git gui" learned that "~/.ssh/id_ecdsa.pub" and "~/.ssh/id_ed25519.pub" are also possible SSH key files. (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint). * "git gui" performs commit upon CTRL/CMD+ENTER but the CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the same key binding. It now does. (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint). * "git gui" has been taught to work with old versions of tk (like 8.5.7) that do not support "ttk::style theme use" as a way to query the current theme. (merge 4891961105 cb/git-gui-ttk-style later to maint). * "git rebase" has learned to honor "--signoff" option when using backends other than "am" (but not "--preserve-merges"). * "git branch --list" during an interrupted "rebase -i" now lets users distinguish the case where a detached HEAD is being rebased and a normal branch is being rebased. * "git mergetools" learned talking to guiffy. * The scripts in contrib/emacs/ have outlived their usefulness and have been replaced with a stub that errors out and tells the user there are replacements. * The new "checkout-encoding" attribute can ask Git to convert the contents to the specified encoding when checking out to the working tree (and the other way around when checking in). * The "git config" command uses separate options e.g. "--int", "--bool", etc. to specify what type the caller wants the value to be interpreted as. A new "--type=" option has been introduced, which would make it cleaner to define new types. * "git config --get" learned the "--default" option, to help the calling script. Building on top of the above changes, the "git config" learns "--type=color" type. Taken together, you can do things like "git config --get foo.color --default blue" and get the ANSI color sequence for the color given to foo.color variable, or "blue" if the variable does not exist. * "git ls-remote" learned an option to allow sorting its output based on the refnames being shown. * The command line completion (in contrib/) has been taught that "git stash save" has been deprecated ("git stash push" is the preferred spelling in the new world) and does not offer it as a possible completion candidate when "git stash push" can be. * "git gc --prune=nonsense" spent long time repacking and then silently failed when underlying "git prune --expire=nonsense" failed to parse its command line. This has been corrected. * Error messages from "git push" can be painted for more visibility. * "git http-fetch" (deprecated) had an optional and experimental "feature" to fetch only commits and/or trees, which nobody used. This has been removed. * The functionality of "$GIT_DIR/info/grafts" has been superseded by the "refs/replace/" mechanism for some time now, but the internal code had support for it in many places, which has been cleaned up in order to drop support of the "grafts" mechanism. * "git worktree add" learned to check out an existing branch. * "git --no-pager cmd" did not have short-and-sweet single letter option. Now it does as "-P". (merge 7213c28818 js/no-pager-shorthand later to maint). * "git rebase" learned "--rebase-merges" to transplant the whole topology of commit graph elsewhere. * "git status" learned to pay attention to UI related diff configuration variables such as diff.renames. * The command line completion mechanism (in contrib/) learned to load custom completion file for "git $command" where $command is a custom "git-$command" that the end user has on the $PATH when using newer version of bash. * "git send-email" can sometimes offer confirmation dialog "Send this email?" with choices 'Yes', 'No', 'Quit', and 'All'. A new action 'Edit' has been added to this dialog's choice. * With merge.renames configuration set to false, the recursive merge strategy can be told not to spend cycles trying to find renamed paths and merge them accordingly. * "git status" learned to honor a new status.renames configuration to skip rename detection, which could be useful for those who want to do so without disabling the default rename detection done by the "git diff" command. * Command line completion (in contrib/) learned to complete pathnames for various commands better. * "git blame" learns to unhighlight uninteresting metadata from the originating commit on lines that are the same as the previous one, and also paint lines in different colors depending on the age of the commit. * Transfer protocol v2 learned to support the partial clone. * When a short hexadecimal string is used to name an object but there are multiple objects that share the string as the prefix of their names, the code lists these ambiguous candidates in a help message. These object names are now sorted according to their types for easier eyeballing. * "git fetch $there $refspec" that talks over protocol v2 can take advantage of server-side ref filtering; the code has been extended so that this mechanism triggers also when fetching with configured refspec. * Our HTTP client code used to advertise that we accept gzip encoding from the other side; instead, just let cURL library to advertise and negotiate the best one. * "git p4" learned to "unshelve" shelved commit from P4. (merge 123f631761 ld/p4-unshelve later to maint). Performance, Internal Implementation, Development Support etc. * A "git fetch" from a repository with insane number of refs into a repository that is already up-to-date still wasted too many cycles making many lstat(2) calls to see if these objects at the tips exist as loose objects locally. These lstat(2) calls are optimized away by enumerating all loose objects beforehand. It is unknown if the new strategy negatively affects existing use cases, fetching into a repository with many loose objects from a repository with small number of refs. * Git can be built to use either v1 or v2 of the PCRE library, and so far, the build-time configuration USE_LIBPCRE=YesPlease instructed the build procedure to use v1, but now it means v2. USE_LIBPCRE1 and USE_LIBPCRE2 can be used to explicitly choose which version to use, as before. * The build procedure learned to optionally use symbolic links (instead of hardlinks and copies) to install "git-foo" for built-in commands, whose binaries are all identical. * Conversion from uchar[20] to struct object_id continues. * The way "git worktree prune" worked internally has been simplified, by assuming how "git worktree move" moves an existing worktree to a different place. * Code clean-up for the "repository" abstraction. (merge 00a3da2a13 nd/remove-ignore-env-field later to maint). * Code to find the length to uniquely abbreviate object names based on packfile content, which is a relatively recent addtion, has been optimized to use the same fan-out table. * The mechanism to use parse-options API to automate the command line completion continues to get extended and polished. * Copies of old scripted Porcelain commands in contrib/examples/ have been removed. * Some tests that rely on the exact hardcoded values of object names have been updated in preparation for hash function migration. * Perf-test update. * Test helper update. * The effort continues to refactor the internal global data structure to make it possible to open multiple repositories, work with and then close them, * Small test-helper programs have been consolidated into a single binary. * API clean-up around ref-filter code. * Shell completion (in contrib) that gives list of paths have been optimized somewhat. * The index file is updated to record the fsmonitor section after a full scan was made, to avoid wasting the effort that has already spent. * Performance measuring framework in t/perf learned to help bisecting performance regressions. * Some multi-word source filenames are being renamed to separate words with dashes instead of underscores. * An reusable "memory pool" implementation has been extracted from fast-import.c, which in turn has become the first user of the mem-pool API. * A build-time option has been added to allow Git to be told to refer to its associated files relative to the main binary, in the same way that has been possible on Windows for quite some time, for Linux, BSDs and Darwin. * Precompute and store information necessary for ancestry traversal in a separate file to optimize graph walking. * The effort to pass the repository in-core structure throughout the API continues. This round deals with the code that implements the refs/replace/ mechanism. * The build procedure "make DEVELOPER=YesPlease" learned to enable a bit more warning options depending on the compiler used to help developers more. There also is "make DEVOPTS=tokens" knob available now, for those who want to help fixing warnings we usually ignore, for example. * A new version of the transport protocol is being worked on. * The code to interface to GPG has been restructured somewhat to make it cleaner to integrate with other types of signature systems later. * The code has been taught to use the duplicated information stored in the commit-graph file to learn the tree object name for a commit to avoid opening and parsing the commit object when it makes sense to do so. * "git gc" in a large repository takes a lot of time as it considers to repack all objects into one pack by default. The command has been taught to pretend as if the largest existing packfile is marked with ".keep" so that it is left untouched while objects in other packs and loose ones are repacked. * The transport protocol v2 is getting updated further. * The codepath around object-info API has been taught to take the repository object (which in turn tells the API which object store the objects are to be located). * "git pack-objects" needs to allocate tons of "struct object_entry" while doing its work, and shrinking its size helps the performance quite a bit. * The implementation of "git rebase -i --root" has been updated to use the sequencer machinery more. * Developer support update, by using BUG() macro instead of die() to mark codepaths that should not happen more clearly. * Developer support. Use newer GCC on one of the builds done at TravisCI.org to get more warnings and errors diagnosed. * Conversion from uchar[20] to struct object_id continues. * By code restructuring of submodule merge in merge-recursive, informational messages from the codepath are now given using the same mechanism as other output, and honor the merge.verbosity configuration. The code also learned to give a few new messages when a submodule three-way merge resolves cleanly when one side records a descendant of the commit chosen by the other side. * Avoid unchecked snprintf() to make future code auditing easier. (merge ac4896f007 jk/snprintf-truncation later to maint). * Many tests hardcode the raw object names, which would change once we migrate away from SHA-1. While some of them must test against exact object names, most of them do not have to use hardcoded constants in the test. The latter kind of tests have been updated to test the moral equivalent of the original without hardcoding the actual object names. * The list of commands with their various attributes were spread across a few places in the build procedure, but it now is getting a bit more consolidated to allow more automation. * Quite a many tests assumed that newly created refs are made as loose refs using the files backend, which have been updated to use proper plumbing like rev-parse and update-ref, to avoid breakage once we start using different ref backends. Also contains various documentation updates and code clean-ups. Fixes since v2.17 ----------------- * "git shortlog cruft" aborted with a BUG message when run outside a Git repository. The command has been taught to complain about extra and unwanted arguments on its command line instead in such a case. (merge 4aa0161e83 ma/shortlog-revparse later to maint). * "git stash push -u -- " gave an unnecessary and confusing error message when there was no tracked files that match the , which has been fixed. (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint). * "git tag --contains no-such-commit" gave a full list of options after giving an error message. (merge 3bb0923f06 ps/contains-id-error-message later to maint). * "diff-highlight" filter (in contrib/) learned to undertand "git log --graph" output better. (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint). * when refs that do not point at committish are given, "git filter-branch" gave a misleading error messages. This has been corrected. (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint). * "git submodule status" misbehaved on a submodule that has been removed from the working tree. (merge 74b6bda32f rs/status-with-removed-submodule later to maint). * When credential helper exits very quickly without reading its input, it used to cause Git to die with SIGPIPE, which has been fixed. (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint). * "git rebase --keep-empty" still removed an empty commit if the other side contained an empty commit (due to the "does an equivalent patch exist already?" check), which has been corrected. (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint). * Some codepaths, including the refs API, get and keep relative paths, that go out of sync when the process does chdir(2). The chdir-notify API is introduced to let these codepaths adjust these cached paths to the new current directory. (merge fb9c2d2703 jk/relative-directory-fix later to maint). * "cd sub/dir && git commit ../path" ought to record the changes to the file "sub/path", but this regressed long time ago. (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint). * Recent introduction of "--log-destination" option to "git daemon" did not work well when the daemon was run under "--inetd" mode. (merge e67d906d73 lw/daemon-log-destination later to maint). * Small fix to the autoconf build procedure. (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint). * Fix an unexploitable (because the oversized contents are not under attacker's control) buffer overflow. (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint). * Recent simplification of build procedure forgot a bit of tweak to the build procedure of contrib/mw-to-git/ (merge d8698987f3 ab/simplify-perl-makefile later to maint). * Moving a submodule that itself has submodule in it with "git mv" forgot to make necessary adjustment to the nested sub-submodules; now the codepath learned to recurse into the submodules. * "git config --unset a.b", when "a.b" is the last variable in an otherwise empty section "a", left an empty section "a" behind, and worse yet, a subsequent "git config a.c value" did not reuse that empty shell and instead created a new one. These have been (partially) corrected. (merge c71d8bb38a js/empty-config-section-fix later to maint). * "git worktree remove" learned that "-f" is a shorthand for "--force" option, just like for "git worktree add". (merge d228eea514 sb/worktree-remove-opt-force later to maint). * The completion script (in contrib/) learned to clear cached list of command line options upon dot-sourcing it again in a more efficient way. (merge 94408dc71c sg/completion-clear-cached later to maint). * "git svn" had a minor thinko/typo which has been fixed. (merge 51db271587 ab/git-svn-get-record-typofix later to maint). * During a "rebase -i" session, the code could give older timestamp to commits created by later "pick" than an earlier "reword", which has been corrected. (merge 12f7babd6b js/ident-date-fix later to maint). * "git submodule status" did not check the symbolic revision name it computed for the submodule HEAD is not the NULL, and threw it at printf routines, which has been corrected. (merge 0b5e2ea7cf nd/submodule-status-fix later to maint). * When fed input that already has In-Reply-To: and/or References: headers and told to add the same information, "git send-email" added these headers separately, instead of appending to an existing one, which is a violation of the RFC. This has been corrected. (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint). * "git fast-export" had a regression in v2.15.0 era where it skipped some merge commits in certain cases, which has been corrected. (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint). * The code did not propagate the terminal width to subprocesses via COLUMNS environment variable, which it now does. This caused trouble to "git column" helper subprocess when "git tag --column=row" tried to list the existing tags on a display with non-default width. (merge b5d5a567fb nd/term-columns later to maint). * We learned that our source files with ".pl" and ".py" extensions are Perl and Python files respectively and changes to them are better viewed as such with appropriate diff drivers. (merge 7818b619e2 ab/perl-python-attrs later to maint). * "git rebase -i" sometimes left intermediate "# This is a combination of N commits" message meant for the human consumption inside an editor in the final result in certain corner cases, which has been fixed. (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint). * A test to see if the filesystem normalizes UTF-8 filename has been updated to check what we need to know in a more direct way, i.e. a path created in NFC form can be accessed with NFD form (or vice versa) to cope with APFS as well as HFS. (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint). * "git format-patch --cover --attach" created a broken MIME multipart message for the cover letter, which has been fixed by keeping the cover letter as plain text file. (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint). * The split-index feature had a long-standing and dormant bug in certain use of the in-core merge machinery, which has been fixed. (merge 7db118303a en/unpack-trees-split-index-fix later to maint). * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not render illustration in a literal block correctly when indented with HT by default. The problem is fixed by forcing 8-space tabs. (merge 379805051d bc/asciidoctor-tab-width later to maint). * Code clean-up to adjust to a more recent lockfile API convention that allows lockfile instances kept on the stack. (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint). * the_repository->index is not a allocated piece of memory but repo_clear() indiscriminately attempted to free(3) it, which has been corrected. (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint). * Code clean-up to avoid non-standard-conformant pointer arithmetic. (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint). * Code clean-up to turn history traversal more robust in a semi-corrupt repository. (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint). * "git update-ref A B" is supposed to ensure that ref A does not yet exist when B is a NULL OID, but this check was not done correctly for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD. * "git submodule update" and "git submodule add" supported the "--reference" option to borrow objects from a neighbouring local repository like "git clone" does, but lacked the more recent invention "--dissociate". Also "git submodule add" has been taught to take the "--progress" option. (merge a0ef29341a cf/submodule-progress-dissociate later to maint). * Update credential-netrc helper (in contrib/) to allow customizing the GPG used to decrypt the encrypted .netrc file. (merge 786ef50a23 lm/credential-netrc later to maint). * "git submodule update" attempts two different kinds of "git fetch" against the upstream repository to grab a commit bound at the submodule's path, but it incorrectly gave up if the first kind (i.e. a normal fetch) failed, making the second "last resort" one (i.e. fetching an exact commit object by object name) ineffective. This has been corrected. (merge e30d833671 sb/submodule-update-try-harder later to maint). * Error behaviour of "git grep" when it cannot read the index was inconsistent with other commands that uses the index, which has been corrected to error out early. (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint). * We used to call regfree() after regcomp() failed in some codepaths, which have been corrected. (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint). * The import-tars script (in contrib/) has been taught to handle tarballs with overly long paths that use PAX extended headers. (merge 12ecea46e3 pa/import-tars-long-names later to maint). * "git rev-parse Y..." etc. misbehaved when given endpoints were not committishes. (merge 0ed556d38f en/rev-parse-invalid-range later to maint). * "git pull -recurse-submodules --rebase", when the submodule repository's history did not have anything common between ours and the upstream's, failed to execute. We need to fetch from them to continue even in such a case. (merge 4d36f88be7 jt/submodule-pull-recurse-rebase later to maint). * "git remote update" can take both a single remote nickname and a nickname for remote groups, but only one of them was documented. (merge a97447a42a nd/remote-update-doc later to maint). * Other minor doc, test and build updates and code cleanups. (merge 248f66ed8e nd/trace-with-env later to maint). (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint). (merge 5988eb631a ab/doc-hash-brokenness later to maint). (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint). (merge 05e293c1ac jk/flockfile-stdio later to maint). (merge e9184b0789 jk/t5561-missing-curl later to maint). (merge b1801b85a3 nd/worktree-move later to maint). (merge bbd374dd20 ak/bisect-doc-typofix later to maint). (merge 4855f06fb3 mn/send-email-credential-doc later to maint). (merge 8523b1e355 en/doc-typoes later to maint). (merge 43b44ccfe7 js/t5404-path-fix later to maint). (merge decf711fc1 ps/test-chmtime-get later to maint). (merge 22d11a6e8e es/worktree-docs later to maint). (merge 92a5dbbc22 tg/use-git-contacts later to maint). (merge adc887221f tq/t1510 later to maint). (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint). (merge 73364e4f10 tz/doc-git-urls-reference later to maint). (merge cd1e606bad bc/mailmap-self later to maint). (merge f7997e3682 ao/config-api-doc later to maint). (merge ee930754d8 jk/apply-p-doc later to maint). (merge 011b648646 nd/pack-format-doc later to maint). (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint). (merge f6b82970aa sg/t5516-fixes later to maint). (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint). (merge 7d0ee47c11 js/test-unset-prereq later to maint). (merge 5356a3c354 ah/misc-doc-updates later to maint). (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint). (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint). (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint). (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint). (merge 590551ca2c rd/tag-doc-lightweight later to maint). (merge 44f560fc16 rd/init-typo later to maint). (merge f156a0934a rd/p4-doc-markup-env later to maint). (merge 2a00502b14 tg/doc-sec-list later to maint). ---------------------------------------------------------------- Changes since v2.17.0 are as follows: Anders Kaseorg (1): Documentation/git-bisect.txt: git bisect term → git bisect terms Andreas Heiduk (9): git-svn: search --authors-prog in PATH too git-svn: allow empty email-address using authors-prog and authors-file doc: improve formatting in githooks.txt doc: align 'diff --no-index' in text and synopsis doc: clarify ignore rules for git ls-files doc: add '-d' and '-o' for 'git push' git-svn: remove ''--add-author-from' for 'commit-diff' doc: add note about shell quoting to revision.txt doc: normalize [--options] to [options] in git-diff Antonio Ospite (1): doc: fix config API documentation about config_with_options Beat Bolli (1): git-gui: search for all current SSH key types Ben Peart (7): fsmonitor: fix incorrect buffer size when printing version number fsmonitor: force index write after full scan test-drop-caches: simplify delay loading of NtSetSystemInformation merge: update documentation for {merge,diff}.renameLimit merge: add merge.renames config setting merge: pass aggressive when rename detection is turned off add status config and command line options for rename detection Bill Ritcher (1): mergetools: add support for guiffy Birger Skogeng Pedersen (1): git-gui: bind CTRL/CMD+numpad ENTER to do_commit Brandon Williams (79): pkt-line: introduce packet_read_with_status pkt-line: allow peeking a packet line without consuming it pkt-line: add delim packet support upload-pack: convert to a builtin upload-pack: factor out processing lines transport: use get_refs_via_connect to get refs connect: convert get_remote_heads to use struct packet_reader connect: discover protocol version outside of get_remote_heads transport: store protocol version protocol: introduce enum protocol_version value protocol_v2 test-pkt-line: introduce a packet-line test helper serve: introduce git-serve ls-refs: introduce ls-refs server command connect: request remote refs using v2 transport: convert get_refs_list to take a list of ref prefixes transport: convert transport_get_remote_refs to take a list of ref prefixes ls-remote: pass ref prefixes when requesting a remote's refs fetch: pass ref prefixes when fetching push: pass ref prefixes when pushing upload-pack: introduce fetch server command fetch-pack: perform a fetch using v2 fetch-pack: support shallow requests connect: refactor git_connect to only get the protocol version once connect: don't request v2 when pushing transport-helper: remove name parameter transport-helper: refactor process_connect_service transport-helper: introduce stateless-connect pkt-line: add packet_buf_write_len function remote-curl: create copy of the service name remote-curl: store the protocol version the server responded with http: allow providing extra headers for http requests http: don't always add Git-Protocol header http: eliminate "# service" line when using protocol v2 remote-curl: implement stateless-connect command remote-curl: don't request v2 when pushing commit: allow partial commits with relative paths serve: introduce the server-option capability ls-remote: send server options when using protocol v2 fetch: send server options when using protocol v2 refspec: move refspec parsing logic into its own file refspec: rename struct refspec to struct refspec_item refspec: factor out parsing a single refspec refspec: introduce struct refspec refspec: convert valid_fetch_refspec to use parse_refspec submodule--helper: convert push_check to use struct refspec pull: convert get_tracking_branch to use refspec_item_init transport: convert transport_push to use struct refspec remote: convert check_push_refs to use struct refspec remote: convert match_push_refs to use struct refspec clone: convert cmd_clone to use refspec_item_init fast-export: convert to use struct refspec remote: convert push refspecs to struct refspec remote: convert fetch refspecs to struct refspec remote: remove add_prune_tags_to_fetch_refspec transport-helper: convert to use struct refspec fetch: convert fetch_one to use struct refspec fetch: convert refmap to use struct refspec refspec: remove the deprecated functions fetch: convert do_fetch to take a struct refspec fetch: convert get_ref_map to take a struct refspec fetch: convert prune_refs to take a struct refspec remote: convert get_stale_heads to take a struct refspec remote: convert apply_refspecs to take a struct refspec remote: convert query_refspecs to take a struct refspec remote: convert get_ref_match to take a struct refspec remote: convert match_explicit_refs to take a struct refspec push: check for errors earlier push: convert to use struct refspec transport: convert transport_push to take a struct refspec send-pack: store refspecs in a struct refspec transport: remove transport_verify_remote_names http-push: store refspecs in a struct refspec remote: convert match_push_refs to take a struct refspec remote: convert check_push_refs to take a struct refspec submodule: convert push_unpushed_submodules to take a struct refspec refspec: consolidate ref-prefix generation logic fetch: generate ref-prefixes when using a configured refspec remote-curl: accept all encodings supported by curl remote-curl: accept compressed responses with protocol v2 Casey Fitzpatrick (3): submodule: clean up substitutions in script submodule: add --progress option to add command submodule: add --dissociate option to add/update commands Christian Couder (7): perf/aggregate: add display_dir() perf/aggregate: add --sort-by=regression option perf/run: add --subsection option t/perf: add scripts to bisect performance regressions perf/aggregate: use Getopt::Long for option parsing perf/bisect_run_script: disable codespeed t990X: use '.git/objects' as 'deep inside .git' path Christian Hesse (2): perl: fix installing modules from contrib Makefile: mark perllibdir as a .PHONY target Clemens Buchacher (2): git-gui: workaround ttk:style theme use completion: improve ls-files filter performance Dan Jacques (3): Makefile: generate Perl header from template file Makefile: add Perl runtime prefix support exec_cmd: RUNTIME_PREFIX on some POSIX systems David Turner (1): t: make many tests depend less on the refs being files Derrick Stolee (20): packfile: define and use bsearch_pack() sha1_name: use bsearch_pack() for abbreviations csum-file: rename hashclose() to finalize_hashfile() csum-file: refactor finalize_hashfile() method commit-graph: add format document graph: add commit graph design document commit-graph: create git-commit-graph builtin commit-graph: implement write_commit_graph() commit-graph: implement git-commit-graph write commit-graph: implement git commit-graph read commit-graph: add core.commitGraph setting commit-graph: close under reachability commit: integrate commit graph with commit parsing commit-graph: read only from specific pack-indexes commit-graph: build graph from starting commits commit-graph: implement "--append" option treewide: rename tree to maybe_tree commit: create get_commit_tree() method treewide: replace maybe_tree with accessor methods commit-graph: lazy-load trees for commits Drew DeVault (1): git-send-email: allow re-editing of message Eckhard S. Maaß (1): wt-status: use settings from git_diff_ui_config Elijah Newren (72): directory rename detection: basic testcases directory rename detection: directory splitting testcases directory rename detection: testcases to avoid taking detection too far directory rename detection: partially renamed directory testcase/discussion directory rename detection: files/directories in the way of some renames directory rename detection: testcases checking which side did the rename directory rename detection: more involved edge/corner testcases directory rename detection: testcases exploring possibly suboptimal merges directory rename detection: miscellaneous testcases to complete coverage directory rename detection: tests for handling overwriting untracked files directory rename detection: tests for handling overwriting dirty files merge-recursive: move the get_renames() function merge-recursive: introduce new functions to handle rename logic merge-recursive: fix leaks of allocated renames and diff_filepairs merge-recursive: make !o->detect_rename codepath more obvious merge-recursive: split out code for determining diff_filepairs merge-recursive: make a helper function for cleanup for handle_renames merge-recursive: add get_directory_renames() merge-recursive: check for directory level conflicts merge-recursive: add computation of collisions due to dir rename & merging merge-recursive: check for file level conflicts then get new name merge-recursive: when comparing files, don't include trees merge-recursive: apply necessary modifications for directory renames merge-recursive: avoid clobbering untracked files with directory renames merge-recursive: fix overwriting dirty files involved in renames merge-recursive: fix remaining directory rename + dirty overwrite cases directory rename detection: new testcases showcasing a pair of bugs merge-recursive: avoid spurious rename/rename conflict from dir renames merge-recursive: ensure we write updates for directory-renamed file Documentation: fix several one-character-off spelling errors Documentation: normalize spelling of 'normalised' directory rename detection: basic testcases directory rename detection: directory splitting testcases directory rename detection: testcases to avoid taking detection too far directory rename detection: partially renamed directory testcase/discussion directory rename detection: files/directories in the way of some renames directory rename detection: testcases checking which side did the rename directory rename detection: more involved edge/corner testcases directory rename detection: testcases exploring possibly suboptimal merges directory rename detection: miscellaneous testcases to complete coverage directory rename detection: tests for handling overwriting untracked files directory rename detection: tests for handling overwriting dirty files merge-recursive: move the get_renames() function merge-recursive: introduce new functions to handle rename logic merge-recursive: fix leaks of allocated renames and diff_filepairs merge-recursive: make !o->detect_rename codepath more obvious merge-recursive: split out code for determining diff_filepairs merge-recursive: make a helper function for cleanup for handle_renames Make running git under other debugger-like programs easy unpack_trees: fix breakage when o->src_index != o->dst_index merge-recursive: add get_directory_renames() merge-recursive: check for directory level conflicts merge-recursive: add computation of collisions due to dir rename & merging merge-recursive: check for file level conflicts then get new name merge-recursive: when comparing files, don't include trees merge-recursive: apply necessary modifications for directory renames merge-recursive: avoid clobbering untracked files with directory renames merge-recursive: fix overwriting dirty files involved in renames merge-recursive: fix remaining directory rename + dirty overwrite cases directory rename detection: new testcases showcasing a pair of bugs merge-recursive: avoid spurious rename/rename conflict from dir renames merge-recursive: improve add_cacheinfo error handling merge-recursive: move more is_dirty handling to merge_content merge-recursive: avoid triggering add_cacheinfo error with dirty mod t6046: testcases checking whether updates can be skipped in a merge merge-recursive: fix was_tracked() to quit lying with some renamed paths merge-recursive: fix remainder of was_dirty() to use original index merge-recursive: make "Auto-merging" comment show for other merges merge-recursive: fix check for skipability of working tree updates merge-recursive: provide pair of `unpack_trees_{start,finish}()` rev-parse: check lookup'ed commit references for NULL RelNotes: remove duplicate release note Eric Sunshine (5): t3200: verify "branch --list" sanity when rebasing from detached HEAD t2028: tighten grep expression to make "move worktree" test more robust git-worktree.txt: recommend 'git worktree remove' over manual deletion git-worktree.txt: unify command-line prompt in example blocks configure.ac: fix botched FREAD_READS_DIRECTORIES check Erik E Brady (1): credential: ignore SIGPIPE when writing to credential helpers Florian Gamböck (1): completion: load completion file for external subcommand Harald Nordgren (1): ls-remote: create '--sort' option Jameson Miller (3): fast-import: rename mem_pool type to mp_block fast-import: introduce mem_pool type mem-pool: move reusable parts of memory pool into its own file Jeff King (54): diff-highlight: correct test graph diagram diff-highlight: use test_tick in graph test diff-highlight: prefer "echo" to "cat" in tests diff-highlight: test interleaved parallel lines of history diff-highlight: test graphs with --color diff-highlight: use flush() helper consistently diff-highlight: detect --graph by indent set_git_dir: die when setenv() fails add chdir-notify API set_work_tree: use chdir_notify refs: use chdir_notify to update cached relative paths config: move flockfile() closer to unlocked functions t5561: drop curl stderr redirects t5561: skip tests if curl is not available ref-filter: use "struct object_id" consistently ref-filter: make ref_array_item allocation more consistent ref-filter: factor ref_array pushing into its own function t7004: fix mistaken tag name gpg-interface: handle bool user.signingkey gpg-interface: modernize function declarations gpg-interface: use size_t for signature buffer size gpg-interface: fix const-correctness of "eol" pointer gpg-interface: extract gpg line matching helper gpg-interface: find the last gpg signature line apply: clarify "-p" documentation pager: set COLUMNS to term_columns() mark_tree_contents_uninteresting(): drop missing object check mark_parents_uninteresting(): drop missing object check mark_parents_uninteresting(): replace list with stack mark_parents_uninteresting(): avoid most allocation get_main_ref_store: BUG() when outside a repository config: die when --blob is used outside a repository http: use strbufs instead of fixed buffers log_write_email_headers: use strbufs shorten_unambiguous_ref: use xsnprintf fmt_with_err: add a comment that truncation is OK submodule-config: verify submodule names as paths is_ntfs_dotgit: use a size_t for traversing string is_hfs_dotgit: match other .git files skip_prefix: add case-insensitive variant verify_path: drop clever fallthrough verify_dotfile: mention case-insensitivity in comment update-index: stat updated files earlier verify_path: disallow symlinks in .gitmodules index-pack: make fsck error message more specific fsck: simplify ".git" check fsck: actually fsck blob data fsck: detect gitmodules files fsck: handle promisor objects in .gitmodules check fsck: check .gitmodules content fsck: call fsck_finish() after fscking objects unpack-objects: call fsck_finish() after fscking objects index-pack: check .gitmodules files with --strict fsck: complain when .gitmodules is a symlink Johannes Schindelin (68): git_config_set: fix off-by-two t1300: rename it to reflect that `repo-config` was deprecated t1300: demonstrate that --replace-all can "invent" newlines config --replace-all: avoid extra line breaks t1300: avoid relying on a bug t1300: remove unreasonable expectation from TODO t5404: relax overzealous test t1300: add a few more hairy examples of sections becoming empty t1300: `--unset-all` can leave an empty section behind (bug) config: introduce an optional event stream while parsing config: avoid using the global variable `store` config_set_store: rename some fields for consistency git_config_set: do not use a state machine git_config_set: make use of the config parser's event stream git config --unset: remove empty sections (in the common case) git_config_set: reuse empty sections exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows mingw/msvc: use the new-style RUNTIME_PREFIX helper color: introduce support for colorizing stderr push: test to verify that push errors are colored config: document the settings to colorize push errors/hints gettext: avoid initialization if the locale dir is not present git_setup_gettext: plug memory leak sequencer: avoid using errno clobbered by rollback_lock_file() sequencer: make rearrange_squash() a bit more obvious sequencer: refactor how original todo list lines are accessed sequencer: offer helpful advice when a command was rescheduled sequencer: introduce new commands to reset the revision sequencer: introduce the `merge` command sequencer: fast-forward `merge` commands, if possible rebase-helper --make-script: introduce a flag to rebase merges rebase: introduce the --rebase-merges option sequencer: make refs generated by the `label` command worktree-local sequencer: handle post-rewrite for merge commands rebase --rebase-merges: avoid "empty merges" pull: accept --rebase=merges to recreate the branch topology rebase -i: introduce --rebase-merges=[no-]rebase-cousins rebase -i --rebase-merges: add a section to the man page argv_array: offer to split a string by whitespace commit: Let the callback of for_each_mergetag return on error replace: avoid using die() to indicate a bug tests: introduce test_unset_prereq, for debugging replace: "libify" create_graft() and callees replace: prepare create_graft() for converting graft files wholesale replace: introduce --convert-graft-file Add a test for `git replace --convert-graft-file` Deprecate support for .git/info/grafts filter-branch: stop suggesting to use grafts technical/shallow: stop referring to grafts technical/shallow: describe why shallow cannot use replace refs Remove obsolete script to convert grafts to replace refs rebase -i: demonstrate bugs with fixup!/squash! commit messages rebase -i: Handle "combination of commits" with GETTEXT_POISON sequencer: always commit without editing when asked for rebase --skip: clean up commit message after a failed fixup/squash sequencer: extract helper to update active_cache_tree sequencer: learn about the special "fake root commit" handling rebase -i --root: let the sequencer handle even the initial part sequencer: allow introducing new root commits rebase --rebase-merges: a "merge" into a new root is a fast-forward rebase --rebase-merges: root commits can be cousins, too test-tool: help verifying BUG() code paths run-command: use BUG() to report bugs, not die() Replace all die("BUG: ...") calls by BUG() ones Convert remaining die*(BUG) messages config: a user-provided invalid section is not a BUG is_ntfs_dotgit: match other .git files is_{hfs,ntfs}_dotgitmodules: add tests Johannes Sixt (2): sequencer: reset the committer date before commits git: add -P as a short option for --no-pager Jonathan Nieder (6): sha1_file: allow map_sha1_file_1 to handle arbitrary repositories sha1_file: allow sha1_loose_object_info to handle arbitrary repositories Makefile: remove unused @@PERLLIBDIR@@ substitution variable Makefile: quote $INSTLIBDIR when passing it to sed packfile: add repository argument to packed_object_info fetch: do not pass ref-prefixes for fetch by exact SHA1 Jonathan Tan (5): grep: remove "repo" arg from non-supporting funcs upload-pack: fix error message typo upload-pack: read config when serving protocol v2 {fetch,upload}-pack: support filter in protocol v2 submodule: do not pass null OID to setup_revisions Junio C Hamano (21): stash: fix nonsense pipeline The first batch for 2.18 cycle The second batch for 2.18 The third batch for 2.18 Revert "Merge branch 'en/rename-directory-detection'" gc: do not upcase error message shown with die() parseopt: handle malformed --expire arguments more nicely The fourth batch for 2.18 The fifth batch for 2.18 argv-array: return the pushed string from argv_push*() Git 2.13.7 Git 2.14.4 Git 2.15.2 Git 2.16.4 Git 2.17.1 The sixth batch for 2.18 The seventh batch for 2.18 Git 2.18-rc0 refspec-api: avoid uninitialized field in refspec item A bit more topics before -rc1 Git 2.18-rc1 Kaartic Sivaraam (1): branch --list: print useful info whilst interactive rebasing a detached HEAD Lars Schneider (10): strbuf: remove unnecessary NUL assignment in xstrdup_tolower() strbuf: add xstrdup_toupper() strbuf: add a case insensitive starts_with() utf8: teach same_encoding() alternative UTF encoding names utf8: add function to detect prohibited UTF-16/32 BOM utf8: add function to detect a missing UTF-16/32 BOM convert: add 'working-tree-encoding' attribute convert: check for detectable errors in UTF encodings convert: add tracing for 'working-tree-encoding' attribute convert: add round trip check based on 'core.checkRoundtripEncoding' Leif Middelschulte (1): merge-recursive: give notice when submodule commit gets fast-forwarded Loganaden Velvindron (1): http: allow use of TLS 1.3 Lucas Werkmeister (1): daemon.c: fix condition for redirecting stderr Luis Marsano (2): git-credential-netrc: adapt to test framework for git git-credential-netrc: accept gpg option Luke Diamand (1): git-p4: add unshelve command Martin Ågren (24): git-shortlog.txt: reorder usages shortlog: add usage-string for stdin-reading shortlog: disallow left-over arguments outside repo doc: convert \--option to --option doc: convert [\--] to [--] git-[short]log.txt: unify quoted standalone -- git-submodule.txt: quote usage in monospace, drop backslash fast-export: fix regression skipping some merge-commits http-fetch: make `-a` standard behaviour walker: drop fields of `struct walker` which are always 1 t/helper/test-write-cache: clean up lock-handling refs.c: do not die if locking fails in `write_pseudoref()` refs.c: do not die if locking fails in `delete_pseudoref()` lock_file: make function-local locks non-static lock_file: move static locks into functions refs.c: refer to "object ID", not "sha1", in error messages t1400: add tests around adding/deleting pseudorefs refs: handle zero oid for pseudorefs merge: setup `opts` later in `checkout_fast_forward()` config: free resources of `struct config_store_data` config: let `config_store_data_clear()` handle `value_regex` config: let `config_store_data_clear()` handle `key` regex: do not call `regfree()` if compilation fails unpack_trees_options: free messages when done Michal Nazarewicz (1): send-email: simplify Gmail example in the documentation Michele Locati (1): filter-branch: return 2 when nothing to rewrite Nguyễn Thái Ngọc Duy (108): repository: initialize the_repository in main() repository.c: move env-related setup code back to environment.c repository.c: delete dead functions sha1_file.c: move delayed getenv(altdb) back to setup_git_env() repository: delete ignore_env member gc.txt: more details about what gc does worktree: delete dead code worktree prune: improve prune logic when worktree is moved repository.h: add comment and clarify repo_set_gitdir git.c: move cmd_struct declaration up git.c: add hidden option --list-parseopt-builtins completion: mention the oldest version we need to support completion: factor out _git_xxx calling code completion: add --option completion for most builtin commands completion: delete option-only completion commands completion: use __gitcomp_builtin in _git_ls_tree completion: use __gitcomp_builtin in _git_cherry packfile: keep prepare_packed_git() private t/helper: add an empty test-tool program t/helper: merge test-chmtime into test-tool t/helper: merge test-sha1 into test-tool t/helper: merge test-lazy-init-name-hash into test-tool t/helper: merge test-config into test-tool t/helper: merge test-ctype into test-tool t/helper: merge test-date into test-tool t/helper: merge (unused) test-delta into test-tool t/helper: merge test-drop-caches into test-tool t/helper: merge test-dump-cache-tree into test-tool t/helper: merge test-dump-split-index into test-tool t/helper: merge test-example-decorate into test-tool t/helper: merge test-genrandom into test-tool t/helper: merge test-hashmap into test-tool t/helper: merge test-index-version into test-tool t/helper: merge (unused) test-match-trees into test-tool t/helper: merge (unused) test-mergesort into test-tool t/helper: merge test-mktemp into test-tool t/helper: merge test-online-cpus into test-tool t/helper: merge test-path-utils into test-tool t/helper: merge test-prio-queue into test-tool t/helper: merge test-read-cache into test-tool t/helper: merge test-ref-store into test-tool t/helper: merge test-regex into test-tool t/helper: merge test-revision-walking into test-tool t/helper: merge test-run-command into test-tool t/helper: merge test-scrap-cache-tree into test-tool t/helper: merge test-sha1-array into test-tool t/helper: merge test-sigchain into test-tool t/helper: merge test-strcmp-offset into test-tool t/helper: merge test-string-list into test-tool t/helper: merge test-submodule-config into test-tool t/helper: merge test-subprocess into test-tool t/helper: merge test-urlmatch-normalization into test-tool t/helper: merge test-wildmatch into test-tool t/helper: merge test-write-cache into test-tool trace.c: export trace_setup_key read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean pack-objects: a bit of document about struct object_entry pack-objects: turn type and in_pack_type to bitfields pack-objects: use bitfield for object_entry::dfs_state pack-objects: use bitfield for object_entry::depth pack-objects: move in_pack_pos out of struct object_entry pack-objects: move in_pack out of struct object_entry pack-objects: refer to delta objects by index instead of pointer pack-objects: shrink z_delta_size field in struct object_entry pack-objects: don't check size when the object is bad pack-objects: clarify the use of object_entry::size pack-objects: shrink size field in struct object_entry pack-objects: shrink delta_size field in struct object_entry pack-objects: reorder members to shrink struct object_entry ci: exercise the whole test suite with uncommon code in pack-objects t7700: have closing quote of a test at the beginning of line repack: add --keep-pack option gc: add --keep-largest-pack option gc: add gc.bigPackThreshold config gc: handle a corner case in gc.bigPackThreshold gc --auto: exclude base pack if not enough mem to "repack -ad" pack-objects: show some progress when counting kept objects connect.c: mark die_initial_contact() NORETURN Makefile: detect compiler and enable more warnings in DEVELOPER=1 submodule--helper: don't print null in 'submodule status' doc: keep first level section header in upper case pack-objects: validation and documentation about unreachable options completion: fix misspelled config key aliasesfiletype repository: fix free problem with repo_clear(the_repository) generate-cmds.sh: factor out synopsis extract code generate-cmds.sh: export all commands to command-list.h help: use command-list.h for common command list Remove common-cmds.h pack-format.txt: more details on pack file format column: fix off-by-one default width commit.h: rearrange 'index' to shrink struct commit git.c: convert --list-* to --list-cmds=* git --list-cmds: collect command list in a string_list completion: implement and use --list-cmds=main,others git: support --list-cmds=list- help: add "-a --verbose" to list all commands with synopsis help: use command-list.txt for the source of guides command-list.txt: documentation and guide line completion: let git provide the completable command list completion: reduce completable command list Move declaration for alias.c to alias.h completion: add and use --list-cmds=nohelpers completion: add and use --list-cmds=alias completion: allow to customize the completable command list travis-ci: run gcc-8 on linux-gcc jobs Use OPT_SET_INT_F() for cmdline option specification remote.txt: update documentation for 'update' command remote: doc typofix Olga Telezhnaya (6): ref-filter: add shortcut to work with strbufs ref-filter: start adding strbufs with errors ref-filter: add return value && strbuf to handlers ref-filter: change parsing function error handling ref-filter: add return value to parsers ref-filter: libify get_ref_atom_value() Orgad Shaneh (1): git-rebase--interactive: fix copy-paste mistake Paul-Sebastian Ungureanu (2): parse-options: do not show usage upon invalid option value t/helper: 'test-chmtime (--get|-g)' to print only the mtime Pedro Alvarez Piedehierro (1): import-tars: read overlong names from pax extended header Philip Oakley (1): Avoid multiple PREFIX definitions Phillip Wood (7): rebase --root: stop assuming squash_onto is unset rebase -i --keep-empty: don't prune empty commits rebase: respect --no-keep-empty rebase: extend --signoff support rebase -p: error out if --signoff is given rebase --keep-empty: always use interactive rebase rebase --rebase-merges: add test for --keep-empty Pratik Karki (1): test: avoid pipes in git related commands for test Ramsay Jones (1): BUG_exit_code: fix sparse "symbol not declared" warning René Scharfe (8): sha1_name: use bsearch_pack() in unique_in_pack() bisect: use oid_to_hex() for converting object_id hashes to hex strings run-command: use strbuf_addstr() for adding a string to a strbuf submodule: check for NULL return of get_submodule_ref_store() replace_object: use oidmap fast-export: avoid NULL pointer arithmetic t5512: run git fetch inside test fsmonitor: use internal argv_array of struct child_process Robert P. J. Day (4): Use proper syntax for replaceables in command docs tag: clarify in the doc that a tag can refer to a non-commit object init: fix grammar in "templates not found" msg p4.txt: Use backquotes for variable names Ryan Dammrose (1): push: colorize errors SZEDER Gábor (22): test_must_be_empty: simplify file existence check t9902-completion: add tests demonstrating issues with quoted pathnames completion: move __git_complete_index_file() next to its helpers completion: simplify prefix path component handling during path completion completion: support completing non-ASCII pathnames completion: improve handling quoted paths on the command line completion: let 'ls-files' and 'diff-index' filter matching paths completion: use 'awk' to strip trailing path components t9902-completion: ignore COMPREPLY element order in some tests completion: remove repeated dirnames with 'awk' during path completion completion: improve handling quoted paths in 'git ls-files's output completion: fill COMPREPLY directly when completing paths completion: reduce overhead of clearing cached --options docs/git-gc: fix minor rendering issue coccinelle: avoid wrong transformation suggestions from commit.cocci t6050-replace: don't disable stdin for the whole test script t5310-pack-bitmaps: make JGit tests work with GIT_TEST_SPLIT_INDEX t5516-fetch-push: fix 'push with dry-run' test t5516-fetch-push: fix broken &&-chain t7005-editor: get rid of the SPACES_IN_FILENAMES prereq completion: don't return with error from __gitcomp_file_direct() t9902-completion: exercise __git_complete_index_file() directly Sergey Organov (1): glossary: substitute "ancestor" for "direct ancestor" in 'push' description. Stefan Agner (1): send-email: avoid duplicate In-Reply-To/References Stefan Beller (81): repository: introduce raw object store field object-store: migrate alternates struct and functions from cache.h object-store: move alt_odb_list and alt_odb_tail to object store object-store: free alt_odb_list object-store: move packed_git and packed_git_mru to object store object-store: close all packs upon clearing the object store pack: move prepare_packed_git_run_once to object store pack: move approximate object count to object store sha1_file: add raw_object_store argument to alt_odb_usable sha1_file: add repository argument to link_alt_odb_entry sha1_file: add repository argument to read_info_alternates sha1_file: add repository argument to link_alt_odb_entries sha1_file: add repository argument to prepare_alt_odb sha1_file: allow link_alt_odb_entries to handle arbitrary repositories sha1_file: allow prepare_alt_odb to handle arbitrary repositories sha1_file: add repository argument to sha1_file_name sha1_file: add repository argument to stat_sha1_file sha1_file: add repository argument to open_sha1_file sha1_file: add repository argument to map_sha1_file_1 sha1_file: add repository argument to map_sha1_file sha1_file: add repository argument to sha1_loose_object_info sha1_file: allow sha1_file_name to handle arbitrary repositories sha1_file: allow stat_sha1_file to handle arbitrary repositories sha1_file: allow open_sha1_file to handle arbitrary repositories sha1_file: allow map_sha1_file to handle arbitrary repositories packfile: allow prepare_packed_git_mru to handle arbitrary repositories packfile: allow rearrange_packed_git to handle arbitrary repositories packfile: allow install_packed_git to handle arbitrary repositories packfile: add repository argument to prepare_packed_git_one packfile: add repository argument to prepare_packed_git packfile: add repository argument to reprepare_packed_git packfile: allow prepare_packed_git_one to handle arbitrary repositories packfile: allow prepare_packed_git to handle arbitrary repositories packfile: allow reprepare_packed_git to handle arbitrary repositories packfile: add repository argument to find_pack_entry packfile: allow find_pack_entry to handle arbitrary repositories submodule.h: drop declaration of connect_work_tree_and_git_dir submodule-config: allow submodule_free to handle arbitrary repositories submodule-config: add repository argument to submodule_from_{name, path} submodule-config: remove submodule_from_cache submodule: fixup nested submodules after moving the submodule write_or_die.c: rename to use dashes in file name unicode_width.h: rename to use dash in file name exec_cmd: rename to use dash in file name sha1_name.c: rename to use dash in file name sha1_file.c: rename to use dash in file name replace_object.c: rename to use dash in file name replace-object: move replace_map to object store object-store: move lookup_replace_object to replace-object.h replace-object: eliminate replace objects prepared flag replace-object: check_replace_refs is safe in multi repo environment refs: add repository argument to get_main_ref_store refs: add repository argument to for_each_replace_ref replace-object: add repository argument to prepare_replace_object replace-object: add repository argument to do_lookup_replace_object replace-object: add repository argument to lookup_replace_object refs: store the main ref store inside the repository struct refs: allow for_each_replace_ref to handle arbitrary repositories replace-object: allow prepare_replace_object to handle arbitrary repositories replace-object: allow do_lookup_replace_object to handle arbitrary repositories replace-object: allow lookup_replace_object to handle arbitrary repositories worktree: accept -f as short for --force for removal builtin/blame: dim uninteresting metadata lines builtin/blame: highlight recently changed lines builtin/blame: add new coloring scheme config cache.h: add repository argument to oid_object_info_extended cache.h: add repository argument to oid_object_info packfile: add repository argument to retry_bad_packed_offset packfile: add repository argument to packed_to_object_type packfile: add repository argument to read_object packfile: add repository argument to unpack_entry packfile: add repository argument to cache_or_unpack_entry cache.h: allow oid_object_info to handle arbitrary repositories git-rebase--interactive: clarify arguments object.c: free replace map in raw_object_store_clear replace-object.c: remove the_repository from prepare_replace_object grep: handle corrupt index files early git-submodule.sh: try harder to fetch a submodule submodule.c: move submodule merging to merge-recursive.c merge-recursive: i18n submodule merge output and respect verbosity object.c: clear replace map before freeing it Takuto Ikuta (1): fetch-pack.c: use oidset to check existence of loose object Tao Qingyun (1): t1510-repo-setup.sh: remove useless mkdir Taylor Blau (5): builtin/config.c: treat type specifiers singularly builtin/config.c: support `--type=` as preferred alias for `--` builtin/config: introduce `--default` config.c: introduce 'git_config_color' to parse ANSI colors builtin/config: introduce `color` type specifier Thomas Gummerer (12): stash push: avoid printing errors stash push -u: don't create empty stash stash: drop superfluos pathspec parameter SubmittingPatches: mention the git contacts command completion: stop showing 'save' for stash by default completion: make stash -p and alias for stash push -p worktree: remove extra members from struct add_opts worktree: improve message when creating a new worktree worktree: factor out dwim_branch function worktree: teach "add" to check out existing branches SubmittingPatches: replace numbered attributes with names note git-security@googlegroups.com in more places Todd Zullinger (1): doc/clone: update caption for GIT URLS cross-reference Torsten Bögershausen (1): test: correct detection of UTF8_NFD_TO_NFC for APFS Wink Saville (8): rebase-interactive: simplify pick_on_preserving_merges rebase: update invocation of rebase dot-sourced scripts rebase: reindent function git_rebase__interactive rebase: extract functions out of git_rebase__interactive rebase: add and use git_rebase__interactive__preserve_merges rebase: remove unused code paths from git_rebase__interactive rebase: remove unused code paths from git_rebase__interactive__preserve_merges rebase: remove merges_option and a blank line Yuki Kokubun (1): filter-branch: fix errors caused by refs that point at non-committish brian m. carlson (123): bulk-checkin: convert index_bulk_checkin to struct object_id builtin/write-tree: convert to struct object_id cache-tree: convert write_*_as_tree to object_id cache-tree: convert remnants to struct object_id resolve-undo: convert struct resolve_undo_info to object_id tree: convert read_tree_recursive to struct object_id ref-filter: convert grab_objectname to struct object_id strbuf: convert strbuf_add_unique_abbrev to use struct object_id wt-status: convert struct wt_status_state to object_id Convert find_unique_abbrev* to struct object_id http-walker: convert struct object_request to use struct object_id send-pack: convert remaining functions to struct object_id replace_object: convert struct replace_object to object_id builtin/mktag: convert to struct object_id archive: convert write_archive_entry_fn_t to object_id archive: convert sha1_file_to_archive to struct object_id builtin/index-pack: convert struct ref_delta_entry to object_id sha1_file: convert read_loose_object to use struct object_id sha1_file: convert check_sha1_signature to struct object_id streaming: convert open_istream to use struct object_id builtin/mktree: convert to struct object_id sha1_file: convert assert_sha1_type to object_id sha1_file: convert retry_bad_packed_offset to struct object_id packfile: convert unpack_entry to struct object_id Convert remaining callers of sha1_object_info_extended to object_id sha1_file: convert sha1_object_info* to object_id builtin/fmt-merge-msg: convert remaining code to object_id builtin/notes: convert static functions to object_id tree-walk: convert get_tree_entry_follow_symlinks internals to object_id streaming: convert istream internals to struct object_id tree-walk: convert tree entry functions to object_id sha1_file: convert read_object_with_reference to object_id sha1_file: convert read_sha1_file to struct object_id Convert lookup_replace_object to struct object_id sha1_file: introduce a constant for max header length convert: convert to struct object_id sha1_name: convert struct min_abbrev_data to object_id t1011: abstract away SHA-1-specific constants t1304: abstract away SHA-1-specific constants t1300: abstract away SHA-1-specific constants t1405: sort reflog entries in a hash-independent way t1411: abstract away SHA-1-specific constants t1507: abstract away SHA-1-specific constants t2020: abstract away SHA-1 specific constants t2101: modernize test style t2101: abstract away SHA-1-specific constants t2107: abstract away SHA-1-specific constants format-patch: make cover letters always text/plain cache: add a function to read an object ID from a buffer server-info: remove unused members from struct pack_info Remove unused member in struct object_context packfile: remove unused member from struct pack_entry packfile: convert has_sha1_pack to object_id sha1-file: convert freshen functions to object_id packfile: convert find_pack_entry to object_id packfile: abstract away hash constant values pack-objects: abstract away hash algorithm pack-redundant: abstract away hash algorithm tree-walk: avoid hard-coded 20 constant tree-walk: convert get_tree_entry_follow_symlinks to object_id fsck: convert static functions to struct object_id submodule-config: convert structures to object_id split-index: convert struct split_index to object_id Update struct index_state to use struct object_id pack-redundant: convert linked lists to use struct object_id index-pack: abstract away hash function constant commit: convert uses of get_sha1_hex to get_oid_hex dir: convert struct untracked_cache_dir to object_id http: eliminate hard-coded constants revision: replace use of hard-coded constants upload-pack: replace use of several hard-coded constants diff: specify abbreviation size in terms of the_hash_algo builtin/receive-pack: avoid hard-coded constants for push certs sha1-file: add functions for hex empty tree and blob OIDs builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo builtin/merge: switch tree functions to use object_id merge: convert empty tree constant to the_hash_algo sequencer: convert one use of EMPTY_TREE_SHA1_HEX submodule: convert several uses of EMPTY_TREE_SHA1_HEX wt-status: convert two uses of EMPTY_TREE_SHA1_HEX builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX builtin/reset: convert use of EMPTY_TREE_SHA1_BIN sha1_file: convert cached object code to struct object_id cache-tree: use is_empty_tree_oid sequencer: use the_hash_algo for empty tree object ID dir: use the_hash_algo for empty blob object ID sha1_file: only expose empty object constants through git_hash_algo Update shell scripts to compute empty tree object ID add--interactive: compute the empty tree value merge-one-file: compute empty blob object ID Documentation: use 8-space tabs with Asciidoctor Documentation: render revisions correctly under Asciidoctor mailmap: update brian m. carlson's email address t/test-lib: add an SHA1 prerequisite t/test-lib: introduce ZERO_OID t: switch $_z40 to $ZERO_OID t/test-lib: introduce OID_REGEX t: switch $_x40 to $OID_REGEX t0000: annotate with SHA1 prerequisite t1007: annotate with SHA1 prerequisite t1512: skip test if not using SHA-1 t4044: skip test if not using SHA-1 t: skip pack tests if not using SHA-1 t2203: abstract away SHA-1-specific constants t3103: abstract away SHA-1-specific constants t3702: abstract away SHA-1-specific constants t3905: abstract away SHA-1-specific constants t4007: abstract away SHA-1-specific constants t4008: abstract away SHA-1-specific constants t4014: abstract away SHA-1-specific constants t4020: abstract away SHA-1-specific constants t4022: abstract away SHA-1-specific constants t4029: fix test indentation t4029: abstract away SHA-1-specific constants t4030: abstract away SHA-1-specific constants t/lib-diff-alternative: abstract away SHA-1-specific constants t4205: sort log output in a hash-independent way t4042: abstract away SHA-1-specific constants t4045: abstract away SHA-1-specific constants t4208: abstract away SHA-1-specific constants t5300: abstract away SHA-1-specific constants sequencer: ensure labels that are object IDs are rewritten t3430: test clean-up Ævar Arnfjörð Bjarmason (21): configure: fix a regression in PCRE v1 detection configure: detect redundant --with-libpcre & --with-libpcre1 Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1 Makefile: fix broken bindir_relative variable Makefile: add a gitexecdir_relative variable Makefile: optionally symlink libexec/git-core binaries to bin/git Remove contrib/examples/* doc hash-function-transition: clarify how older gits die on NewHash doc hash-function-transition: clarify what SHAttered means git-svn: avoid warning on undef readline() Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER Makefile: add a DEVOPTS to get all of -Wextra git{,-blame}.el: remove old bitrotting Emacs code .gitattributes: add *.pl extension for Perl .gitattributes: use the "perl" differ for Perl .gitattributes: add a diff driver for Python sha1-name.c: remove stray newline sha1-array.h: align function arguments git-p4: change "commitish" typo to "committish" sha1-name.c: move around the collect_ambiguous() function get_short_oid: sort ambiguous objects by type, then SHA-1 [Less]
Posted 19 days ago by Junio C Hamano
An early preview release Git v2.18.0-rc0 is now available for testing at the usual places. It is comprised of 802 non-merge commits since v2.17.0, contributed by 60 people, 19 of which are new faces. As the above numbers show, especially the ... [More] non-merge commit count, it turned out that 2.18 is relatively sizeable cycle. Let's plan to start cooling down and giving it a bit of extra polish to make sure there is no/little regression. I am tagging the preview now as I want to do the -rc1 before I go offline early next week for a few days for travelling. I may go offline for the rest of the day as I seem to have caught something X- hours re-reviewing what is in (or close to be in) 'next' to see which ones should be in -rc1. The tarballs are found at: https://www.kernel.org/pub/software/scm/git/testing/ The following public repositories all have a copy of the 'v2.18.0-rc0' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = https://github.com/gitster/git New contributors whose contributions weren't in v2.17.0 are as follows. Welcome to the Git development community! Bill Ritcher, Birger Skogeng Pedersen, Casey Fitzpatrick, Dan Jacques, Drew DeVault, Eckhard S. Maaß, Erik E Brady, Florian Gamböck, Harald Nordgren, Leif Middelschulte, Loganaden Velvindron, Luis Marsano, Paul-Sebastian Ungureanu, Pratik Karki, Ryan Dammrose, Takuto Ikuta, Tao Qingyun, Wink Saville, and Yuki Kokubun. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Anders Kaseorg, Andreas Heiduk, Antonio Ospite, Beat Bolli, Ben Peart, Brandon Williams, brian m. carlson, Christian Couder, Christian Hesse, Clemens Buchacher, Derrick Stolee, Elijah Newren, Eric Sunshine, Jameson Miller, Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kaartic Sivaraam, Lars Schneider, Lucas Werkmeister, Martin Ågren, Michal Nazarewicz, Michele Locati, Nguyễn Thái Ngọc Duy, Olga Telezhnaya, Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe, Sergey Organov, Stefan Agner, Stefan Beller, SZEDER Gábor, Taylor Blau, Thomas Gummerer, Todd Zullinger, and Torsten Bögershausen. ---------------------------------------------------------------- Git 2.18 Release Notes (draft) ============================== Updates since v2.17 ------------------- UI, Workflows & Features * Rename detection logic in "diff" family that is used in "merge" has learned to guess when all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is likely that x/d added in the meantime would also want to move to z/d by taking the hint that the entire directory 'x' moved to 'z'. A bug causing dirty files involved in a rename to be overwritten during merge has also been fixed as part of this work. * "git filter-branch" learned to use a different exit code to allow the callers to tell the case where there was no new commits to rewrite from other error cases. * When built with more recent cURL, GIT_SSL_VERSION can now specify "tlsv1.3" as its value. * "git gui" learned that "~/.ssh/id_ecdsa.pub" and "~/.ssh/id_ed25519.pub" are also possible SSH key files. (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint). * "git gui" performs commit upon CTRL/CMD+ENTER but the CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the same key binding. It now does. (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint). * "git gui" has been taught to work with old versions of tk (like 8.5.7) that do not support "ttk::style theme use" as a way to query the current theme. (merge 4891961105 cb/git-gui-ttk-style later to maint). * "git rebase" has learned to honor "--signoff" option when using backends other than "am" (but not "--preserve-merges"). * "git branch --list" during an interrupted "rebase -i" now lets users distinguish the case where a detached HEAD is being rebased and a normal branch is being rebased. * "git mergetools" learned talking to guiffy. * The scripts in contrib/emacs/ have outlived their usefulness and have been replaced with a stub that errors out and tells the user there are replacements. * The new "checkout-encoding" attribute can ask Git to convert the contents to the specified encoding when checking out to the working tree (and the other way around when checking in). * The "git config" command uses separate options e.g. "--int", "--bool", etc. to specify what type the caller wants the value to be interpreted as. A new "--type=" option has been introduced, which would make it cleaner to define new types. * "git config --get" learned the "--default" option, to help the calling script. Building on top of the above changes, the "git config" learns "--type=color" type. Taken together, you can do things like "git config --get foo.color --default blue" and get the ANSI color sequence for the color given to foo.color variable, or "blue" if the variable does not exist. * "git ls-remote" learned an option to allow sorting its output based on the refnames being shown. * The command line completion (in contrib/) has been taught that "git stash save" has been deprecated ("git stash push" is the preferred spelling in the new world) and does not offer it as a possible completion candidate when "git stash push" can be. * "git gc --prune=nonsense" spent long time repacking and then silently failed when underlying "git prune --expire=nonsense" failed to parse its command line. This has been corrected. * Error messages from "git push" can be painted for more visibility. * "git http-fetch" (deprecated) had an optional and experimental "feature" to fetch only commits and/or trees, which nobody used. This has been removed. * The functionality of "$GIT_DIR/info/grafts" has been superseded by the "refs/replace/" mechanism for some time now, but the internal code had support for it in many places, which has been cleaned up in order to drop support of the "grafts" mechanism. * "git worktree add" learned to check out an existing branch. * "git --no-pager cmd" did not have short-and-sweet single letter option. Now it does as "-P". (merge 7213c28818 js/no-pager-shorthand later to maint). * "git rebase" learned "--rebase-merges" to transplant the whole topology of commit graph elsewhere. * "git status" learned to pay attention to UI related diff configuration variables such as diff.renames. * The command line completion mechanism (in contrib/) learned to load custom completion file for "git $command" where $command is a custom "git-$command" that the end user has on the $PATH when using newer version of bash. * "git send-email" can sometimes offer confirmation dialog "Send this email?" with choices 'Yes', 'No', 'Quit', and 'All'. A new action 'Edit' has been added to this dialog's choice. * With merge.renames configuration set to false, the recursive merge strategy can be told not to spend cycles trying to find renamed paths and merge them accordingly. * "git status" learned to honor a new status.renames configuration to skip rename detection, which could be useful for those who want to do so without disabling the default rename detection done by the "git diff" command. * Command line completion (in contrib/) learned to complete pathnames for various commands better. * "git blame" learns to unhighlight uninteresting metadata from the originating commit on lines that are the same as the previous one, and also paint lines in different colors depending on the age of the commit. * Transfer protocol v2 learned to support the partial clone. * When a short hexadecimal string is used to name an object but there are multiple objects that share the string as the prefix of their names, the code lists these ambiguous candidates in a help message. These object names are now sorted according to their types for easier eyeballing. * "git fetch $there $refspec" that talks over protocol v2 can take advantage of server-side ref filtering; the code has been extended so that this mechanism triggers also when fetching with configured refspec. * Our HTTP client code used to advertise that we accept gzip encoding from the other side; instead, just let cURL library to advertise and negotiate the best one. Performance, Internal Implementation, Development Support etc. * A "git fetch" from a repository with insane number of refs into a repository that is already up-to-date still wasted too many cycles making many lstat(2) calls to see if these objects at the tips exist as loose objects locally. These lstat(2) calls are optimized away by enumerating all loose objects beforehand. It is unknown if the new strategy negatively affects existing use cases, fetching into a repository with many loose objects from a repository with small number of refs. * Git can be built to use either v1 or v2 of the PCRE library, and so far, the build-time configuration USE_LIBPCRE=YesPlease instructed the build procedure to use v1, but now it means v2. USE_LIBPCRE1 and USE_LIBPCRE2 can be used to explicitly choose which version to use, as before. * The build procedure learned to optionally use symbolic links (instead of hardlinks and copies) to install "git-foo" for built-in commands, whose binaries are all identical. * Conversion from uchar[20] to struct object_id continues. * The way "git worktree prune" worked internally has been simplified, by assuming how "git worktree move" moves an existing worktree to a different place. * Code clean-up for the "repository" abstraction. (merge 00a3da2a13 nd/remove-ignore-env-field later to maint). * Code to find the length to uniquely abbreviate object names based on packfile content, which is a relatively recent addtion, has been optimized to use the same fan-out table. * The mechanism to use parse-options API to automate the command line completion continues to get extended and polished. * Copies of old scripted Porcelain commands in contrib/examples/ have been removed. * Some tests that rely on the exact hardcoded values of object names have been updated in preparation for hash function migration. * Perf-test update. * Test helper update. * The effort continues to refactor the internal global data structure to make it possible to open multiple repositories, work with and then close them, * Small test-helper programs have been consolidated into a single binary. * API clean-up around ref-filter code. * Shell completion (in contrib) that gives list of paths have been optimized somewhat. * The index file is updated to record the fsmonitor section after a full scan was made, to avoid wasting the effort that has already spent. * Performance measuring framework in t/perf learned to help bisecting performance regressions. * Some multi-word source filenames are being renamed to separate words with dashes instead of underscores. * An reusable "memory pool" implementation has been extracted from fast-import.c, which in turn has become the first user of the mem-pool API. * A build-time option has been added to allow Git to be told to refer to its associated files relative to the main binary, in the same way that has been possible on Windows for quite some time, for Linux, BSDs and Darwin. * Precompute and store information necessary for ancestry traversal in a separate file to optimize graph walking. * The effort to pass the repository in-core structure throughout the API continues. This round deals with the code that implements the refs/replace/ mechanism. * The build procedure "make DEVELOPER=YesPlease" learned to enable a bit more warning options depending on the compiler used to help developers more. There also is "make DEVOPTS=tokens" knob available now, for those who want to help fixing warnings we usually ignore, for example. * A new version of the transport protocol is being worked on. * The code to interface to GPG has been restructured somewhat to make it cleaner to integrate with other types of signature systems later. * The code has been taught to use the duplicated information stored in the commit-graph file to learn the tree object name for a commit to avoid opening and parsing the commit object when it makes sense to do so. * "git gc" in a large repository takes a lot of time as it considers to repack all objects into one pack by default. The command has been taught to pretend as if the largest existing packfile is marked with ".keep" so that it is left untouched while objects in other packs and loose ones are repacked. * The transport protocol v2 is getting updated further. * The codepath around object-info API has been taught to take the repository object (which in turn tells the API which object store the objects are to be located). * Rename detection logic in "diff" family that is used in "merge" has learned to guess when all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is likely that x/d added in the meantime would also want to move to z/d by taking the hint that the entire directory 'x' moved to 'z'. A bug causing dirty files involved in a rename to be overwritten during merge has also been fixed as part of this work. Incidentally, this also avoids updating a file in the working tree after a (non-trivial) merge whose result matches what our side originally had. * "git pack-objects" needs to allocate tons of "struct object_entry" while doing its work, and shrinking its size helps the performance quite a bit. * The implementation of "git rebase -i --root" has been updated to use the sequencer machinery more. * Developer support update, by using BUG() macro instead of die() to mark codepaths that should not happen more clearly. * Developer support. Use newer GCC on one of the builds done at TravisCI.org to get more warnings and errors diagnosed. * Conversion from uchar[20] to struct object_id continues. * By code restructuring of submodule merge in merge-recursive, informational messages from the codepath are now given using the same mechanism as other output, and honor the merge.verbosity configuration. The code also learned to give a few new messages when a submodule three-way merge resolves cleanly when one side records a descendant of the commit chosen by the other side. * Avoid unchecked snprintf() to make future code auditing easier. (merge ac4896f007 jk/snprintf-truncation later to maint). * Many tests hardcode the raw object names, which would change once we migrate away from SHA-1. While some of them must test against exact object names, most of them do not have to use hardcoded constants in the test. The latter kind of tests have been updated to test the moral equivalent of the original without hardcoding the actual object names. Also contains various documentation updates and code clean-ups. Fixes since v2.17 ----------------- * "git shortlog cruft" aborted with a BUG message when run outside a Git repository. The command has been taught to complain about extra and unwanted arguments on its command line instead in such a case. (merge 4aa0161e83 ma/shortlog-revparse later to maint). * "git stash push -u -- " gave an unnecessary and confusing error message when there was no tracked files that match the , which has been fixed. (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint). * "git tag --contains no-such-commit" gave a full list of options after giving an error message. (merge 3bb0923f06 ps/contains-id-error-message later to maint). * "diff-highlight" filter (in contrib/) learned to undertand "git log --graph" output better. (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint). * when refs that do not point at committish are given, "git filter-branch" gave a misleading error messages. This has been corrected. (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint). * "git submodule status" misbehaved on a submodule that has been removed from the working tree. (merge 74b6bda32f rs/status-with-removed-submodule later to maint). * When credential helper exits very quickly without reading its input, it used to cause Git to die with SIGPIPE, which has been fixed. (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint). * "git rebase --keep-empty" still removed an empty commit if the other side contained an empty commit (due to the "does an equivalent patch exist already?" check), which has been corrected. (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint). * Some codepaths, including the refs API, get and keep relative paths, that go out of sync when the process does chdir(2). The chdir-notify API is introduced to let these codepaths adjust these cached paths to the new current directory. (merge fb9c2d2703 jk/relative-directory-fix later to maint). * "cd sub/dir && git commit ../path" ought to record the changes to the file "sub/path", but this regressed long time ago. (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint). * Recent introduction of "--log-destination" option to "git daemon" did not work well when the daemon was run under "--inetd" mode. (merge e67d906d73 lw/daemon-log-destination later to maint). * Small fix to the autoconf build procedure. (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint). * Fix an unexploitable (because the oversized contents are not under attacker's control) buffer overflow. (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint). * Recent simplification of build procedure forgot a bit of tweak to the build procedure of contrib/mw-to-git/ (merge d8698987f3 ab/simplify-perl-makefile later to maint). * Moving a submodule that itself has submodule in it with "git mv" forgot to make necessary adjustment to the nested sub-submodules; now the codepath learned to recurse into the submodules. * "git config --unset a.b", when "a.b" is the last variable in an otherwise empty section "a", left an empty section "a" behind, and worse yet, a subsequent "git config a.c value" did not reuse that empty shell and instead created a new one. These have been (partially) corrected. (merge c71d8bb38a js/empty-config-section-fix later to maint). * "git worktree remove" learned that "-f" is a shorthand for "--force" option, just like for "git worktree add". (merge d228eea514 sb/worktree-remove-opt-force later to maint). * The completion script (in contrib/) learned to clear cached list of command line options upon dot-sourcing it again in a more efficient way. (merge 94408dc71c sg/completion-clear-cached later to maint). * "git svn" had a minor thinko/typo which has been fixed. (merge 51db271587 ab/git-svn-get-record-typofix later to maint). * During a "rebase -i" session, the code could give older timestamp to commits created by later "pick" than an earlier "reword", which has been corrected. (merge 12f7babd6b js/ident-date-fix later to maint). * "git submodule status" did not check the symbolic revision name it computed for the submodule HEAD is not the NULL, and threw it at printf routines, which has been corrected. (merge 0b5e2ea7cf nd/submodule-status-fix later to maint). * When fed input that already has In-Reply-To: and/or References: headers and told to add the same information, "git send-email" added these headers separately, instead of appending to an existing one, which is a violation of the RFC. This has been corrected. (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint). * "git fast-export" had a regression in v2.15.0 era where it skipped some merge commits in certain cases, which has been corrected. (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint). * The code did not propagate the terminal width to subprocesses via COLUMNS environment variable, which it now does. This caused trouble to "git column" helper subprocess when "git tag --column=row" tried to list the existing tags on a display with non-default width. (merge b5d5a567fb nd/term-columns later to maint). * We learned that our source files with ".pl" and ".py" extensions are Perl and Python files respectively and changes to them are better viewed as such with appropriate diff drivers. (merge 7818b619e2 ab/perl-python-attrs later to maint). * "git rebase -i" sometimes left intermediate "# This is a combination of N commits" message meant for the human consumption inside an editor in the final result in certain corner cases, which has been fixed. (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint). * A test to see if the filesystem normalizes UTF-8 filename has been updated to check what we need to know in a more direct way, i.e. a path created in NFC form can be accessed with NFD form (or vice versa) to cope with APFS as well as HFS. (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint). * "git format-patch --cover --attach" created a broken MIME multipart message for the cover letter, which has been fixed by keeping the cover letter as plain text file. (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint). * The split-index feature had a long-standing and dormant bug in certain use of the in-core merge machinery, which has been fixed. (merge 7db118303a en/unpack-trees-split-index-fix later to maint). * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not render illustration in a literal block correctly when indented with HT by default. The problem is fixed by forcing 8-space tabs. (merge 379805051d bc/asciidoctor-tab-width later to maint). * Code clean-up to adjust to a more recent lockfile API convention that allows lockfile instances kept on the stack. (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint). * the_repository->index is not a allocated piece of memory but repo_clear() indiscriminately attempted to free(3) it, which has been corrected. (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint). * Code clean-up to avoid non-standard-conformant pointer arithmetic. (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint). * Code clean-up to turn history traversal more robust in a semi-corrupt repository. (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint). * "git update-ref A B" is supposed to ensure that ref A does not yet exist when B is a NULL OID, but this check was not done correctly for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD. * "git submodule update" and "git submodule add" supported the "--reference" option to borrow objects from a neighbouring local repository like "git clone" does, but lacked the more recent invention "--dissociate". Also "git submodule add" has been taught to take the "--progress" option. (merge a0ef29341a cf/submodule-progress-dissociate later to maint). * Update credential-netrc helper (in contrib/) to allow customizing the GPG used to decrypt the encrypted .netrc file. (merge 786ef50a23 lm/credential-netrc later to maint). * "git submodule update" attempts two different kinds of "git fetch" against the upstream repository to grab a commit bound at the submodule's path, but it incorrectly gave up if the first kind (i.e. a normal fetch) failed, making the second "last resort" one (i.e. fetching an exact commit object by object name) ineffective. This has been corrected. (merge e30d833671 sb/submodule-update-try-harder later to maint). * Error behaviour of "git grep" when it cannot read the index was inconsistent with other commands that uses the index, which has been corrected to error out early. (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint). * We used to call regfree() after regcomp() failed in some codepaths, which have been corrected. (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint). * Other minor doc, test and build updates and code cleanups. (merge 248f66ed8e nd/trace-with-env later to maint). (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint). (merge 5988eb631a ab/doc-hash-brokenness later to maint). (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint). (merge 05e293c1ac jk/flockfile-stdio later to maint). (merge e9184b0789 jk/t5561-missing-curl later to maint). (merge b1801b85a3 nd/worktree-move later to maint). (merge bbd374dd20 ak/bisect-doc-typofix later to maint). (merge 4855f06fb3 mn/send-email-credential-doc later to maint). (merge 8523b1e355 en/doc-typoes later to maint). (merge 43b44ccfe7 js/t5404-path-fix later to maint). (merge decf711fc1 ps/test-chmtime-get later to maint). (merge 22d11a6e8e es/worktree-docs later to maint). (merge 92a5dbbc22 tg/use-git-contacts later to maint). (merge adc887221f tq/t1510 later to maint). (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint). (merge 73364e4f10 tz/doc-git-urls-reference later to maint). (merge cd1e606bad bc/mailmap-self later to maint). (merge f7997e3682 ao/config-api-doc later to maint). (merge ee930754d8 jk/apply-p-doc later to maint). (merge 011b648646 nd/pack-format-doc later to maint). (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint). (merge f6b82970aa sg/t5516-fixes later to maint). (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint). (merge 7d0ee47c11 js/test-unset-prereq later to maint). (merge 5356a3c354 ah/misc-doc-updates later to maint). (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint). (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint). (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint). (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint). ---------------------------------------------------------------- Changes since v2.17.0 are as follows: Anders Kaseorg (1): Documentation/git-bisect.txt: git bisect term → git bisect terms Andreas Heiduk (9): git-svn: search --authors-prog in PATH too git-svn: allow empty email-address using authors-prog and authors-file doc: improve formatting in githooks.txt doc: align 'diff --no-index' in text and synopsis doc: clarify ignore rules for git ls-files doc: add '-d' and '-o' for 'git push' git-svn: remove ''--add-author-from' for 'commit-diff' doc: add note about shell quoting to revision.txt doc: normalize [--options] to [options] in git-diff Antonio Ospite (1): doc: fix config API documentation about config_with_options Beat Bolli (1): git-gui: search for all current SSH key types Ben Peart (7): fsmonitor: fix incorrect buffer size when printing version number fsmonitor: force index write after full scan test-drop-caches: simplify delay loading of NtSetSystemInformation merge: update documentation for {merge,diff}.renameLimit merge: add merge.renames config setting merge: pass aggressive when rename detection is turned off add status config and command line options for rename detection Bill Ritcher (1): mergetools: add support for guiffy Birger Skogeng Pedersen (1): git-gui: bind CTRL/CMD+numpad ENTER to do_commit Brandon Williams (79): pkt-line: introduce packet_read_with_status pkt-line: allow peeking a packet line without consuming it pkt-line: add delim packet support upload-pack: convert to a builtin upload-pack: factor out processing lines transport: use get_refs_via_connect to get refs connect: convert get_remote_heads to use struct packet_reader connect: discover protocol version outside of get_remote_heads transport: store protocol version protocol: introduce enum protocol_version value protocol_v2 test-pkt-line: introduce a packet-line test helper serve: introduce git-serve ls-refs: introduce ls-refs server command connect: request remote refs using v2 transport: convert get_refs_list to take a list of ref prefixes transport: convert transport_get_remote_refs to take a list of ref prefixes ls-remote: pass ref prefixes when requesting a remote's refs fetch: pass ref prefixes when fetching push: pass ref prefixes when pushing upload-pack: introduce fetch server command fetch-pack: perform a fetch using v2 fetch-pack: support shallow requests connect: refactor git_connect to only get the protocol version once connect: don't request v2 when pushing transport-helper: remove name parameter transport-helper: refactor process_connect_service transport-helper: introduce stateless-connect pkt-line: add packet_buf_write_len function remote-curl: create copy of the service name remote-curl: store the protocol version the server responded with http: allow providing extra headers for http requests http: don't always add Git-Protocol header http: eliminate "# service" line when using protocol v2 remote-curl: implement stateless-connect command remote-curl: don't request v2 when pushing commit: allow partial commits with relative paths serve: introduce the server-option capability ls-remote: send server options when using protocol v2 fetch: send server options when using protocol v2 refspec: move refspec parsing logic into its own file refspec: rename struct refspec to struct refspec_item refspec: factor out parsing a single refspec refspec: introduce struct refspec refspec: convert valid_fetch_refspec to use parse_refspec submodule--helper: convert push_check to use struct refspec pull: convert get_tracking_branch to use refspec_item_init transport: convert transport_push to use struct refspec remote: convert check_push_refs to use struct refspec remote: convert match_push_refs to use struct refspec clone: convert cmd_clone to use refspec_item_init fast-export: convert to use struct refspec remote: convert push refspecs to struct refspec remote: convert fetch refspecs to struct refspec remote: remove add_prune_tags_to_fetch_refspec transport-helper: convert to use struct refspec fetch: convert fetch_one to use struct refspec fetch: convert refmap to use struct refspec refspec: remove the deprecated functions fetch: convert do_fetch to take a struct refspec fetch: convert get_ref_map to take a struct refspec fetch: convert prune_refs to take a struct refspec remote: convert get_stale_heads to take a struct refspec remote: convert apply_refspecs to take a struct refspec remote: convert query_refspecs to take a struct refspec remote: convert get_ref_match to take a struct refspec remote: convert match_explicit_refs to take a struct refspec push: check for errors earlier push: convert to use struct refspec transport: convert transport_push to take a struct refspec send-pack: store refspecs in a struct refspec transport: remove transport_verify_remote_names http-push: store refspecs in a struct refspec remote: convert match_push_refs to take a struct refspec remote: convert check_push_refs to take a struct refspec submodule: convert push_unpushed_submodules to take a struct refspec refspec: consolidate ref-prefix generation logic fetch: generate ref-prefixes when using a configured refspec remote-curl: accept all encodings supported by curl remote-curl: accept compressed responses with protocol v2 Casey Fitzpatrick (3): submodule: clean up substitutions in script submodule: add --progress option to add command submodule: add --dissociate option to add/update commands Christian Couder (6): perf/aggregate: add display_dir() perf/aggregate: add --sort-by=regression option perf/run: add --subsection option t/perf: add scripts to bisect performance regressions perf/aggregate: use Getopt::Long for option parsing perf/bisect_run_script: disable codespeed Christian Hesse (2): perl: fix installing modules from contrib Makefile: mark perllibdir as a .PHONY target Clemens Buchacher (2): git-gui: workaround ttk:style theme use completion: improve ls-files filter performance Dan Jacques (3): Makefile: generate Perl header from template file Makefile: add Perl runtime prefix support exec_cmd: RUNTIME_PREFIX on some POSIX systems Derrick Stolee (20): packfile: define and use bsearch_pack() sha1_name: use bsearch_pack() for abbreviations csum-file: rename hashclose() to finalize_hashfile() csum-file: refactor finalize_hashfile() method commit-graph: add format document graph: add commit graph design document commit-graph: create git-commit-graph builtin commit-graph: implement write_commit_graph() commit-graph: implement git-commit-graph write commit-graph: implement git commit-graph read commit-graph: add core.commitGraph setting commit-graph: close under reachability commit: integrate commit graph with commit parsing commit-graph: read only from specific pack-indexes commit-graph: build graph from starting commits commit-graph: implement "--append" option treewide: rename tree to maybe_tree commit: create get_commit_tree() method treewide: replace maybe_tree with accessor methods commit-graph: lazy-load trees for commits Drew DeVault (1): git-send-email: allow re-editing of message Eckhard S. Maaß (1): wt-status: use settings from git_diff_ui_config Elijah Newren (70): directory rename detection: basic testcases directory rename detection: directory splitting testcases directory rename detection: testcases to avoid taking detection too far directory rename detection: partially renamed directory testcase/discussion directory rename detection: files/directories in the way of some renames directory rename detection: testcases checking which side did the rename directory rename detection: more involved edge/corner testcases directory rename detection: testcases exploring possibly suboptimal merges directory rename detection: miscellaneous testcases to complete coverage directory rename detection: tests for handling overwriting untracked files directory rename detection: tests for handling overwriting dirty files merge-recursive: move the get_renames() function merge-recursive: introduce new functions to handle rename logic merge-recursive: fix leaks of allocated renames and diff_filepairs merge-recursive: make !o->detect_rename codepath more obvious merge-recursive: split out code for determining diff_filepairs merge-recursive: make a helper function for cleanup for handle_renames merge-recursive: add get_directory_renames() merge-recursive: check for directory level conflicts merge-recursive: add computation of collisions due to dir rename & merging merge-recursive: check for file level conflicts then get new name merge-recursive: when comparing files, don't include trees merge-recursive: apply necessary modifications for directory renames merge-recursive: avoid clobbering untracked files with directory renames merge-recursive: fix overwriting dirty files involved in renames merge-recursive: fix remaining directory rename + dirty overwrite cases directory rename detection: new testcases showcasing a pair of bugs merge-recursive: avoid spurious rename/rename conflict from dir renames merge-recursive: ensure we write updates for directory-renamed file Documentation: fix several one-character-off spelling errors Documentation: normalize spelling of 'normalised' directory rename detection: basic testcases directory rename detection: directory splitting testcases directory rename detection: testcases to avoid taking detection too far directory rename detection: partially renamed directory testcase/discussion directory rename detection: files/directories in the way of some renames directory rename detection: testcases checking which side did the rename directory rename detection: more involved edge/corner testcases directory rename detection: testcases exploring possibly suboptimal merges directory rename detection: miscellaneous testcases to complete coverage directory rename detection: tests for handling overwriting untracked files directory rename detection: tests for handling overwriting dirty files merge-recursive: move the get_renames() function merge-recursive: introduce new functions to handle rename logic merge-recursive: fix leaks of allocated renames and diff_filepairs merge-recursive: make !o->detect_rename codepath more obvious merge-recursive: split out code for determining diff_filepairs merge-recursive: make a helper function for cleanup for handle_renames Make running git under other debugger-like programs easy unpack_trees: fix breakage when o->src_index != o->dst_index merge-recursive: add get_directory_renames() merge-recursive: check for directory level conflicts merge-recursive: add computation of collisions due to dir rename & merging merge-recursive: check for file level conflicts then get new name merge-recursive: when comparing files, don't include trees merge-recursive: apply necessary modifications for directory renames merge-recursive: avoid clobbering untracked files with directory renames merge-recursive: fix overwriting dirty files involved in renames merge-recursive: fix remaining directory rename + dirty overwrite cases directory rename detection: new testcases showcasing a pair of bugs merge-recursive: avoid spurious rename/rename conflict from dir renames merge-recursive: improve add_cacheinfo error handling merge-recursive: move more is_dirty handling to merge_content merge-recursive: avoid triggering add_cacheinfo error with dirty mod t6046: testcases checking whether updates can be skipped in a merge merge-recursive: fix was_tracked() to quit lying with some renamed paths merge-recursive: fix remainder of was_dirty() to use original index merge-recursive: make "Auto-merging" comment show for other merges merge-recursive: fix check for skipability of working tree updates merge-recursive: provide pair of `unpack_trees_{start,finish}()` Eric Sunshine (5): t3200: verify "branch --list" sanity when rebasing from detached HEAD t2028: tighten grep expression to make "move worktree" test more robust git-worktree.txt: recommend 'git worktree remove' over manual deletion git-worktree.txt: unify command-line prompt in example blocks configure.ac: fix botched FREAD_READS_DIRECTORIES check Erik E Brady (1): credential: ignore SIGPIPE when writing to credential helpers Florian Gamböck (1): completion: load completion file for external subcommand Harald Nordgren (1): ls-remote: create '--sort' option Jameson Miller (3): fast-import: rename mem_pool type to mp_block fast-import: introduce mem_pool type mem-pool: move reusable parts of memory pool into its own file Jeff King (54): diff-highlight: correct test graph diagram diff-highlight: use test_tick in graph test diff-highlight: prefer "echo" to "cat" in tests diff-highlight: test interleaved parallel lines of history diff-highlight: test graphs with --color diff-highlight: use flush() helper consistently diff-highlight: detect --graph by indent set_git_dir: die when setenv() fails add chdir-notify API set_work_tree: use chdir_notify refs: use chdir_notify to update cached relative paths config: move flockfile() closer to unlocked functions t5561: drop curl stderr redirects t5561: skip tests if curl is not available ref-filter: use "struct object_id" consistently ref-filter: make ref_array_item allocation more consistent ref-filter: factor ref_array pushing into its own function t7004: fix mistaken tag name gpg-interface: handle bool user.signingkey gpg-interface: modernize function declarations gpg-interface: use size_t for signature buffer size gpg-interface: fix const-correctness of "eol" pointer gpg-interface: extract gpg line matching helper gpg-interface: find the last gpg signature line apply: clarify "-p" documentation pager: set COLUMNS to term_columns() mark_tree_contents_uninteresting(): drop missing object check mark_parents_uninteresting(): drop missing object check mark_parents_uninteresting(): replace list with stack mark_parents_uninteresting(): avoid most allocation get_main_ref_store: BUG() when outside a repository config: die when --blob is used outside a repository http: use strbufs instead of fixed buffers log_write_email_headers: use strbufs shorten_unambiguous_ref: use xsnprintf fmt_with_err: add a comment that truncation is OK submodule-config: verify submodule names as paths is_ntfs_dotgit: use a size_t for traversing string is_hfs_dotgit: match other .git files skip_prefix: add case-insensitive variant verify_path: drop clever fallthrough verify_dotfile: mention case-insensitivity in comment update-index: stat updated files earlier verify_path: disallow symlinks in .gitmodules index-pack: make fsck error message more specific fsck: simplify ".git" check fsck: actually fsck blob data fsck: detect gitmodules files fsck: handle promisor objects in .gitmodules check fsck: check .gitmodules content fsck: call fsck_finish() after fscking objects unpack-objects: call fsck_finish() after fscking objects index-pack: check .gitmodules files with --strict fsck: complain when .gitmodules is a symlink Johannes Schindelin (68): git_config_set: fix off-by-two t1300: rename it to reflect that `repo-config` was deprecated t1300: demonstrate that --replace-all can "invent" newlines config --replace-all: avoid extra line breaks t1300: avoid relying on a bug t1300: remove unreasonable expectation from TODO t5404: relax overzealous test t1300: add a few more hairy examples of sections becoming empty t1300: `--unset-all` can leave an empty section behind (bug) config: introduce an optional event stream while parsing config: avoid using the global variable `store` config_set_store: rename some fields for consistency git_config_set: do not use a state machine git_config_set: make use of the config parser's event stream git config --unset: remove empty sections (in the common case) git_config_set: reuse empty sections exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows mingw/msvc: use the new-style RUNTIME_PREFIX helper color: introduce support for colorizing stderr push: test to verify that push errors are colored config: document the settings to colorize push errors/hints gettext: avoid initialization if the locale dir is not present git_setup_gettext: plug memory leak sequencer: avoid using errno clobbered by rollback_lock_file() sequencer: make rearrange_squash() a bit more obvious sequencer: refactor how original todo list lines are accessed sequencer: offer helpful advice when a command was rescheduled sequencer: introduce new commands to reset the revision sequencer: introduce the `merge` command sequencer: fast-forward `merge` commands, if possible rebase-helper --make-script: introduce a flag to rebase merges rebase: introduce the --rebase-merges option sequencer: make refs generated by the `label` command worktree-local sequencer: handle post-rewrite for merge commands rebase --rebase-merges: avoid "empty merges" pull: accept --rebase=merges to recreate the branch topology rebase -i: introduce --rebase-merges=[no-]rebase-cousins rebase -i --rebase-merges: add a section to the man page argv_array: offer to split a string by whitespace commit: Let the callback of for_each_mergetag return on error replace: avoid using die() to indicate a bug tests: introduce test_unset_prereq, for debugging replace: "libify" create_graft() and callees replace: prepare create_graft() for converting graft files wholesale replace: introduce --convert-graft-file Add a test for `git replace --convert-graft-file` Deprecate support for .git/info/grafts filter-branch: stop suggesting to use grafts technical/shallow: stop referring to grafts technical/shallow: describe why shallow cannot use replace refs Remove obsolete script to convert grafts to replace refs rebase -i: demonstrate bugs with fixup!/squash! commit messages rebase -i: Handle "combination of commits" with GETTEXT_POISON sequencer: always commit without editing when asked for rebase --skip: clean up commit message after a failed fixup/squash sequencer: extract helper to update active_cache_tree sequencer: learn about the special "fake root commit" handling rebase -i --root: let the sequencer handle even the initial part sequencer: allow introducing new root commits rebase --rebase-merges: a "merge" into a new root is a fast-forward rebase --rebase-merges: root commits can be cousins, too test-tool: help verifying BUG() code paths run-command: use BUG() to report bugs, not die() Replace all die("BUG: ...") calls by BUG() ones Convert remaining die*(BUG) messages config: a user-provided invalid section is not a BUG is_ntfs_dotgit: match other .git files is_{hfs,ntfs}_dotgitmodules: add tests Johannes Sixt (2): sequencer: reset the committer date before commits git: add -P as a short option for --no-pager Jonathan Nieder (5): sha1_file: allow map_sha1_file_1 to handle arbitrary repositories sha1_file: allow sha1_loose_object_info to handle arbitrary repositories Makefile: remove unused @@PERLLIBDIR@@ substitution variable Makefile: quote $INSTLIBDIR when passing it to sed packfile: add repository argument to packed_object_info Jonathan Tan (4): grep: remove "repo" arg from non-supporting funcs upload-pack: fix error message typo upload-pack: read config when serving protocol v2 {fetch,upload}-pack: support filter in protocol v2 Junio C Hamano (18): stash: fix nonsense pipeline The first batch for 2.18 cycle The second batch for 2.18 The third batch for 2.18 Revert "Merge branch 'en/rename-directory-detection'" gc: do not upcase error message shown with die() parseopt: handle malformed --expire arguments more nicely The fourth batch for 2.18 The fifth batch for 2.18 argv-array: return the pushed string from argv_push*() Git 2.13.7 Git 2.14.4 Git 2.15.2 Git 2.16.4 Git 2.17.1 The sixth batch for 2.18 The seventh batch for 2.18 Git 2.18-rc0 Kaartic Sivaraam (1): branch --list: print useful info whilst interactive rebasing a detached HEAD Lars Schneider (10): strbuf: remove unnecessary NUL assignment in xstrdup_tolower() strbuf: add xstrdup_toupper() strbuf: add a case insensitive starts_with() utf8: teach same_encoding() alternative UTF encoding names utf8: add function to detect prohibited UTF-16/32 BOM utf8: add function to detect a missing UTF-16/32 BOM convert: add 'working-tree-encoding' attribute convert: check for detectable errors in UTF encodings convert: add tracing for 'working-tree-encoding' attribute convert: add round trip check based on 'core.checkRoundtripEncoding' Leif Middelschulte (1): merge-recursive: give notice when submodule commit gets fast-forwarded Loganaden Velvindron (1): http: allow use of TLS 1.3 Lucas Werkmeister (1): daemon.c: fix condition for redirecting stderr Luis Marsano (2): git-credential-netrc: adapt to test framework for git git-credential-netrc: accept gpg option Martin Ågren (24): git-shortlog.txt: reorder usages shortlog: add usage-string for stdin-reading shortlog: disallow left-over arguments outside repo doc: convert \--option to --option doc: convert [\--] to [--] git-[short]log.txt: unify quoted standalone -- git-submodule.txt: quote usage in monospace, drop backslash fast-export: fix regression skipping some merge-commits http-fetch: make `-a` standard behaviour walker: drop fields of `struct walker` which are always 1 t/helper/test-write-cache: clean up lock-handling refs.c: do not die if locking fails in `write_pseudoref()` refs.c: do not die if locking fails in `delete_pseudoref()` lock_file: make function-local locks non-static lock_file: move static locks into functions refs.c: refer to "object ID", not "sha1", in error messages t1400: add tests around adding/deleting pseudorefs refs: handle zero oid for pseudorefs merge: setup `opts` later in `checkout_fast_forward()` config: free resources of `struct config_store_data` config: let `config_store_data_clear()` handle `value_regex` config: let `config_store_data_clear()` handle `key` regex: do not call `regfree()` if compilation fails unpack_trees_options: free messages when done Michal Nazarewicz (1): send-email: simplify Gmail example in the documentation Michele Locati (1): filter-branch: return 2 when nothing to rewrite Nguyễn Thái Ngọc Duy (88): repository: initialize the_repository in main() repository.c: move env-related setup code back to environment.c repository.c: delete dead functions sha1_file.c: move delayed getenv(altdb) back to setup_git_env() repository: delete ignore_env member gc.txt: more details about what gc does worktree: delete dead code worktree prune: improve prune logic when worktree is moved repository.h: add comment and clarify repo_set_gitdir git.c: move cmd_struct declaration up git.c: add hidden option --list-parseopt-builtins completion: mention the oldest version we need to support completion: factor out _git_xxx calling code completion: add --option completion for most builtin commands completion: delete option-only completion commands completion: use __gitcomp_builtin in _git_ls_tree completion: use __gitcomp_builtin in _git_cherry packfile: keep prepare_packed_git() private t/helper: add an empty test-tool program t/helper: merge test-chmtime into test-tool t/helper: merge test-sha1 into test-tool t/helper: merge test-lazy-init-name-hash into test-tool t/helper: merge test-config into test-tool t/helper: merge test-ctype into test-tool t/helper: merge test-date into test-tool t/helper: merge (unused) test-delta into test-tool t/helper: merge test-drop-caches into test-tool t/helper: merge test-dump-cache-tree into test-tool t/helper: merge test-dump-split-index into test-tool t/helper: merge test-example-decorate into test-tool t/helper: merge test-genrandom into test-tool t/helper: merge test-hashmap into test-tool t/helper: merge test-index-version into test-tool t/helper: merge (unused) test-match-trees into test-tool t/helper: merge (unused) test-mergesort into test-tool t/helper: merge test-mktemp into test-tool t/helper: merge test-online-cpus into test-tool t/helper: merge test-path-utils into test-tool t/helper: merge test-prio-queue into test-tool t/helper: merge test-read-cache into test-tool t/helper: merge test-ref-store into test-tool t/helper: merge test-regex into test-tool t/helper: merge test-revision-walking into test-tool t/helper: merge test-run-command into test-tool t/helper: merge test-scrap-cache-tree into test-tool t/helper: merge test-sha1-array into test-tool t/helper: merge test-sigchain into test-tool t/helper: merge test-strcmp-offset into test-tool t/helper: merge test-string-list into test-tool t/helper: merge test-submodule-config into test-tool t/helper: merge test-subprocess into test-tool t/helper: merge test-urlmatch-normalization into test-tool t/helper: merge test-wildmatch into test-tool t/helper: merge test-write-cache into test-tool trace.c: export trace_setup_key read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean pack-objects: a bit of document about struct object_entry pack-objects: turn type and in_pack_type to bitfields pack-objects: use bitfield for object_entry::dfs_state pack-objects: use bitfield for object_entry::depth pack-objects: move in_pack_pos out of struct object_entry pack-objects: move in_pack out of struct object_entry pack-objects: refer to delta objects by index instead of pointer pack-objects: shrink z_delta_size field in struct object_entry pack-objects: don't check size when the object is bad pack-objects: clarify the use of object_entry::size pack-objects: shrink size field in struct object_entry pack-objects: shrink delta_size field in struct object_entry pack-objects: reorder members to shrink struct object_entry ci: exercise the whole test suite with uncommon code in pack-objects t7700: have closing quote of a test at the beginning of line repack: add --keep-pack option gc: add --keep-largest-pack option gc: add gc.bigPackThreshold config gc: handle a corner case in gc.bigPackThreshold gc --auto: exclude base pack if not enough mem to "repack -ad" pack-objects: show some progress when counting kept objects connect.c: mark die_initial_contact() NORETURN Makefile: detect compiler and enable more warnings in DEVELOPER=1 submodule--helper: don't print null in 'submodule status' doc: keep first level section header in upper case pack-objects: validation and documentation about unreachable options completion: fix misspelled config key aliasesfiletype repository: fix free problem with repo_clear(the_repository) pack-format.txt: more details on pack file format column: fix off-by-one default width commit.h: rearrange 'index' to shrink struct commit travis-ci: run gcc-8 on linux-gcc jobs Olga Telezhnaya (6): ref-filter: add shortcut to work with strbufs ref-filter: start adding strbufs with errors ref-filter: add return value && strbuf to handlers ref-filter: change parsing function error handling ref-filter: add return value to parsers ref-filter: libify get_ref_atom_value() Paul-Sebastian Ungureanu (2): parse-options: do not show usage upon invalid option value t/helper: 'test-chmtime (--get|-g)' to print only the mtime Philip Oakley (1): Avoid multiple PREFIX definitions Phillip Wood (7): rebase --root: stop assuming squash_onto is unset rebase -i --keep-empty: don't prune empty commits rebase: respect --no-keep-empty rebase: extend --signoff support rebase -p: error out if --signoff is given rebase --keep-empty: always use interactive rebase rebase --rebase-merges: add test for --keep-empty Pratik Karki (1): test: avoid pipes in git related commands for test Ramsay Jones (1): BUG_exit_code: fix sparse "symbol not declared" warning René Scharfe (8): sha1_name: use bsearch_pack() in unique_in_pack() bisect: use oid_to_hex() for converting object_id hashes to hex strings run-command: use strbuf_addstr() for adding a string to a strbuf submodule: check for NULL return of get_submodule_ref_store() replace_object: use oidmap fast-export: avoid NULL pointer arithmetic t5512: run git fetch inside test fsmonitor: use internal argv_array of struct child_process Ryan Dammrose (1): push: colorize errors SZEDER Gábor (22): test_must_be_empty: simplify file existence check t9902-completion: add tests demonstrating issues with quoted pathnames completion: move __git_complete_index_file() next to its helpers completion: simplify prefix path component handling during path completion completion: support completing non-ASCII pathnames completion: improve handling quoted paths on the command line completion: let 'ls-files' and 'diff-index' filter matching paths completion: use 'awk' to strip trailing path components t9902-completion: ignore COMPREPLY element order in some tests completion: remove repeated dirnames with 'awk' during path completion completion: improve handling quoted paths in 'git ls-files's output completion: fill COMPREPLY directly when completing paths completion: reduce overhead of clearing cached --options docs/git-gc: fix minor rendering issue coccinelle: avoid wrong transformation suggestions from commit.cocci t6050-replace: don't disable stdin for the whole test script t5310-pack-bitmaps: make JGit tests work with GIT_TEST_SPLIT_INDEX t5516-fetch-push: fix 'push with dry-run' test t5516-fetch-push: fix broken &&-chain t7005-editor: get rid of the SPACES_IN_FILENAMES prereq completion: don't return with error from __gitcomp_file_direct() t9902-completion: exercise __git_complete_index_file() directly Sergey Organov (1): glossary: substitute "ancestor" for "direct ancestor" in 'push' description. Stefan Agner (1): send-email: avoid duplicate In-Reply-To/References Stefan Beller (81): repository: introduce raw object store field object-store: migrate alternates struct and functions from cache.h object-store: move alt_odb_list and alt_odb_tail to object store object-store: free alt_odb_list object-store: move packed_git and packed_git_mru to object store object-store: close all packs upon clearing the object store pack: move prepare_packed_git_run_once to object store pack: move approximate object count to object store sha1_file: add raw_object_store argument to alt_odb_usable sha1_file: add repository argument to link_alt_odb_entry sha1_file: add repository argument to read_info_alternates sha1_file: add repository argument to link_alt_odb_entries sha1_file: add repository argument to prepare_alt_odb sha1_file: allow link_alt_odb_entries to handle arbitrary repositories sha1_file: allow prepare_alt_odb to handle arbitrary repositories sha1_file: add repository argument to sha1_file_name sha1_file: add repository argument to stat_sha1_file sha1_file: add repository argument to open_sha1_file sha1_file: add repository argument to map_sha1_file_1 sha1_file: add repository argument to map_sha1_file sha1_file: add repository argument to sha1_loose_object_info sha1_file: allow sha1_file_name to handle arbitrary repositories sha1_file: allow stat_sha1_file to handle arbitrary repositories sha1_file: allow open_sha1_file to handle arbitrary repositories sha1_file: allow map_sha1_file to handle arbitrary repositories packfile: allow prepare_packed_git_mru to handle arbitrary repositories packfile: allow rearrange_packed_git to handle arbitrary repositories packfile: allow install_packed_git to handle arbitrary repositories packfile: add repository argument to prepare_packed_git_one packfile: add repository argument to prepare_packed_git packfile: add repository argument to reprepare_packed_git packfile: allow prepare_packed_git_one to handle arbitrary repositories packfile: allow prepare_packed_git to handle arbitrary repositories packfile: allow reprepare_packed_git to handle arbitrary repositories packfile: add repository argument to find_pack_entry packfile: allow find_pack_entry to handle arbitrary repositories submodule.h: drop declaration of connect_work_tree_and_git_dir submodule-config: allow submodule_free to handle arbitrary repositories submodule-config: add repository argument to submodule_from_{name, path} submodule-config: remove submodule_from_cache submodule: fixup nested submodules after moving the submodule write_or_die.c: rename to use dashes in file name unicode_width.h: rename to use dash in file name exec_cmd: rename to use dash in file name sha1_name.c: rename to use dash in file name sha1_file.c: rename to use dash in file name replace_object.c: rename to use dash in file name replace-object: move replace_map to object store object-store: move lookup_replace_object to replace-object.h replace-object: eliminate replace objects prepared flag replace-object: check_replace_refs is safe in multi repo environment refs: add repository argument to get_main_ref_store refs: add repository argument to for_each_replace_ref replace-object: add repository argument to prepare_replace_object replace-object: add repository argument to do_lookup_replace_object replace-object: add repository argument to lookup_replace_object refs: store the main ref store inside the repository struct refs: allow for_each_replace_ref to handle arbitrary repositories replace-object: allow prepare_replace_object to handle arbitrary repositories replace-object: allow do_lookup_replace_object to handle arbitrary repositories replace-object: allow lookup_replace_object to handle arbitrary repositories worktree: accept -f as short for --force for removal builtin/blame: dim uninteresting metadata lines builtin/blame: highlight recently changed lines builtin/blame: add new coloring scheme config cache.h: add repository argument to oid_object_info_extended cache.h: add repository argument to oid_object_info packfile: add repository argument to retry_bad_packed_offset packfile: add repository argument to packed_to_object_type packfile: add repository argument to read_object packfile: add repository argument to unpack_entry packfile: add repository argument to cache_or_unpack_entry cache.h: allow oid_object_info to handle arbitrary repositories git-rebase--interactive: clarify arguments object.c: free replace map in raw_object_store_clear replace-object.c: remove the_repository from prepare_replace_object grep: handle corrupt index files early git-submodule.sh: try harder to fetch a submodule submodule.c: move submodule merging to merge-recursive.c merge-recursive: i18n submodule merge output and respect verbosity object.c: clear replace map before freeing it Takuto Ikuta (1): fetch-pack.c: use oidset to check existence of loose object Tao Qingyun (1): t1510-repo-setup.sh: remove useless mkdir Taylor Blau (5): builtin/config.c: treat type specifiers singularly builtin/config.c: support `--type=` as preferred alias for `--` builtin/config: introduce `--default` config.c: introduce 'git_config_color' to parse ANSI colors builtin/config: introduce `color` type specifier Thomas Gummerer (10): stash push: avoid printing errors stash push -u: don't create empty stash stash: drop superfluos pathspec parameter SubmittingPatches: mention the git contacts command completion: stop showing 'save' for stash by default completion: make stash -p and alias for stash push -p worktree: remove extra members from struct add_opts worktree: improve message when creating a new worktree worktree: factor out dwim_branch function worktree: teach "add" to check out existing branches Todd Zullinger (1): doc/clone: update caption for GIT URLS cross-reference Torsten Bögershausen (1): test: correct detection of UTF8_NFD_TO_NFC for APFS Wink Saville (8): rebase-interactive: simplify pick_on_preserving_merges rebase: update invocation of rebase dot-sourced scripts rebase: reindent function git_rebase__interactive rebase: extract functions out of git_rebase__interactive rebase: add and use git_rebase__interactive__preserve_merges rebase: remove unused code paths from git_rebase__interactive rebase: remove unused code paths from git_rebase__interactive__preserve_merges rebase: remove merges_option and a blank line Yuki Kokubun (1): filter-branch: fix errors caused by refs that point at non-committish brian m. carlson (121): bulk-checkin: convert index_bulk_checkin to struct object_id builtin/write-tree: convert to struct object_id cache-tree: convert write_*_as_tree to object_id cache-tree: convert remnants to struct object_id resolve-undo: convert struct resolve_undo_info to object_id tree: convert read_tree_recursive to struct object_id ref-filter: convert grab_objectname to struct object_id strbuf: convert strbuf_add_unique_abbrev to use struct object_id wt-status: convert struct wt_status_state to object_id Convert find_unique_abbrev* to struct object_id http-walker: convert struct object_request to use struct object_id send-pack: convert remaining functions to struct object_id replace_object: convert struct replace_object to object_id builtin/mktag: convert to struct object_id archive: convert write_archive_entry_fn_t to object_id archive: convert sha1_file_to_archive to struct object_id builtin/index-pack: convert struct ref_delta_entry to object_id sha1_file: convert read_loose_object to use struct object_id sha1_file: convert check_sha1_signature to struct object_id streaming: convert open_istream to use struct object_id builtin/mktree: convert to struct object_id sha1_file: convert assert_sha1_type to object_id sha1_file: convert retry_bad_packed_offset to struct object_id packfile: convert unpack_entry to struct object_id Convert remaining callers of sha1_object_info_extended to object_id sha1_file: convert sha1_object_info* to object_id builtin/fmt-merge-msg: convert remaining code to object_id builtin/notes: convert static functions to object_id tree-walk: convert get_tree_entry_follow_symlinks internals to object_id streaming: convert istream internals to struct object_id tree-walk: convert tree entry functions to object_id sha1_file: convert read_object_with_reference to object_id sha1_file: convert read_sha1_file to struct object_id Convert lookup_replace_object to struct object_id sha1_file: introduce a constant for max header length convert: convert to struct object_id sha1_name: convert struct min_abbrev_data to object_id t1011: abstract away SHA-1-specific constants t1304: abstract away SHA-1-specific constants t1300: abstract away SHA-1-specific constants t1405: sort reflog entries in a hash-independent way t1411: abstract away SHA-1-specific constants t1507: abstract away SHA-1-specific constants t2020: abstract away SHA-1 specific constants t2101: modernize test style t2101: abstract away SHA-1-specific constants t2107: abstract away SHA-1-specific constants format-patch: make cover letters always text/plain cache: add a function to read an object ID from a buffer server-info: remove unused members from struct pack_info Remove unused member in struct object_context packfile: remove unused member from struct pack_entry packfile: convert has_sha1_pack to object_id sha1-file: convert freshen functions to object_id packfile: convert find_pack_entry to object_id packfile: abstract away hash constant values pack-objects: abstract away hash algorithm pack-redundant: abstract away hash algorithm tree-walk: avoid hard-coded 20 constant tree-walk: convert get_tree_entry_follow_symlinks to object_id fsck: convert static functions to struct object_id submodule-config: convert structures to object_id split-index: convert struct split_index to object_id Update struct index_state to use struct object_id pack-redundant: convert linked lists to use struct object_id index-pack: abstract away hash function constant commit: convert uses of get_sha1_hex to get_oid_hex dir: convert struct untracked_cache_dir to object_id http: eliminate hard-coded constants revision: replace use of hard-coded constants upload-pack: replace use of several hard-coded constants diff: specify abbreviation size in terms of the_hash_algo builtin/receive-pack: avoid hard-coded constants for push certs sha1-file: add functions for hex empty tree and blob OIDs builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo builtin/merge: switch tree functions to use object_id merge: convert empty tree constant to the_hash_algo sequencer: convert one use of EMPTY_TREE_SHA1_HEX submodule: convert several uses of EMPTY_TREE_SHA1_HEX wt-status: convert two uses of EMPTY_TREE_SHA1_HEX builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEX builtin/reset: convert use of EMPTY_TREE_SHA1_BIN sha1_file: convert cached object code to struct object_id cache-tree: use is_empty_tree_oid sequencer: use the_hash_algo for empty tree object ID dir: use the_hash_algo for empty blob object ID sha1_file: only expose empty object constants through git_hash_algo Update shell scripts to compute empty tree object ID add--interactive: compute the empty tree value merge-one-file: compute empty blob object ID Documentation: use 8-space tabs with Asciidoctor Documentation: render revisions correctly under Asciidoctor mailmap: update brian m. carlson's email address t/test-lib: add an SHA1 prerequisite t/test-lib: introduce ZERO_OID t: switch $_z40 to $ZERO_OID t/test-lib: introduce OID_REGEX t: switch $_x40 to $OID_REGEX t0000: annotate with SHA1 prerequisite t1007: annotate with SHA1 prerequisite t1512: skip test if not using SHA-1 t4044: skip test if not using SHA-1 t: skip pack tests if not using SHA-1 t2203: abstract away SHA-1-specific constants t3103: abstract away SHA-1-specific constants t3702: abstract away SHA-1-specific constants t3905: abstract away SHA-1-specific constants t4007: abstract away SHA-1-specific constants t4008: abstract away SHA-1-specific constants t4014: abstract away SHA-1-specific constants t4020: abstract away SHA-1-specific constants t4022: abstract away SHA-1-specific constants t4029: fix test indentation t4029: abstract away SHA-1-specific constants t4030: abstract away SHA-1-specific constants t/lib-diff-alternative: abstract away SHA-1-specific constants t4205: sort log output in a hash-independent way t4042: abstract away SHA-1-specific constants t4045: abstract away SHA-1-specific constants t4208: abstract away SHA-1-specific constants t5300: abstract away SHA-1-specific constants Ævar Arnfjörð Bjarmason (21): configure: fix a regression in PCRE v1 detection configure: detect redundant --with-libpcre & --with-libpcre1 Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1 Makefile: fix broken bindir_relative variable Makefile: add a gitexecdir_relative variable Makefile: optionally symlink libexec/git-core binaries to bin/git Remove contrib/examples/* doc hash-function-transition: clarify how older gits die on NewHash doc hash-function-transition: clarify what SHAttered means git-svn: avoid warning on undef readline() Makefile: add a DEVOPTS to suppress -Werror under DEVELOPER Makefile: add a DEVOPTS to get all of -Wextra git{,-blame}.el: remove old bitrotting Emacs code .gitattributes: add *.pl extension for Perl .gitattributes: use the "perl" differ for Perl .gitattributes: add a diff driver for Python sha1-name.c: remove stray newline sha1-array.h: align function arguments git-p4: change "commitish" typo to "committish" sha1-name.c: move around the collect_ambiguous() function get_short_oid: sort ambiguous objects by type, then SHA-1 [Less]
Posted 20 days ago by Johannes Schindelin
Dear Git users, It is my pleasure to announce that Git for Windows 2.17.1(2) is available from: https://gitforwindows.org/ Changes since Git for Windows v2.17.0 (April 3rd 2018) New Features * Comes with Git v2.17.1. * Comes with Perl ... [More] v5.26.2. * The installer now offers VS Code Insiders as option for Git's default editor if it is installed. * The vim configuration was modernized. * Certain errors, e.g. when pushing failed due to a non-fast-forwarding change, are now colorful. * Comes with cURL v7.60.0. * Comes with Git Credential Manager v1.16.1. * Comes with Git LFS v2.4.2. Bug Fixes * Fixed an issue with recursive clone (CVE 2018-11235). * This release really contains Git v2.17.1 (due to a bug in the release automation, Git for Windows v2.17.1 did not actually include Git v2.17.1). * Aliases that expand to shell commands can now take arguments containing curly brackets. * Ctrl+C is now handled in Git Bash in a sophisticated way: it emulates the way Ctrl+C is handled in Git CMD, but in a fine-grained way. * Based on the the new Ctrl+C handling in Git Bash, pressing Ctrl+C while git log is running will only stop Git from traversing the commit history, but keep the pager running. * Git was fixed to work correctly in Docker volumes inside Windows containers. * Tab completion of git status -- is now a lot faster. * Git for Windows now creates directory symlinks correctly when asked to. * The option to disable revocation checks with Secure Channel which was introduced in v2.16.1(2) now really works. * Git no longer enters an infinite loop when misspelling git status as, say, git Status.' Filename | SHA-256 -------- | ------- Git-2.17.1.2-64-bit.exe | 64a44bf936dfb1af0ca8b84d5e9accb138452f1fa40030706964c3bbd9e1c69b Git-2.17.1.2-32-bit.exe | 5dca054b53a2b38fbfc35f7b2390462d81f9ee62fa38b6f47d2d77365ab7f84a PortableGit-2.17.1.2-64-bit.7z.exe | 5664ee470caf44743be1514c71f77cb8ac360dd69a667e6dd668cc6531acb8ba PortableGit-2.17.1.2-32-bit.7z.exe | 74ef9dce2a185535dc5cbe7d53076df8558d739f29721be33b894d21b653f194 MinGit-2.17.1.2-64-bit.zip | 52e611a411cd58eaaab8218bb917cb4410b0c5733f234be6e581c6a9821b30ea MinGit-2.17.1.2-32-bit.zip | 8ab37946bef8955a65f907d82483cb8a457f7404061ca59b8399d3623e9e691b MinGit-2.17.1.2-busybox-64-bit.zip | f3aa489a67a600aefa8f20ee55f8977319bd3da568afaaadcd1b2e2cf21c575c MinGit-2.17.1.2-busybox-32-bit.zip | 7c335e5ecd340a2980c9003bf8fefd73eb9553636c41ff1f9eae5dbb29bf6dde Git-2.17.1.2-64-bit.tar.bz2 | b88192b92653df7bac19c87b18954ee5e1f513176633aca5ba0deaf51ad6e6f8 Git-2.17.1.2-32-bit.tar.bz2 | 4b284737e18d84b8a12b5138068f4fda7f9df93fa18ff5cde02d2b321cd943e5 pdbs-for-git-64-bit-2.17.1.2.a60968cf43-1.zip | b0e9961eab08a57a8a0f08620ea50cd4984c6f6f8bb48d66f3cfb872d9fea078 pdbs-for-git-32-bit-2.17.1.2.a60968cf43-1.zip | d902b96c155b243f4c8fa41056304ab6bc77763a1adef520a41cee97ca5f98c7 Ciao, Johannes [Less]
Posted 20 days ago by Junio C Hamano
The latest maintenance release Git v2.17.1 and updates to older maintenance tracks are now available at the usual places. The tarballs are found at: https://www.kernel.org/pub/software/scm/git/ The following public repositories all have a copy ... [More] of the 'v2.17.1' tag and the 'maint' branch that the tag points at, as well as the v2.13.7, v2.14.4, v2.15.2 and v2.16.4 tags: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = https://github.com/gitster/git ---------------------------------------------------------------- Git v2.17.1 Release Notes ========================= Fixes since v2.17 ----------------- * This release contains the same fixes made in the v2.13.7 version of Git, covering CVE-2018-11233 and 11235, and forward-ported to v2.14.4, v2.15.2 and v2.16.4 releases. See release notes to v2.13.7 for details. * In addition to the above fixes, this release adds support on the server side that reject pushes to repositories that attempt to create such problematic .gitmodules file etc. as tracked contents, to help hosting sites protect their customers with older clients by preventing malicious contents from spreading. This is enabled by the same receive.fsckObjects configuration on the server side as other security and sanity related checks (e.g. rejecting tree entry ".GIT" in a wrong case as tracked contents, targetting victims on case insensitive systems) that have already been implemented in the past releases. It is recommended to double check your configuration if you are hosting contents for other people. Git v2.13.7 Release Notes ========================= Fixes since v2.13.6 ------------------- * Submodule "names" come from the untrusted .gitmodules file, but we blindly append them to $GIT_DIR/modules to create our on-disk repo paths. This means you can do bad things by putting "../" into the name. We now enforce some rules for submodule names which will cause Git to ignore these malicious names (CVE-2018-11235). Credit for finding this vulnerability and the proof of concept from which the test script was adapted goes to Etienne Stalmans. * It was possible to trick the code that sanity-checks paths on NTFS into reading random piece of memory (CVE-2018-11233). Credit for fixing for these bugs goes to Jeff King, Johannes Schindelin and others. ---------------------------------------------------------------- [Less]
Posted about 1 month ago by Christian Couder
Hi everyone, The 39th edition of Git Rev News is now published: https://git.github.io/rev_news/2018/05/16/edition-39/ Thanks a lot to all the contributors: Johannes Schindelin, Elijah Newren and Luca Milanesio! Enjoy, Christian, Jakub, Markus and Gabriel.
Posted about 2 months ago
Hi all, This is a ONE-TIME announcement of Gitwin - a Git Server for Windows: Gitwin is a packaging of Git, OpenSSH, Nginx and many other related tools to make it a ready-to-use solution as a secure git repository on Windows. It supports SSH and ... [More] HTTP(S) transports as well as Gitweb with Highlighter and Gravatar support. A free edition is available. Please visit https://itefix.net/gitwin for more information Kind regards Tevfik Karagulle Itefix.net [Less]
Posted 2 months ago by Christian Couder
Hi everyone, The 38th edition of Git Rev News is now published: https://git.github.io/rev_news/2018/04/18/edition-38/ Thanks a lot to all the contributors: Jiang Xin, Jacob Keller, Luca Milanesio, Sergey Organov and Kaartic Sivaraam! Enjoy, Christian, Jakub, Markus and Gabriel.
Posted 3 months ago by Johannes Schindelin
Dear Git users, It is my pleasure to announce that Git for Windows 2.17.0 is available from: https://gitforwindows.org/ Changes since Git for Windows v2.16.3 (March 23rd 2018) New Features * Comes with Git v2.17.0. * Comes with OpenSSL ... [More] v1.0.2o. * Comes with Git Credential Manager v1.15.2. * Comes with OpenSSH v7.7p1. Bug Fixes * When git.exe is called with an invalid subcommand, it no longer complains about file handles. Filename | SHA-256 -------- | ------- Git-2.17.0-64-bit.exe | 39b3da8be4f1cf396663dc892cbf818cb4cfddb5bf08c13f13f5b784f6654496 Git-2.17.0-32-bit.exe | 65b710e39db3d83b04a8a4bd56f54e929fb0abbab728c0a9abbc0dace8e361d2 PortableGit-2.17.0-64-bit.7z.exe | 9625365ccb67d1c7c52f14824c5dd68af4cca2a1b83a2ba998ba9ba45b708551 PortableGit-2.17.0-32-bit.7z.exe | f2344ec1bb2d87a1ab7b05bd2e7bcbbbbf4de6ae8a6b1dc034b9de4b3a1f0ec9 MinGit-2.17.0-64-bit.zip | 14c780bfc7af2bb85f6860fd1927402c87393201b7639e5bc3ce0fdc5688931e MinGit-2.17.0-32-bit.zip | b1896b23d0d7ab7c1ad6705ce760763ae9802cff2d2e0aaee141806a2a319c4c MinGit-2.17.0-busybox-64-bit.zip | 6f4599f367f784087e96f5c7689b2807718d7f75296e2beb4280a0fc2fdfdc1c MinGit-2.17.0-busybox-32-bit.zip | 3ded3fc7245fd026cab3ef05e9cc867c138e3e858aea42f68369a0e0aad1067f Git-2.17.0-64-bit.tar.bz2 | e5faf8e26de8dcc57b3848793e754fa1d16253c0ce66b12bc3afa1091284e6a3 Git-2.17.0-32-bit.tar.bz2 | d589200952debd3848602ee1287075428c096a8d94776090641645a858d020ec pdbs-for-git-64-bit-2.17.0.1.e7621d891d-1.zip | dc387ca23b94170832a9894d5812e4ad31c56552e4f68de154491dfe3d471a3c pdbs-for-git-32-bit-2.17.0.1.e7621d891d-1.zip | e1c4478b2874560df3a669f15b36360fffe556e8de3885d3cdb96202947dba7b Ciao, Johannes [Less]
Posted 3 months ago by Junio C Hamano
The latest feature release Git v2.17.0 is now available at the usual places. It is comprised of 516 non-merge commits since v2.16.0, contributed by 71 people, 20 of which are new faces. The tarballs are found at: ... [More] https://www.kernel.org/pub/software/scm/git/ The following public repositories all have a copy of the 'v2.17.0' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = https://github.com/gitster/git New contributors whose contributions weren't in v2.16.0 are as follows. Welcome to the Git development community! Adam Borowski, Alban Gruin, Andreas G. Schacker, Bernhard M. Wiedemann, Christian Ludwig, Christopher Diaz Riveros, Gargi Sharma, Genki Sky, Gregory Herrero, Jon Simons, Juan F. Codagnone, Kim Gybels, Lucas Werkmeister, Mathias Rav, Michele Locati, Motoki Seki, Stefan Moch, Stephen R Guglielmo, Tatyana Krasnukha, and Thomas Levesque. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Bennée, Ben Peart, Brandon Williams, brian m. carlson, Changwoo Ryu, Christian Couder, Daniel Knittl-Frank, David Pursehouse, Derrick Stolee, Elijah Newren, Eric Sunshine, Eric Wong, Jason Merrill, Jean-Noël Avila, Jeff Hostetler, Jeff King, Jiang Xin, Johannes Schindelin, Jonathan Nieder, Jonathan Tan, Jordi Mas, Junio C Hamano, Kaartic Sivaraam, Mårten Kongstad, Martin Ågren, Matthieu Moy, Michael Haggerty, Nathan Payre, Nguyễn Thái Ngọc Duy, Nicolas Morey-Chaisemartin, Olga Telezhnaya, Patryk Obara, Peter Krefting, Phillip Wood, Prathamesh Chavan, Ralf Thielow, Ramsay Jones, Randall S. Becker, Rasmus Villemoes, Ray Chen, René Scharfe, Robert P. J. Day, Stefan Beller, SZEDER Gábor, Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, Trần Ngọc Quân, and Yasushi SHOJI. ---------------------------------------------------------------- Git 2.17 Release Notes ====================== Updates since v2.16 ------------------- UI, Workflows & Features * "diff" family of commands learned "--find-object=" option to limit the findings to changes that involve the named object. * "git format-patch" learned to give 72-cols to diffstat, which is consistent with other line length limits the subcommand uses for its output meant for e-mails. * The log from "git daemon" can be redirected with a new option; one relevant use case is to send the log to standard error (instead of syslog) when running it from inetd. * "git rebase" learned to take "--allow-empty-message" option. * "git am" has learned the "--quit" option, in addition to the existing "--abort" option; having the pair mirrors a few other commands like "rebase" and "cherry-pick". * "git worktree add" learned to run the post-checkout hook, just like "git clone" runs it upon the initial checkout. * "git tag" learned an explicit "--edit" option that allows the message given via "-m" and "-F" to be further edited. * "git fetch --prune-tags" may be used as a handy short-hand for getting rid of stale tags that are locally held. * The new "--show-current-patch" option gives an end-user facing way to get the diff being applied when "git rebase" (and "git am") stops with a conflict. * "git add -p" used to offer "/" (look for a matching hunk) as a choice, even there was only one hunk, which has been corrected. Also the single-key help is now given only for keys that are enabled (e.g. help for '/' won't be shown when there is only one hunk). * Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when the side branch being merged is a descendant of the current commit, create a merge commit instead of fast-forwarding) when merging a tag object. This was appropriate default for integrators who pull signed tags from their downstream contributors, but caused an unnecessary merges when used by downstream contributors who habitually "catch up" their topic branches with tagged releases from the upstream. Update "git merge" to default to --no-ff only when merging a tag object that does *not* sit at its usual place in refs/tags/ hierarchy, and allow fast-forwarding otherwise, to mitigate the problem. * "git status" can spend a lot of cycles to compute the relation between the current branch and its upstream, which can now be disabled with "--no-ahead-behind" option. * "git diff" and friends learned funcname patterns for Go language source files. * "git send-email" learned "--reply-to=" option. * Funcname pattern used for C# now recognizes "async" keyword. * In a way similar to how "git tag" learned to honor the pager setting only in the list mode, "git config" learned to ignore the pager setting when it is used for setting values (i.e. when the purpose of the operation is not to "show"). Performance, Internal Implementation, Development Support etc. * More perf tests for threaded grep * "perf" test output can be sent to codespeed server. * The build procedure for perl/ part has been greatly simplified by weaning ourselves off of MakeMaker. * Perl 5.8 or greater has been required since Git 1.7.4 released in 2010, but we continued to assume some core modules may not exist and used a conditional "eval { require <> }"; we no longer do this. Some platforms (Fedora/RedHat/CentOS, for example) ship Perl without all core modules by default (e.g. Digest::MD5, File::Temp, File::Spec, Net::Domain, Net::SMTP). Users on such platforms may need to install these additional modules. * As a convenience, we install copies of Perl modules we require which are not part of the core Perl distribution (e.g. Error and Mail::Address). Users and packagers whose operating system provides these modules can set NO_PERL_CPAN_FALLBACKS to avoid installing the bundled modules. * In preparation for implementing narrow/partial clone, the machinery for checking object connectivity used by gc and fsck has been taught that a missing object is OK when it is referenced by a packfile specially marked as coming from trusted repository that promises to make them available on-demand and lazily. * The machinery to clone & fetch, which in turn involves packing and unpacking objects, has been told how to omit certain objects using the filtering mechanism introduced by another topic. It now knows to mark the resulting pack as a promisor pack to tolerate missing objects, laying foundation for "narrow" clones. * The first step to getting rid of mru API and using the doubly-linked list API directly instead. * Retire mru API as it does not give enough abstraction over underlying list API to be worth it. * Rewrite two more "git submodule" subcommands in C. * The tracing machinery learned to report tweaking of environment variables as well. * Update Coccinelle rules to catch and optimize strbuf_addf(&buf, "%s", str) * Prevent "clang-format" from breaking line after function return type. * The sequencer infrastructure is shared across "git cherry-pick", "git rebase -i", etc., and has always spawned "git commit" when it needs to create a commit. It has been taught to do so internally, when able, by reusing the codepath "git commit" itself uses, which gives performance boost for a few tens of percents in some sample scenarios. * Push the submodule version of collision-detecting SHA-1 hash implementation a bit harder on builders. * Avoid mmapping small files while using packed refs (especially ones with zero size, which would cause later munmap() to fail). * Conversion from uchar[20] to struct object_id continues. * More tests for wildmatch functions. * The code to binary search starting from a fan-out table (which is how the packfile is indexed with object names) has been refactored into a reusable helper. * We now avoid using identifiers that clash with C++ keywords. Even though it is not a goal to compile Git with C++ compilers, changes like this help use of code analysis tools that targets C++ on our codebase. * The executable is now built in 'script' phase in Travis CI integration, to follow the established practice, rather than during 'before_script' phase. This allows the CI categorize the failures better ('failed' is project's fault, 'errored' is build environment's). (merge 3c93b82920 sg/travis-build-during-script-phase later to maint). * Writing out the index file when the only thing that changed in it is the untracked cache information is often wasteful, and this has been optimized out. * Various pieces of Perl code we have have been cleaned up. * Internal API clean-up to allow write_locked_index() optionally skip writing the in-core index when it is not modified. Also contains various documentation updates and code clean-ups. Fixes since v2.16 ----------------- * An old regression in "git describe --all $annotated_tag^0" has been fixed. * "git status" after moving a path in the working tree (hence making it appear "removed") and then adding with the -N option (hence making that appear "added") detected it as a rename, but did not report the old and new pathnames correctly. * "git svn dcommit" did not take into account the fact that a svn+ssh:// URL with a username@ (typically used for pushing) refers to the same SVN repository without the username@ and failed when svn.pushmergeinfo option is set. * API clean-up around revision traversal. * "git merge -Xours/-Xtheirs" learned to use our/their version when resolving a conflicting updates to a symbolic link. * "git clone $there $here" is allowed even when here directory exists as long as it is an empty directory, but the command incorrectly removed it upon a failure of the operation. * "git commit --fixup" did not allow "-m" option to be used at the same time; allow it to annotate resulting commit with more text. * When resetting the working tree files recursively, the working tree of submodules are now also reset to match. * "git stash -- " incorrectly blew away untracked files in the directory that matched the pathspec, which has been corrected. * Instead of maintaining home-grown email address parsing code, ship a copy of reasonably recent Mail::Address to be used as a fallback in 'git send-email' when the platform lacks it. (merge d60be8acab mm/send-email-fallback-to-local-mail-address later to maint). * "git add -p" was taught to ignore local changes to submodules as they do not interfere with the partial addition of regular changes anyway. * Avoid showing a warning message in the middle of a line of "git diff" output. (merge 4e056c989f nd/diff-flush-before-warning later to maint). * The http tracing code, often used to debug connection issues, learned to redact potentially sensitive information from its output so that it can be more safely sharable. (merge 8ba18e6fa4 jt/http-redact-cookies later to maint). * Crash fix for a corner case where an error codepath tried to unlock what it did not acquire lock on. (merge 81fcb698e0 mr/packed-ref-store-fix later to maint). * The split-index mode had a few corner case bugs fixed. (merge ae59a4e44f tg/split-index-fixes later to maint). * Assorted fixes to "git daemon". (merge ed15e58efe jk/daemon-fixes later to maint). * Completion of "git merge -s" (in contrib/) did not work well in non-C locale. (merge 7cc763aaa3 nd/list-merge-strategy later to maint). * Workaround for segfault with more recent versions of SVN. (merge 7f6f75e97a ew/svn-branch-segfault-fix later to maint). * Plug recently introduced leaks in fsck. (merge ba3a08ca0e jt/fsck-code-cleanup later to maint). * "git pull --rebase" did not pass verbosity setting down when recursing into a submodule. (merge a56771a668 sb/pull-rebase-submodule later to maint). * The way "git reset --hard" reports the commit the updated HEAD points at is made consistent with the way how the commit title is generated by the other parts of the system. This matters when the title is spread across physically multiple lines. (merge 1cf823fb68 tg/reset-hard-show-head-with-pretty later to maint). * Test fixes. (merge 63b1a175ee sg/test-i18ngrep later to maint). * Some bugs around "untracked cache" feature have been fixed. This will notice corrupt data in the untracked cache left by old and buggy code and issue a warning---the index can be fixed by clearing the untracked cache from it. (merge 0cacebf099 nd/fix-untracked-cache-invalidation later to maint). (merge 7bf0be7501 ab/untracked-cache-invalidation-docs later to maint). * "git blame HEAD COPYING" in a bare repository failed to run, while "git blame HEAD -- COPYING" run just fine. This has been corrected. * "git add" files in the same directory, but spelling the directory path in different cases on case insensitive filesystem, corrupted the name hash data structure and led to unexpected results. This has been corrected. (merge c95525e90d bp/name-hash-dirname-fix later to maint). * "git rebase -p" mangled log messages of a merge commit, which is now fixed. (merge ed5144d7eb js/fix-merge-arg-quoting-in-rebase-p later to maint). * Some low level protocol codepath could crash when they get an unexpected flush packet, which is now fixed. (merge bb1356dc64 js/packet-read-line-check-null later to maint). * "git check-ignore" with multiple paths got confused when one is a file and the other is a directory, which has been fixed. (merge d60771e930 rs/check-ignore-multi later to maint). * "git describe $garbage" stopped giving any errors when the garbage happens to be a string with 40 hexadecimal letters. (merge a8e7a2bf0f sb/describe-blob later to maint). * Code to unquote single-quoted string (used in the parser for configuration files, etc.) did not diagnose bogus input correctly and produced bogus results instead. (merge ddbbf8eb25 jk/sq-dequote-on-bogus-input later to maint). * Many places in "git apply" knew that "/dev/null" that signals "there is no such file on this side of the diff" can be followed by whitespace and garbage when parsing a patch, except for one, which made an otherwise valid patch (e.g. ones from subversion) rejected. (merge e454ad4bec tk/apply-dev-null-verify-name-fix later to maint). * We no longer create any *.spec file, so "make clean" should not remove it. (merge 4321bdcabb tz/do-not-clean-spec-file later to maint). * "git push" over http transport did not unquote the push-options correctly. (merge 90dce21eb0 jk/push-options-via-transport-fix later to maint). * "git send-email" learned to complain when the batch-size option is not defined when the relogin-delay option is, since these two are mutually required. (merge 9caa70697b xz/send-email-batch-size later to maint). * Y2k20 fix ;-) for our perl scripts. (merge a40e06ee33 bw/perl-timegm-timelocal-fix later to maint). * Threaded "git grep" has been optimized to avoid allocation in code section that is covered under a mutex. (merge 38ef24dccf rv/grep-cleanup later to maint). * "git subtree" script (in contrib/) scripted around "git log", whose output got affected by end-user configuration like log.showsignature (merge 8841b5222c sg/subtree-signed-commits later to maint). * While finding unique object name abbreviation, the code may accidentally have read beyond the end of the array of object names in a pack. (merge 21abed500c ds/find-unique-abbrev-optim later to maint). * Micro optimization in revision traversal code. (merge ebbed3ba04 ds/mark-parents-uninteresting-optim later to maint). * "git commit" used to run "gc --auto" near the end, which was lost when the command was reimplemented in C by mistake. (merge 095c741edd ab/gc-auto-in-commit later to maint). * Allow running a couple of tests with "sh -x". (merge c20bf94abc sg/cvs-tests-with-x later to maint). * The codepath to replace an existing entry in the index had a bug in updating the name hash structure, which has been fixed. (merge 0e267b7a24 bp/refresh-cache-ent-rehash-fix later to maint). * The transfer.fsckobjects configuration tells "git fetch" to validate the data and connected-ness of objects in the received pack; the code to perform this check has been taught about the narrow clone's convention that missing objects that are reachable from objects in a pack that came from a promissor remote is OK. * There was an unused file-scope static variable left in http.c when building for versions of libCURL that is older than 7.19.4, which has been fixed. (merge b8fd6008ec rj/http-code-cleanup later to maint). * Shell script portability fix. (merge 206a6ae013 ml/filter-branch-portability-fix later to maint). * Other minor doc, test and build updates and code cleanups. (merge e2a5a028c7 bw/oidmap-autoinit later to maint). (merge ec3b4b06f8 cl/t9001-cleanup later to maint). (merge e1b3f3dd38 ks/submodule-doc-updates later to maint). (merge fbac558a9b rs/describe-unique-abbrev later to maint). (merge 8462ff43e4 tb/crlf-conv-flags later to maint). (merge 7d68bb0766 rb/hashmap-h-compilation-fix later to maint). (merge 3449847168 cc/sha1-file-name later to maint). (merge ad622a256f ds/use-get-be64 later to maint). (merge f919ffebed sg/cocci-move-array later to maint). (merge 4e801463c7 jc/mailinfo-cleanup-fix later to maint). (merge ef5b3a6c5e nd/shared-index-fix later to maint). (merge 9f5258cbb8 tz/doc-show-defaults-to-head later to maint). (merge b780e4407d jc/worktree-add-short-help later to maint). (merge ae239fc8e5 rs/cocci-strbuf-addf-to-addstr later to maint). (merge 2e22a85e5c nd/ignore-glob-doc-update later to maint). (merge 3738031581 jk/gettext-poison later to maint). (merge 54360a1956 rj/sparse-updates later to maint). (merge 12e31a6b12 sg/doc-test-must-fail-args later to maint). (merge 760f1ad101 bc/doc-interpret-trailers-grammofix later to maint). (merge 4ccf461f56 bp/fsmonitor later to maint). (merge a6119f82b1 jk/test-hashmap-updates later to maint). (merge 5aea9fe6cc rd/typofix later to maint). (merge e4e5da2796 sb/status-doc-fix later to maint). (merge 7976e901c8 gs/test-unset-xdg-cache-home later to maint). (merge d023df1ee6 tg/worktree-create-tracking later to maint). (merge 4cbe92fd41 sm/mv-dry-run-update later to maint). (merge 75e5e9c3f7 sb/color-h-cleanup later to maint). (merge 2708ef4af6 sg/t6300-modernize later to maint). (merge d88e92d4e0 bw/doc-submodule-recurse-config-with-clone later to maint). (merge f74bbc8dd2 jk/cached-commit-buffer later to maint). (merge 1316416903 ms/non-ascii-ticks later to maint). (merge 878056005e rs/strbuf-read-file-or-whine later to maint). (merge 79f0ba1547 jk/strbuf-read-file-close-error later to maint). (merge edfb8ba068 ot/ref-filter-cleanup later to maint). (merge 11395a3b4b jc/test-must-be-empty later to maint). (merge 768b9d6db7 mk/doc-pretty-fill later to maint). (merge 2caa7b8d27 ab/man-sec-list later to maint). (merge 40c17eb184 ks/t3200-typofix later to maint). (merge bd9958c358 dp/merge-strategy-doc-fix later to maint). (merge 9ee0540a40 js/ming-strftime later to maint). (merge 1775e990f7 tz/complete-tag-delete-tagname later to maint). (merge 00a4b03501 rj/warning-uninitialized-fix later to maint). (merge b635ed97a0 jk/attributes-path-doc later to maint). [Less]