Skip to content
This repository was archived by the owner on Nov 9, 2017. It is now read-only.
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: msysgit/git
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: dscho/git
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Can’t automatically merge. Don’t worry, you can still create the pull request.

Commits on Mar 21, 2024

  1. The tenth batch

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Mar 21, 2024
    Copy the full SHA
    11c821f View commit details
  2. config: minor addition of whitespace

    In general, binary operators should be enclosed in a pair of leading and
    trailing space (SP) characters.  Thus, clean up one spotted expression that
    for some reason had a "bunched up" operator.
    
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    Dragan Simic authored and gitster committed Mar 21, 2024
    Copy the full SHA
    0d49b1e View commit details
  3. config: really keep value-internal whitespace verbatim

    Fix a bug in function parse_value() that prevented whitespace characters
    (i.e. spaces and horizontal tabs) found inside configuration option values
    from being parsed and returned in their original form.  The bug caused any
    number of consecutive whitespace characters to be wrongly "squashed" into
    the same number of space characters.
    
    This bug was introduced back in July 2009, in commit ebdaae3 ("config:
    Keep inner whitespace verbatim").
    
    Further investigation showed that setting a configuration value, by invoking
    git-config(1), converts value-internal horizontal tabs into "\t" escape
    sequences, which the buggy value-parsing logic in function parse_value()
    didn't "squash" into spaces.  That's why the test included in the ebdaae3
    commit passed, which presumably made the bug remain undetected for this long.
    On the other hand, value-internal literal horizontal tab characters, found in
    a configuration file edited by hand, do get "squashed" by the value-parsing
    logic, so the right choice was to fix this bug by making the value-internal
    whitespace characters preserved verbatim.
    
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    Dragan Simic authored and gitster committed Mar 21, 2024
    Copy the full SHA
    f0b8944 View commit details
  4. t1300: add more tests for whitespace and inline comments

    Add a handful of additional tests, to improve the coverage of the handling
    of configuration file entries whose values contain internal whitespace,
    leading and/or trailing whitespace, which may or may not be enclosed within
    quotation marks, or which contain an additional inline comment.
    
    At the same time, rework one already existing whitespace-related test a bit,
    to ensure its consistency with the newly added tests.  This change introduced
    no functional changes to the already existing test.
    
    Helped-by: Eric Sunshine <sunshine@sunshineco.com>
    Helped-by: Junio C Hamano <gitster@pobox.com>
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    Dragan Simic authored and gitster committed Mar 21, 2024
    Copy the full SHA
    d71bc1b View commit details
  5. config.txt: describe handling of whitespace further

    Make it more clear what the whitespace characters are in the context of git
    configuration files, and significantly improve the description of the leading
    and trailing whitespace handling, especially how it works out together with
    the presence of inline comments.
    
    Helped-by: Junio C Hamano <gitster@pobox.com>
    Helped-by: Eric Sunshine <sunshine@sunshineco.com>
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    Dragan Simic authored and gitster committed Mar 21, 2024
    Copy the full SHA
    e6895c3 View commit details

Commits on Mar 22, 2024

  1. t7800: improve test descriptions with empty arguments

    Some of the tests in t7800 are executed repeatedly in a loop with
    different arguments. To distinguish these tests, the value of that
    variable is rendered into the test title. But given that one of the
    values is the empty string, it results in a somewhat awkward test name:
    
        difftool  ignores exit code
    
    Improve this by printing "without options" in case the value is empty.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 22, 2024
    Copy the full SHA
    ac45f68 View commit details
  2. t7800: use single quotes for test bodies

    In eb84c8b (git-difftool--helper: honor `--trust-exit-code` with
    `--dir-diff`, 2024-02-20) we have started to loop around some of the
    tests in t7800 so that they are reexecuted with slightly different
    arguments. As part of that refactoring the quoting of test bodies was
    changed from single quotes (') to double quotes (") so that the value of
    the loop variable is accessible to the body.
    
    As the test body is later on passed to eval this change was not required
    though. Let's revert it back to use single quotes as usual in our tests.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 22, 2024
    Copy the full SHA
    c559677 View commit details
  3. t/README: document how to loop around test cases

    In some cases it makes sense to loop around test cases so that we can
    execute the same test with slightly different arguments. There are some
    gotchas around quoting here though that are easy to miss and that may
    lead to easy-to-miss errors and portability issues.
    
    Document the proper way to do this in "t/README".
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 22, 2024
    Copy the full SHA
    7c4449e View commit details
  4. format-patch: fix leak of empty header string

    The log_write_email_headers() function recently learned to return the
    "extra_headers_p" variable to the caller as an allocated string. We
    start by copying rev_info.extra_headers into a strbuf, and then detach
    the strbuf at the end of the function. If there are no extra headers, we
    leave the strbuf empty. Likewise, if there are no headers to return, we
    pass back NULL.
    
    This misses a corner case which can cause a leak. The "do we have any
    headers to copy" check is done by looking for a NULL opt->extra_headers.
    But the "do we have a non-empty string to return" check is done by
    checking the length of the strbuf. That means if opt->extra_headers is
    the empty string, we'll "copy" it into the strbuf, triggering an
    allocation, but then leak the buffer when we return NULL from the
    function.
    
    We can solve this in one of two ways:
    
      1. Rather than checking headers->len at the end, we could check
         headers->alloc to see if we allocated anything. That retains the
         original behavior before the recent change, where an empty
         extra_headers string is "passed through" to the caller. In practice
         this doesn't matter, though (the code which eventually looks at the
         result treats NULL or the empty string the same).
    
      2. Only bother copying a non-empty string into the strbuf. This has
         the added bonus of avoiding a pointless allocation.
    
         Arguably strbuf_addstr() could do this optimization itself, though
         it may be slightly dangerous to do so (some existing callers may
         not get a fresh allocation when they expect to). In theory callers
         are all supposed to use strbuf_detach() in such a case, but there's
         no guarantee that this is the case.
    
    This patch uses option 2. Without it, building with SANITIZE=leak shows
    many errors in t4021 and elsewhere.
    
    Signed-off-by: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff authored and gitster committed Mar 22, 2024
    Copy the full SHA
    1c10b8e View commit details
  5. rebase: use child_process_clear() to clean

    In the run_am() function, we set up a child_process struct to run
    "git-am", allocating memory for its args and env strvecs. These are
    normally cleaned up when we call run_command(). But if we encounter
    certain errors, we exit the function early and try to clean up ourselves
    by clearing the am.args field. This leaks the "env" strvec.
    
    We should use child_process_clear() instead, which covers both. And more
    importantly, it future proofs us against the struct ever growing more
    allocated fields.
    
    These are unlikely errors to happen in practice, so they don't actually
    trigger the leak sanitizer in the tests. But we can add a new test which
    does exercise one of the paths (and fails SANITIZE=leak without this
    patch).
    
    Signed-off-by: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff authored and gitster committed Mar 22, 2024
    Copy the full SHA
    647e870 View commit details

Commits on Mar 23, 2024

  1. editorconfig: add Makefiles to "text files"

    The Makefile and makefile fragments use the same indent style than the
    rest of the code (with some inconsistencies).
    
    Add them to the relevant .editorconfig section to make life easier for
    editors and reviewers.
    
    Signed-off-by: Max Gautier <mg@max.gautier.name>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    VannTen authored and gitster committed Mar 23, 2024

    Unverified

    This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
    Copy the full SHA
    b45602e View commit details

Commits on Mar 25, 2024

  1. reftable/stack: fix error handling in reftable_stack_init_addition()

    In `reftable_stack_init_addition()` we call `stack_uptodate()` after
    having created the lockfile to check whether the stack was modified
    concurrently, which is indicated by a positive return code from the
    latter function. If so, we return a `REFTABLE_LOCK_ERROR` to the caller
    and abort the addition.
    
    The error handling has an off-by-one though because we check whether the
    error code is `> 1` instead of `> 0`. Thus, instead of returning the
    locking error, we would return a positive value. One of the callers of
    `reftable_stack_init_addition()` works around this bug by repeating the
    error code check without the off-by-one. But other callers are subtly
    broken by this bug.
    
    Fix this by checking for `err > 0` instead. This has the consequence
    that `reftable_stack_init_addition()` won't ever return a positive error
    code anymore, but will instead return `REFTABLE_LOCK_ERROR` now. Thus,
    we can drop the check for a positive error code in `stack_try_add()`
    now.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    630942a View commit details
  2. reftable/error: discern locked/outdated errors

    We currently throw two different errors into a similar-but-different
    error code:
    
      - Errors when trying to lock the reftable stack.
    
      - Errors when trying to write to the reftable stack which has been
        modified concurrently.
    
    This results in unclear error handling and user-visible error messages.
    
    Create a new `REFTABLE_OUTDATED_ERROR` so that those error conditions
    can be clearly told apart from each other. Adjust users of the old
    `REFTABLE_LOCK_ERROR` to use the new error code as required.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    af18098 View commit details
  3. reftable/stack: use error codes when locking fails during compaction

    Compaction of a reftable stack may fail gracefully when there is a
    concurrent process that writes to the reftable stack and which has thus
    locked either the "tables.list" file or one of the tables. This is
    expected and can be handled gracefully by some of the callers which
    invoke compaction. Thus, to indicate this situation to our callers, we
    return a positive return code from `stack_compact_range()` and bubble it
    up to the caller.
    
    This kind of error handling is somewhat awkward though as many callers
    in the call chain never even think of handling positive return values.
    Thus, the result is either that such errors are swallowed by accident,
    or that we abort operations with an unhelpful error message.
    
    Make the code more robust by always using negative error codes when
    compaction fails, with `REFTABLE_LOCK_ERROR` for the described benign
    error case.
    
    Note that only a single callsite knew to handle positive error codes
    gracefully in the first place. Subsequent commits will touch up some of
    the other sites to handle those errors better.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    3335835 View commit details
  4. reftable/stack: gracefully handle failed auto-compaction due to locks

    Whenever we commit a new table to the reftable stack we will end up
    invoking auto-compaction of the stack to keep the total number of tables
    at bay. This auto-compaction may fail though in case at least one of the
    tables which we are about to compact is locked. This is indicated by the
    compaction function returning `REFTABLE_LOCK_ERROR`. We do not handle
    this case though, and thus bubble that return value up the calling
    chain, which will ultimately cause a failure.
    
    Fix this bug by ignoring `REFTABLE_LOCK_ERROR`.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    a2f711a View commit details
  5. refs/reftable: print errors on compaction failure

    When git-pack-refs(1) fails in the reftable backend we end up printing
    no error message at all, leaving the caller puzzled as to why compaction
    has failed. Fix this.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    4ccf706 View commit details
  6. t/helper: drop pack-refs wrapper

    The test helper provides a "ref-store <store> pack-refs" wrapper that
    more or less directly invokes `refs_pack_refs()`. This helper is only
    used in a single test with the "PACK_REFS_PRUNE" and "PACK_REFS_ALL"
    flags. Both of these flags can directly be accessed via git-pack-refs(1)
    though via the `--all` and `--prune` flags, which makes the helper
    superfluous.
    
    Refactor the test to use git-pack-refs(1) instead of the test helper.
    Drop the now-unused test helper command.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    ed12124 View commit details
  7. refs: move struct pack_refs_opts to where it's used

    The declaration of `struct pack_refs_opts` is in a seemingly random
    place. Move it so that it's located right next to its flags and
    functions that use it.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    0f65c7a View commit details
  8. refs: remove PACK_REFS_ALL flag

    The intent of the `PACK_REFS_ALL` flag is to ask the backend to compact
    all refs instead of only a subset of them. Thus, this flag gets passed
    down to `refs_pack_refs()` via `struct pack_refs_opts::flags`.
    
    But starting with 4fe42f3 (pack-refs: teach pack-refs --include
    option, 2023-05-12), the flag's semantics have changed. Instead of being
    handled by the respective backends, this flag is now getting handled by
    the callers of `refs_pack_refs()` which will add a single glob ("*") to
    the list of refs-to-be-packed. Thus, the flag serves no purpose to the
    ref backends anymore.
    
    Remove the flag and replace it with a local variable.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    35aeabd View commit details
  9. refs/reftable: expose auto compaction via new flag

    Under normal circumstances, the "reftable" backend will automatically
    perform compaction after appending to the stack. It is thus not
    necessary and may even be considered wasteful to run git-pack-refs(1) in
    "reftable"-backed repositories as it will cause the backend to compact
    all tables into a single one. We do exactly that though when running
    `git maintenance run --auto` or `git gc --auto`, which gets spawned by
    Git after running some specific commands.
    
    The `--auto` mode is typically only executing optimizations as needed.
    To do so, we already use several heuristics for the various different
    data structures in Git to determine whether to optimize them or not.
    We do not use any heuristics for refs though and instead always optimize
    them.
    
    Introduce a new `PACK_REFS_AUTO` flag that can be passed to the backend.
    When not handled by the backend we will continue to behave the exact
    same as we do right now, that is we optimize refs unconditionally. This
    is done for the "files" backend for now to retain current behaviour,
    even though we may eventually also want to introduce heuristics here.
    For the "reftable" backend though we already do have auto-compaction, so
    we can easily reuse that logic to implement the new auto-packing flag.
    
    Note that under normal circumstances, this should always end up being a
    no-op. After all, we already invoke the code for every single addition
    to the stack. But there are special cases where it can still be helpful
    to execute the auto-compaction code explicitly:
    
      - Concurrent writers may cause compaction to not run due to locks.
    
      - Callers may decide to disable compaction altogether and then pack
        refs at a later point due to various reasons.
    
      - Other implementations of the reftable format may do compaction
        differently or even not at all.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    f89356d View commit details
  10. builtin/pack-refs: release allocated memory

    Some of the command line options in `cmd_pack_refs()` require us to
    allocate memory. This memory is never released and thus leaking, but we
    paper over this leak by declaring the respective variables as `static`
    function-level variables, which is somewhat awkward.
    
    Refactor the code to release the allocated memory and drop the `static`
    declaration. While at it, remove the useless `flags` variable.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    a75dc71 View commit details
  11. builtin/pack-refs: introduce new "--auto" flag

    Calling git-pack-refs(1) will unconditionally cause it to pack all
    requested refs regardless of the current state of the ref database. For
    example:
    
      - With the "files" backend we will end up rewriting the complete
        "packed-refs" file even if only a single ref would require
        compaction.
    
      - With the "reftable" backend we will end up always compacting all
        tables into a single table.
    
    This behaviour can be completely unnecessary depending on the backend
    and is thus wasteful.
    
    With the introduction of the `PACK_REFS_AUTO` flag in the preceding
    commit we can improve this and let the backends decide for themselves
    whether to pack refs in the first place. Expose this functionality via a
    new "--auto" flag in git-pack-refs(1), which mirrors the same flag in
    both git-gc(1) and git-maintenance(1).
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    6dcffc6 View commit details
  12. builtin/gc: move struct maintenance_run_opts

    We're about to start using `struct maintenance_run_opts` in
    `maintenance_task_pack_refs()`. Move its definition up to prepare for
    this.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    0e05d53 View commit details
  13. t6500: extract objects with "17" prefix

    The ".git/obects/17/" shard is somewhat special because it is used by
    git-gc(1) to estimate how many objects there are by extrapolating the
    number of objects in that shard, only. In t6500 we thus have a hard
    coded set of data that, when written to the object database, result in
    blobs starting with that prefix.
    
    We are about to need such "17"-prefixed objects in another test suite.
    Extract them into "t/oid-info/hash-info" so that they can be reused by
    other tests.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    77257e3 View commit details
  14. builtin/gc: forward git-gc(1)'s --auto flag when packing refs

    Forward the `--auto` flag to git-pack-refs(1) when it has been invoked
    with this flag itself. This does not change anything for the "files"
    backend, which will continue to eagerly pack refs. But it does ensure
    that the "reftable" backend only compacts refs as required.
    
    This change does not impact git-maintenance(1) because this command will
    in fact never run the pack-refs task when run with `--auto`. This issue
    will be addressed in a subsequent commit.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    bfc2f9e View commit details
  15. builtin/gc: pack refs when using git maintenance run --auto

    When running `git maintenance run --auto`, then the various subtasks
    will only run as needed. Thus, we for example end up only packing loose
    objects if we hit a certain threshold.
    
    Interestingly enough, the "pack-refs" task is actually _never_ executed
    when the auto-flag is set because it does not have a condition at all.
    As 41abfe1 (maintenance: add pack-refs task, 2021-02-09) mentions:
    
        The 'auto_condition' function pointer is left NULL for now. We could
        extend this in the future to have a condition check if pack-refs
        should be run during 'git maintenance run --auto'.
    
    It is not quite clear from that quote whether it is actually intended
    that the task doesn't run at all in this mode. Also, no test was added
    to verify this behaviour. Ultimately though, it feels quite surprising
    that `git maintenance run --auto --task=pack-refs` would quietly never
    do anything at all.
    
    In any case, now that we do have the logic in place to let ref backends
    decide whether or not to repack refs, it does make sense to wire it up
    accordingly. With the "reftable" backend we will thus now perform
    auto-compaction, which optimizes the refdb as needed.
    
    But for the "files" backend we now unconditionally pack refs as it does
    not yet know to handle the "auto" flag. Arguably, this can be seen as a
    bug fix given that previously the task never did anything at all.
    Eventually though we should amend the "files" backend to use some
    heuristics for auto compaction, as well.
    
    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    pks-t authored and gitster committed Mar 25, 2024
    Copy the full SHA
    9f6714a View commit details
  16. grep: improve errors for unmatched ( and )

    Imagine you want to grep for (. Easy:
    
      $ git grep '('
      fatal: unmatched parenthesis
    
    uhoh. This is plainly wrong. Unless you know specifically that
    
     (a) git grep has expression groups and '(' ... ')' are used for them.
     (b) you can use -e '(' to explicitly say '(' is what you are looking
         for, not the beginning of a group.
    
    Similarly,
    
      $ git grep ')'
      fatal: incomplete pattern expression: )
    
    is somehow worse. ")" is a complete regular expression pattern.
    Of course, the error wants to say "group" here.
    In this case it is also not "incomplete", it is unmatched.
    
    Make them say
    
      $ ./git grep '('
      fatal: unmatched ( for expression group
      $ ./git grep ')'
      fatal: incomplete pattern expression group: )
    
    which are clearer in indicating that it is not the expression that
    is wrong (since no pattern had been parsed at all), but rather that
    it is been misconstrued as a grouping operator.
    
    Link: https://bugs.debian.org/1051205
    Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    nabijaczleweli authored and gitster committed Mar 25, 2024
    Copy the full SHA
    0d52784 View commit details
  17. factor out strbuf_expand_bad_format()

    Extract a function for reporting placeholders that are not enclosed in a
    parenthesis or are unknown.  This reduces the number of strings to
    translate and improves consistency across commands.  Call it at the end
    of the if/else chain, after exhausting all accepted possibilities.
    
    Signed-off-by: René Scharfe <l.s.r@web.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    rscharfe authored and gitster committed Mar 25, 2024
    Copy the full SHA
    e36091a View commit details
  18. cat-file: use strbuf_expand_bad_format()

    Report unknown format elements and missing closing parentheses with
    consistent and translated messages by calling strbuf_expand_bad_format()
    at the very end of the combined if/else chain of expand_format() and
    expand_atom().
    
    Signed-off-by: René Scharfe <l.s.r@web.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    rscharfe authored and gitster committed Mar 25, 2024
    Copy the full SHA
    7c43bdf View commit details
  19. t/README: mention test files are make targets

    Since 23fc63b (make tests ignorable with "make -i", 2005-11-08), each
    test file defines a target in the test Makefile, such that one can
    invoke:
    
    	make *checkout*
    
    to run all tests with 'checkout' in their filename. This is useful to
    run a subset of tests when you have a good idea of what part of the code
    is touched by the changes your are testing.
    
    Document that in t/README to help new (or more seasoned) contributors
    that might not be aware.
    
    Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    phil-blain authored and gitster committed Mar 25, 2024
    Copy the full SHA
    8d38380 View commit details
  20. midx: use strvec_pushf() for pack-objects base name

    Build the pack base name argument directly using strvec_pushf() instead
    of with an intermediate strbuf.  This is shorter, simpler and avoids the
    need for explicit cleanup.
    
    Signed-off-by: René Scharfe <l.s.r@web.de>
    Reviewed-by: Patrick Steinhardt <ps@pks.im>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    rscharfe authored and gitster committed Mar 25, 2024
    Copy the full SHA
    4d45e79 View commit details
  21. pretty: update tests to use test_config

    These tests use raw `git config` calls, which is an older style that can
    cause config to bleed between tests if not manually unset. `test_config`
    ensures that config is unset at the end of each test automatically.
    
    `test_config` is chosen over `git -c` since `test_config` still ends up
    calling `git config` which seems slightly more realistic to how pretty
    formats would be defined normally.
    
    Suggested-by: Jeff King <peff@peff.net>
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    2cd134f View commit details
  22. pretty: find pretty formats case-insensitively

    User-defined pretty formats are stored in config, which is meant to use
    case-insensitive matching for names as noted in config.txt's 'Syntax'
    section:
    
        All the other lines [...] are recognized as setting variables, in
        the form 'name = value' [...]. The variable names are
        case-insensitive, [...].
    
    When a user specifies one of their format aliases with an uppercase in
    it, however, it is not found.
    
        $ git config pretty.testAlias %h
        $ git config --list | grep pretty
        pretty.testalias=%h
        $ git log --format=testAlias -1
        fatal: invalid --pretty format: testAlias
        $ git log --format=testalias -1
        3c2a3fd
    
    This is true whether the name in the config file uses any uppercase
    characters or not.
    
    Use case-insensitive comparisons when identifying format aliases.
    
    Co-authored-by: Jeff King <peff@peff.net>
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    2 people authored and gitster committed Mar 25, 2024
    Copy the full SHA
    f999d51 View commit details
  23. grep docs: describe --recurse-submodules further and improve formatti…

    …ng a bit
    
    Clarify that --recurse-submodules cannot be used together with --untracked,
    and improve the formatting in a couple of places, to make it visually clear
    that those are the commands or the names of configuration options.
    
    While there, change a couple of "<tree>" placeholders to "_<tree>_", to help
    with an ongoing translation improvement effort. [1]
    
    [1] https://lore.kernel.org/git/CAPig+cQc8W4JOpB+TMP=czketU1U7wcY_x9bsP5T=3-XjGLhRQ@mail.gmail.com/
    
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    Dragan Simic authored and gitster committed Mar 25, 2024
    Copy the full SHA
    4a9357a View commit details
  24. grep docs: describe --no-index further and improve formatting a bit

    Improve the description of --no-index, to make it more clear to the users
    what this option actually does under the hood, and what's its purpose.
    Describe the dependency between --no-index and either of the --cached and
    --untracked options, which cannot be used together.
    
    As part of that, shuffle a couple of the options, to make the documentation
    flow a bit better, because it makes more sense to describe first the options
    that have something in common, and to after that describe an option that does
    something differently.  In more detail, --cached and --untracked both leave
    git-grep(1) in the usual state, in which it treats the directory as a local
    git repository, unlike --no-index that makes git-grep(1) treat the directory
    not as a git repository.
    
    While there, improve the descriptions of grep worker threads a bit, to give
    them better context.  Adjust the language a bit, to avoid addressing the
    reader directly, which is in general preferred in technical documentation,
    because it eliminates the possible element of persuading the user to do
    something.  In other words, we should be telling the user what our software
    can do, instead of telling the user what to do.
    
    Also perform some minor formatting improvements, to make it clear it's the
    git commands, command parameters, and configuration option names.
    
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    Dragan Simic authored and gitster committed Mar 25, 2024
    Copy the full SHA
    6e9ef29 View commit details
  25. Merge branch 'rj/restore-plug-leaks'

    Leaks from "git restore" have been plugged.
    
    * rj/restore-plug-leaks:
      checkout: plug some leaks in git-restore
    gitster committed Mar 25, 2024
    Copy the full SHA
    199074f View commit details
  26. Merge branch 'js/bugreport-no-suffix-fix'

    "git bugreport --no-suffix" was not supported and instead
    segfaulted, which has been corrected.
    
    * js/bugreport-no-suffix-fix:
      bugreport.c: fix a crash in `git bugreport` with `--no-suffix` option
    gitster committed Mar 25, 2024
    Copy the full SHA
    d921c36 View commit details
  27. Merge branch 'jc/index-pack-fsck-levels'

    Test fix.
    
    * jc/index-pack-fsck-levels:
      t5300: fix test_with_bad_commit()
    gitster committed Mar 25, 2024
    Copy the full SHA
    46d8bf3 View commit details
  28. Merge branch 'bb/sh-scripts-cleanup'

    Shell scripts clean-up.
    
    * bb/sh-scripts-cleanup: (22 commits)
      git-quiltimport: avoid an unnecessary subshell
      contrib/coverage-diff: avoid redundant pipelines
      t/t9*: merge "grep | sed" pipelines
      t/t8*: merge "grep | sed" pipelines
      t/t5*: merge a "grep | sed" pipeline
      t/t4*: merge a "grep | sed" pipeline
      t/t3*: merge a "grep | awk" pipeline
      t/t1*: merge a "grep | sed" pipeline
      t/t9*: avoid redundant uses of cat
      t/t8*: avoid redundant use of cat
      t/t7*: avoid redundant use of cat
      t/t6*: avoid redundant uses of cat
      t/t5*: avoid redundant uses of cat
      t/t4*: avoid redundant uses of cat
      t/t3*: avoid redundant uses of cat
      t/t1*: avoid redundant uses of cat
      t/t0*: avoid redundant uses of cat
      t/perf: avoid redundant use of cat
      t/annotate-tests.sh: avoid redundant use of cat
      t/lib-cvs.sh: avoid redundant use of cat
      ...
    gitster committed Mar 25, 2024
    Copy the full SHA
    a7f0fcb View commit details
  29. Merge branch 'ja/doc-formatting-fix'

    Documentation mark-up fix.
    
    * ja/doc-formatting-fix:
      doc: fix some placeholders formating
      doc: format alternatives in synopsis
    gitster committed Mar 25, 2024
    Copy the full SHA
    0cb25d1 View commit details
  30. Merge branch 'bl/doc-config-fixes'

    A few typoes in "git config --help" have been corrected.
    
    * bl/doc-config-fixes:
      docs: fix typo in git-config `--default`
      docs: clarify file options in git-config `--edit`
    gitster committed Mar 25, 2024
    Copy the full SHA
    b58cc6a View commit details
  31. Merge branch 'bl/doc-key-val-sep-fix'

    The documentation for "%(trailers[:options])" placeholder in the
    "--pretty" option of commands in the "git log" family has been
    updated.
    
    * bl/doc-key-val-sep-fix:
      docs: adjust trailer `separator` and `key_value_separator` language
      docs: correct trailer `key_value_separator` description
    gitster committed Mar 25, 2024
    Copy the full SHA
    03658df View commit details
  32. The eleventh batch

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Mar 25, 2024
    Copy the full SHA
    c75fd8d View commit details
  33. docs: address inaccurate --empty default with --exec

    The documentation for git-rebase(1) indicates that using the `--exec`
    option will use `--empty=drop`. This is inaccurate: when `--interactive`
    is not explicitly provided, `--exec` results in `--empty=keep`
    behaviors.
    
    Correctly indicate the behavior of `--exec` using `--empty=keep` when
    `--interactive` is not specified.
    
    Reported-by: Phillip Wood <phillip.wood@dunelm.org.uk>
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    0af3889 View commit details
  34. docs: clean up --empty formatting in git-rebase(1) and git-am(1)

    Both of these pages document very similar `--empty` options, but with
    different styles. The exact behavior of these `--empty` options differs
    somewhat, but consistent styling in the docs is still beneficial. This
    commit aims to make them more consistent.
    
    Break the possible values for `--empty` into separate sections for
    readability. Alphabetical order is chosen for consistency.
    
    In a future commit, we'll be documenting a new `--empty` option for
    git-cherry-pick(1), making the consistency even more relevant.
    
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    64a443e View commit details
  35. rebase: update --empty=ask to --empty=stop

    When git-am(1) got its own `--empty` option in 7c096b8 (am: support
    --empty=<option> to handle empty patches, 2021-12-09), `stop` was used
    instead of `ask`. `stop` is a more accurate term for describing what
    really happens, and consistency is good.
    
    Update git-rebase(1) to also use `stop`, while keeping `ask` as a
    deprecated synonym. Update the tests to primarily use `stop`, but also
    ensure that `ask` is still allowed.
    
    In a future commit, we'll be adding a new `--empty` option for
    git-cherry-pick(1) as well, making the consistency even more relevant.
    
    Reported-by: Elijah Newren <newren@gmail.com>
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    c282eba View commit details
  36. sequencer: handle unborn branch with --allow-empty

    When using git-cherry-pick(1) with `--allow-empty` while on an unborn
    branch, an error is thrown. This is inconsistent with the same
    cherry-pick when `--allow-empty` is not specified.
    
    Detect unborn branches in `is_index_unchanged`. When on an unborn
    branch, use the `empty_tree` as the tree to compare against.
    
    Add a new test to cover this scenario. While modelled off of the
    existing 'cherry-pick on unborn branch' test, some improvements can be
    made:
    
    - Use `git switch --orphan unborn` instead of `git checkout --orphan
      unborn` to avoid the need for a separate `rm -rf *` call
    - Avoid using `--quiet` in the `git diff` call to make debugging easier
      in the event of a failure. Use simply `--exit-code` instead.
    
    Make these improvements to the existing test as well as the new test.
    
    Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk>
    Helped-by: Junio C Hamano <gitster@pobox.com>
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    1b90588 View commit details
  37. sequencer: do not require allow_empty for redundant commit options

    A consumer of the sequencer that wishes to take advantage of either the
    `keep_redundant_commits` or `drop_redundant_commits` feature must also
    specify `allow_empty`. However, these refer to two distinct types of
    empty commits:
    
    - `allow_empty` refers specifically to commits which start empty
    - `keep_redundant_commits` refers specifically to commits that do not
      start empty, but become empty due to the content already existing in
      the target history
    
    Conceptually, there is no reason that the behavior for handling one of
    these should be entangled with the other. It is particularly unintuitive
    to require `allow_empty` in order for `drop_redundant_commits` to have
    an effect: in order to prevent redundant commits automatically,
    initially-empty commits would need to be kept automatically as well.
    
    Instead, rewrite the `allow_empty()` logic to remove the over-arching
    requirement that `allow_empty` be specified in order to reach any of the
    keep/drop behaviors. Only if the commit was originally empty will
    `allow_empty` have an effect.
    
    Note that no behavioral changes should result from this commit -- it
    merely sets the stage for future commits. In one such future commit, an
    `--empty` option will be added to git-cherry-pick(1), meaning that
    `drop_redundant_commits` will be used by that command.
    
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    661b671 View commit details
  38. cherry-pick: enforce --keep-redundant-commits incompatibility

    When `--keep-redundant-commits` was added in  b27cfb0
    (git-cherry-pick: Add keep-redundant-commits option, 2012-04-20), it was
    not marked as incompatible with the various operations needed to
    continue or exit a cherry-pick (`--continue`, `--skip`, `--abort`, and
    `--quit`).
    
    Enforce this incompatibility via `verify_opt_compatible` like we do for
    the other various options.
    
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    bd2f9fd View commit details
  39. cherry-pick: add --empty for more robust redundant commit handling

    As with git-rebase(1) and git-am(1), git-cherry-pick(1) can result in a
    commit being made redundant if the content from the picked commit is
    already present in the target history. However, git-cherry-pick(1) does
    not have the same options available that git-rebase(1) and git-am(1) have.
    
    There are three things that can be done with these redundant commits:
    drop them, keep them, or have the cherry-pick stop and wait for the user
    to take an action. git-rebase(1) has the `--empty` option added in commit
    e98c426 (rebase (interactive-backend): fix handling of commits that
    become empty, 2020-02-15), which handles all three of these scenarios.
    Similarly, git-am(1) got its own `--empty` in 7c096b8 (am: support
    --empty=<option> to handle empty patches, 2021-12-09).
    
    git-cherry-pick(1), on the other hand, only supports two of the three
    possiblities: Keep the redundant commits via `--keep-redundant-commits`,
    or have the cherry-pick fail by not specifying that option. There is no
    way to automatically drop redundant commits.
    
    In order to bring git-cherry-pick(1) more in-line with git-rebase(1) and
    git-am(1), this commit adds an `--empty` option to git-cherry-pick(1). It
    has the same three options (keep, drop, and stop), and largely behaves
    the same. The notable difference is that for git-cherry-pick(1), the
    default will be `stop`, which maintains the current behavior when the
    option is not specified.
    
    Like the existing `--keep-redundant-commits`, `--empty=keep` will imply
    `--allow-empty`.
    
    The `--keep-redundant-commits` option will be documented as a deprecated
    synonym of `--empty=keep`, and will be supported for backwards
    compatibility for the time being.
    
    Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    zivarah authored and gitster committed Mar 25, 2024
    Copy the full SHA
    ec79d76 View commit details
Showing 4,157 changed files with 1,093,966 additions and 251,212 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
22 changes: 22 additions & 0 deletions .cirrus.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
env:
CIRRUS_CLONE_DEPTH: 1

freebsd_task:
env:
GIT_PROVE_OPTS: "--timer --jobs 10"
GIT_TEST_OPTS: "--no-chain-lint --no-bin-wrappers"
MAKEFLAGS: "-j4"
DEFAULT_TEST_TARGET: prove
DEVELOPER: 1
freebsd_instance:
image_family: freebsd-13-4
memory: 2G
install_script:
pkg install -y gettext gmake perl5
create_user_script:
- pw useradd git
- chown -R git:git .
build_script:
- su git -c gmake
test_script:
- su git -c 'gmake DEFAULT_UNIT_TEST_TARGET=unit-tests-prove test unit-tests'
225 changes: 225 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
# This file is an example configuration for clang-format 5.0.
#
# Note that this style definition should only be understood as a hint
# for writing new code. The rules are still work-in-progress and does
# not yet exactly match the style we have in the existing code.

# Use tabs whenever we need to fill whitespace that spans at least from one tab
# stop to the next one.
#
# These settings are mirrored in .editorconfig. Keep them in sync.
UseTab: Always
TabWidth: 8
IndentWidth: 8
ContinuationIndentWidth: 8
ColumnLimit: 80

# C Language specifics
Language: Cpp

# Align parameters on the open bracket
# someLongFunction(argument1,
# argument2);
AlignAfterOpenBracket: Align

# Don't align consecutive assignments
# int aaaa = 12;
# int b = 14;
AlignConsecutiveAssignments: false

# Don't align consecutive declarations
# int aaaa = 12;
# double b = 3.14;
AlignConsecutiveDeclarations: false

# Align consecutive macro definitions.
AlignConsecutiveMacros: true

# Align escaped newlines as far left as possible
# #define A \
# int aaaa; \
# int b; \
# int cccccccc;
AlignEscapedNewlines: Left

# Align operands of binary and ternary expressions
# int aaa = bbbbbbbbbbb +
# cccccc;
AlignOperands: true

# Don't align trailing comments
# int a; // Comment a
# int b = 2; // Comment b
AlignTrailingComments: false

# By default don't allow putting parameters onto the next line
# myFunction(foo, bar, baz);
AllowAllParametersOfDeclarationOnNextLine: false

# Don't allow short braced statements to be on a single line
# if (a) not if (a) return;
# return;
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false

# By default don't add a line break after the return type of top-level functions
# int foo();
AlwaysBreakAfterReturnType: None

# Pack as many parameters or arguments onto the same line as possible
# int myFunction(int aaaaaaaaaaaa, int bbbbbbbb,
# int cccc);
BinPackArguments: true
BinPackParameters: true

# Add no space around the bit field
# unsigned bf:2;
BitFieldColonSpacing: None

# Attach braces to surrounding context except break before braces on function
# definitions.
# void foo()
# {
# if (true) {
# } else {
# }
# };
BreakBeforeBraces: Linux

# Break after operators
# int value = aaaaaaaaaaaaa +
# bbbbbb -
# ccccccccccc;
BreakBeforeBinaryOperators: None
BreakBeforeTernaryOperators: false

# Don't break string literals
BreakStringLiterals: false

# Use the same indentation level as for the switch statement.
# Switch statement body is always indented one level more than case labels.
IndentCaseLabels: false

# Indents directives before the hash. Each level uses a single space for
# indentation.
# #if FOO
# # include <foo>
# #endif
IndentPPDirectives: AfterHash
PPIndentWidth: 1

# Don't indent a function definition or declaration if it is wrapped after the
# type
IndentWrappedFunctionNames: false

# Align pointer to the right
# int *a;
PointerAlignment: Right

# Don't insert a space after a cast
# x = (int32)y; not x = (int32) y;
SpaceAfterCStyleCast: false

# No space is inserted after the logical not operator
SpaceAfterLogicalNot: false

# Insert spaces before and after assignment operators
# int a = 5; not int a=5;
# a += 42; a+=42;
SpaceBeforeAssignmentOperators: true

# Spaces will be removed before case colon.
# case 1: break; not case 1 : break;
SpaceBeforeCaseColon: false

# Put a space before opening parentheses only after control statement keywords.
# void f() {
# if (true) {
# f();
# }
# }
SpaceBeforeParens: ControlStatements

# Don't insert spaces inside empty '()'
SpaceInEmptyParentheses: false

# No space before first '[' in arrays
# int a[5][5]; not int a [5][5];
SpaceBeforeSquareBrackets: false

# No space will be inserted into {}
# while (true) {} not while (true) { }
SpaceInEmptyBlock: false

# The number of spaces before trailing line comments (// - comments).
# This does not affect trailing block comments (/* - comments).
SpacesBeforeTrailingComments: 1

# Don't insert spaces in casts
# x = (int32) y; not x = ( int32 ) y;
SpacesInCStyleCastParentheses: false

# Don't insert spaces inside container literals
# var arr = [1, 2, 3]; not var arr = [ 1, 2, 3 ];
SpacesInContainerLiterals: false

# Don't insert spaces after '(' or before ')'
# f(arg); not f( arg );
SpacesInParentheses: false

# Don't insert spaces after '[' or before ']'
# int a[5]; not int a[ 5 ];
SpacesInSquareBrackets: false

# Insert a space after '{' and before '}' in struct initializers
Cpp11BracedListStyle: false

# A list of macros that should be interpreted as foreach loops instead of as
# function calls. Taken from:
# git grep -h '^#define [^[:space:]]*for_\?each[^[:space:]]*(' |
# sed "s/^#define / - '/; s/(.*$/'/" | sort | uniq
ForEachMacros:
- 'for_each_builtin'
- 'for_each_string_list_item'
- 'for_each_ut'
- 'for_each_wanted_builtin'
- 'hashmap_for_each_entry'
- 'hashmap_for_each_entry_from'
- 'kh_foreach'
- 'kh_foreach_value'
- 'list_for_each'
- 'list_for_each_dir'
- 'list_for_each_prev'
- 'list_for_each_prev_safe'
- 'list_for_each_safe'
- 'strintmap_for_each_entry'
- 'strmap_for_each_entry'
- 'strset_for_each_entry'

# A list of macros that should be interpreted as conditionals instead of as
# function calls.
IfMacros:
- 'if_test'

# The maximum number of consecutive empty lines to keep.
MaxEmptyLinesToKeep: 1

# No empty line at the start of a block.
KeepEmptyLinesAtTheStartOfBlocks: false

# Penalties
# This decides what order things should be done if a line is too long
PenaltyBreakAssignment: 5
PenaltyBreakBeforeFirstCallParameter: 5
PenaltyBreakComment: 5
PenaltyBreakFirstLessLess: 0
PenaltyBreakOpenParenthesis: 300
PenaltyBreakString: 5
PenaltyExcessCharacter: 10
PenaltyReturnTypeOnItsOwnLine: 300

# Don't sort #include's
SortIncludes: false
16 changes: 16 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[*]
charset = utf-8
insert_final_newline = true

# The settings for C (*.c and *.h) files are mirrored in .clang-format. Keep
# them in sync.
[{*.{c,h,sh,perl,pl,pm,txt},config.mak.*,Makefile}]
indent_style = tab
tab_width = 8

[*.py]
indent_style = space
indent_size = 4

[COMMIT_EDITMSG]
max_line_length = 72
20 changes: 18 additions & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
* whitespace=!indent,trail,space
*.[ch] whitespace=indent,trail,space
*.sh whitespace=indent,trail,space
*.[ch] whitespace=indent,trail,space diff=cpp
*.sh whitespace=indent,trail,space text eol=lf
*.perl text eol=lf diff=perl
*.pl text eof=lf diff=perl
*.pm text eol=lf diff=perl
*.py text eol=lf diff=python
*.bat text eol=crlf
*.png binary
CODE_OF_CONDUCT.md -whitespace
/Documentation/**/*.txt text eol=lf
/command-list.txt text eol=lf
/GIT-VERSION-GEN text eol=lf
/mergetools/* text eol=lf
/t/oid-info/* text eol=lf
/Documentation/git-merge.txt conflict-marker-size=32
/Documentation/gitk.txt conflict-marker-size=32
/Documentation/user-manual.txt conflict-marker-size=32
/t/t????-*.sh conflict-marker-size=32
22 changes: 22 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Contributing to Git

Thanks for taking the time to contribute to Git! Please be advised that the
Git community does not use github.com for their contributions. Instead, we use
a mailing list (git@vger.kernel.org) for code submissions, code
reviews, and bug reports.

Nevertheless, you can use [GitGitGadget](https://gitgitgadget.github.io/) to
conveniently send your Pull Requests commits to our mailing list.

Please read ["A note from the maintainer"](https://git.kernel.org/pub/scm/git/git.git/plain/MaintNotes?h=todo)
to learn how the Git project is managed, and how you can work with it.
In addition, we highly recommend you to read [our submission guidelines](../Documentation/SubmittingPatches).

If you prefer video, then [this talk](https://www.youtube.com/watch?v=Q7i_qQW__q4&feature=youtu.be&t=6m4s)
might be useful to you as the presenter walks you through the contribution
process by example.

Or, you can follow the ["My First Contribution"](https://git-scm.com/docs/MyFirstContribution)
tutorial for another example of the contribution process.

Your friendly Git community!
64 changes: 64 additions & 0 deletions .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
- [ ] I was not able to find an [open](https://github.com/git-for-windows/git/issues?q=is%3Aopen) or [closed](https://github.com/git-for-windows/git/issues?q=is%3Aclosed) issue matching what I'm seeing

### Setup

- Which version of Git for Windows are you using? Is it 32-bit or 64-bit?

```
$ git --version --build-options
** insert your machine's response here **
```

- Which version of Windows are you running? Vista, 7, 8, 10? Is it 32-bit or 64-bit?

```
$ cmd.exe /c ver
** insert your machine's response here **
```

- What options did you set as part of the installation? Or did you choose the
defaults?

```
# One of the following:
> type "C:\Program Files\Git\etc\install-options.txt"
> type "C:\Program Files (x86)\Git\etc\install-options.txt"
> type "%USERPROFILE%\AppData\Local\Programs\Git\etc\install-options.txt"
> type "$env:USERPROFILE\AppData\Local\Programs\Git\etc\install-options.txt"
$ cat /etc/install-options.txt
** insert your machine's response here **
```

- Any other interesting things about your environment that might be related
to the issue you're seeing?

** insert your response here **

### Details

- Which terminal/shell are you running Git from? e.g Bash/CMD/PowerShell/other

** insert your response here **

- What commands did you run to trigger this issue? If you can provide a
[Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve)
this will help us understand the issue.

```
** insert your commands here **
```
- What did you expect to occur after running these commands?

** insert here **

- What actually happened instead?

** insert here **

- If the problem was occurring with a specific repository, can you provide the
URL to that repository to help us with testing?

** insert URL here **
22 changes: 22 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Thanks for taking the time to contribute to Git!

Those seeking to contribute to the Git for Windows fork should see
http://gitforwindows.org/#contribute on how to contribute Windows specific
enhancements.

If your contribution is for the core Git functions and documentation
please be aware that the Git community does not use the github.com issues
or pull request mechanism for their contributions.

Instead, we use the Git mailing list (git@vger.kernel.org) for code and
documentation submissions, code reviews, and bug reports. The
mailing list is plain text only (anything with HTML is sent directly
to the spam folder).

Nevertheless, you can use GitGitGadget (https://gitgitgadget.github.io/)
to conveniently send your Pull Requests commits to our mailing list.

For a single-commit pull request, please *leave the pull request description
empty*: your commit message itself should describe your changes.

Please read the "guidelines for contributing" linked above!
13 changes: 13 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
# especially
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot#enabling-dependabot-version-updates-for-actions

version: 2
updates:
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
34 changes: 34 additions & 0 deletions .github/workflows/check-style.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: check-style

# Get the repository with all commits to ensure that we can analyze
# all of the commits contributed via the Pull Request.

on:
pull_request:
types: [opened, synchronize]

# Avoid unnecessary builds. Unlike the main CI jobs, these are not
# ci-configurable (but could be).
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
check-style:
env:
CC: clang
jobname: ClangFormat
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- run: ci/install-dependencies.sh

- name: git clang-format
continue-on-error: true
id: check_out
run: |
./ci/run-style-check.sh \
"${{github.event.pull_request.base.sha}}"
32 changes: 32 additions & 0 deletions .github/workflows/check-whitespace.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: check-whitespace

# Get the repository with all commits to ensure that we can analyze
# all of the commits contributed via the Pull Request.
# Process `git log --check` output to extract just the check errors.
# Exit with failure upon white-space issues.

on:
pull_request:
types: [opened, synchronize]

# Avoid unnecessary builds. Unlike the main CI jobs, these are not
# ci-configurable (but could be).
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
check-whitespace:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: git log --check
id: check_out
run: |
./ci/check-whitespace.sh \
"${{github.event.pull_request.base.sha}}" \
"$GITHUB_STEP_SUMMARY" \
"https://github.com/${{github.repository}}"
163 changes: 163 additions & 0 deletions .github/workflows/coverity.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
name: Coverity

# This GitHub workflow automates submitting builds to Coverity Scan. To enable it,
# set the repository variable `ENABLE_COVERITY_SCAN_FOR_BRANCHES` (for details, see
# https://docs.github.com/en/actions/learn-github-actions/variables) to a JSON
# string array containing the names of the branches for which the workflow should be
# run, e.g. `["main", "next"]`.
#
# In addition, two repository secrets must be set (for details how to add secrets, see
# https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions):
# `COVERITY_SCAN_EMAIL` and `COVERITY_SCAN_TOKEN`. The former specifies the
# email to which the Coverity reports should be sent and the latter can be
# obtained from the Project Settings tab of the Coverity project).
#
# The workflow runs on `ubuntu-latest` by default. This can be overridden by setting
# the repository variable `ENABLE_COVERITY_SCAN_ON_OS` to a JSON string array specifying
# the operating systems, e.g. `["ubuntu-latest", "windows-latest"]`.
#
# By default, the builds are submitted to the Coverity project `git`. To override this,
# set the repository variable `COVERITY_PROJECT`.

on:
push:

defaults:
run:
shell: bash

jobs:
coverity:
if: contains(fromJSON(vars.ENABLE_COVERITY_SCAN_FOR_BRANCHES || '[""]'), github.ref_name)
strategy:
matrix:
os: ${{ fromJSON(vars.ENABLE_COVERITY_SCAN_ON_OS || '["ubuntu-latest"]') }}
runs-on: ${{ matrix.os }}
env:
COVERITY_PROJECT: ${{ vars.COVERITY_PROJECT || 'git' }}
COVERITY_LANGUAGE: cxx
COVERITY_PLATFORM: overridden-below
steps:
- uses: actions/checkout@v4
- name: install minimal Git for Windows SDK
if: contains(matrix.os, 'windows')
uses: git-for-windows/setup-git-for-windows-sdk@v1
- run: ci/install-dependencies.sh
if: contains(matrix.os, 'ubuntu') || contains(matrix.os, 'macos')
env:
distro: ${{ matrix.os }}

# The Coverity site says the tool is usually updated twice yearly, so the
# MD5 of download can be used to determine whether there's been an update.
- name: get the Coverity Build Tool hash
id: lookup
run: |
case "${{ matrix.os }}" in
*windows*)
COVERITY_PLATFORM=win64
COVERITY_TOOL_FILENAME=cov-analysis.zip
MAKEFLAGS=-j$(nproc)
;;
*macos*)
COVERITY_PLATFORM=macOSX
COVERITY_TOOL_FILENAME=cov-analysis.dmg
MAKEFLAGS=-j$(sysctl -n hw.physicalcpu)
;;
*ubuntu*)
COVERITY_PLATFORM=linux64
COVERITY_TOOL_FILENAME=cov-analysis.tgz
MAKEFLAGS=-j$(nproc)
;;
*)
echo '::error::unhandled OS ${{ matrix.os }}' >&2
exit 1
;;
esac
echo "COVERITY_PLATFORM=$COVERITY_PLATFORM" >>$GITHUB_ENV
echo "COVERITY_TOOL_FILENAME=$COVERITY_TOOL_FILENAME" >>$GITHUB_ENV
echo "MAKEFLAGS=$MAKEFLAGS" >>$GITHUB_ENV
MD5=$(curl https://scan.coverity.com/download/$COVERITY_LANGUAGE/$COVERITY_PLATFORM \
--fail \
--form token='${{ secrets.COVERITY_SCAN_TOKEN }}' \
--form project="$COVERITY_PROJECT" \
--form md5=1)
case $? in
0) ;; # okay
22) # 40x, i.e. access denied
echo "::error::incorrect token or project?" >&2
exit 1
;;
*) # other error
echo "::error::Failed to retrieve MD5" >&2
exit 1
;;
esac
echo "hash=$MD5" >>$GITHUB_OUTPUT
# Try to cache the tool to avoid downloading 1GB+ on every run.
# A cache miss will add ~30s to create, but a cache hit will save minutes.
- name: restore the Coverity Build Tool
id: cache
uses: actions/cache/restore@v4
with:
path: ${{ runner.temp }}/cov-analysis
key: cov-build-${{ env.COVERITY_LANGUAGE }}-${{ env.COVERITY_PLATFORM }}-${{ steps.lookup.outputs.hash }}
- name: download the Coverity Build Tool (${{ env.COVERITY_LANGUAGE }} / ${{ env.COVERITY_PLATFORM}})
if: steps.cache.outputs.cache-hit != 'true'
run: |
curl https://scan.coverity.com/download/$COVERITY_LANGUAGE/$COVERITY_PLATFORM \
--fail --no-progress-meter \
--output $RUNNER_TEMP/$COVERITY_TOOL_FILENAME \
--form token='${{ secrets.COVERITY_SCAN_TOKEN }}' \
--form project="$COVERITY_PROJECT"
- name: extract the Coverity Build Tool
if: steps.cache.outputs.cache-hit != 'true'
run: |
case "$COVERITY_TOOL_FILENAME" in
*.tgz)
mkdir $RUNNER_TEMP/cov-analysis &&
tar -xzf $RUNNER_TEMP/$COVERITY_TOOL_FILENAME --strip 1 -C $RUNNER_TEMP/cov-analysis
;;
*.dmg)
cd $RUNNER_TEMP &&
attach="$(hdiutil attach $COVERITY_TOOL_FILENAME)" &&
volume="$(echo "$attach" | cut -f 3 | grep /Volumes/)" &&
mkdir cov-analysis &&
cd cov-analysis &&
sh "$volume"/cov-analysis-macosx-*.sh &&
ls -l &&
hdiutil detach "$volume"
;;
*.zip)
cd $RUNNER_TEMP &&
mkdir cov-analysis-tmp &&
unzip -d cov-analysis-tmp $COVERITY_TOOL_FILENAME &&
mv cov-analysis-tmp/* cov-analysis
;;
*)
echo "::error::unhandled archive type: $COVERITY_TOOL_FILENAME" >&2
exit 1
;;
esac
- name: cache the Coverity Build Tool
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: ${{ runner.temp }}/cov-analysis
key: cov-build-${{ env.COVERITY_LANGUAGE }}-${{ env.COVERITY_PLATFORM }}-${{ steps.lookup.outputs.hash }}
- name: build with cov-build
run: |
export PATH="$RUNNER_TEMP/cov-analysis/bin:$PATH" &&
cov-configure --gcc &&
cov-build --dir cov-int make
- name: package the build
run: tar -czvf cov-int.tgz cov-int
- name: submit the build to Coverity Scan
run: |
curl \
--fail \
--form token='${{ secrets.COVERITY_SCAN_TOKEN }}' \
--form email='${{ secrets.COVERITY_SCAN_EMAIL }}' \
--form file=@cov-int.tgz \
--form version='${{ github.sha }}' \
"https://scan.coverity.com/builds?project=$COVERITY_PROJECT"
111 changes: 111 additions & 0 deletions .github/workflows/l10n.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: git-l10n

on: [push, pull_request_target]

# Avoid unnecessary builds. Unlike the main CI jobs, these are not
# ci-configurable (but could be).
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
git-po-helper:
if: >-
endsWith(github.repository, '/git-po') ||
contains(github.head_ref, 'l10n') ||
contains(github.ref, 'l10n')
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Setup base and head objects
id: setup-tips
run: |
if test "${{ github.event_name }}" = "pull_request_target"
then
base=${{ github.event.pull_request.base.sha }}
head=${{ github.event.pull_request.head.sha }}
else
base=${{ github.event.before }}
head=${{ github.event.after }}
fi
echo base=$base >>$GITHUB_OUTPUT
echo head=$head >>$GITHUB_OUTPUT
- name: Run partial clone
run: |
git -c init.defaultBranch=master init --bare .
git remote add \
--mirror=fetch \
origin \
https://github.com/${{ github.repository }}
# Fetch tips that may be unreachable from github.ref:
# - For a forced push, "$base" may be unreachable.
# - For a "pull_request_target" event, "$head" may be unreachable.
args=
for commit in \
${{ steps.setup-tips.outputs.base }} \
${{ steps.setup-tips.outputs.head }}
do
case $commit in
*[^0]*)
args="$args $commit"
;;
*)
# Should not fetch ZERO-OID.
;;
esac
done
git -c protocol.version=2 fetch \
--progress \
--no-tags \
--no-write-fetch-head \
--filter=blob:none \
origin \
${{ github.ref }} \
$args
- uses: actions/setup-go@v5
with:
go-version: '>=1.16'
cache: false
- name: Install git-po-helper
run: go install github.com/git-l10n/git-po-helper@main
- name: Install other dependencies
run: |
sudo apt-get update -q &&
sudo apt-get install -q -y gettext
- name: Run git-po-helper
id: check-commits
run: |
exit_code=0
git-po-helper check-commits \
--github-action-event="${{ github.event_name }}" -- \
${{ steps.setup-tips.outputs.base }}..${{ steps.setup-tips.outputs.head }} \
>git-po-helper.out 2>&1 || exit_code=$?
if test $exit_code -ne 0 || grep -q WARNING git-po-helper.out
then
# Remove ANSI colors which are proper for console logs but not
# proper for PR comment.
echo "COMMENT_BODY<<EOF" >>$GITHUB_ENV
perl -pe 's/\e\[[0-9;]*m//g; s/\bEOF$//g' git-po-helper.out >>$GITHUB_ENV
echo "EOF" >>$GITHUB_ENV
fi
cat git-po-helper.out
exit $exit_code
- name: Create comment in pull request for report
uses: mshick/add-pr-comment@v2
if: >-
always() &&
github.event_name == 'pull_request_target' &&
env.COMMENT_BODY != ''
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
message: >
${{ steps.check-commits.outcome == 'failure' && 'Errors and warnings' || 'Warnings' }}
found by [git-po-helper](https://github.com/git-l10n/git-po-helper#readme) in workflow
[#${{ github.run_number }}](${{ env.GITHUB_SERVER_URL }}/${{ github.repository }}/actions/runs/${{ github.run_id }}):
```
${{ env.COMMENT_BODY }}
```
437 changes: 437 additions & 0 deletions .github/workflows/main.yml

Large diffs are not rendered by default.

98 changes: 98 additions & 0 deletions .github/workflows/monitor-components.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Monitor component updates

# Git for Windows is a slightly modified subset of MSYS2. Some of its
# components are maintained by Git for Windows, others by MSYS2. To help
# keeping the former up to date, this workflow monitors the Atom/RSS feeds
# and opens new tickets for each new component version.

on:
schedule:
- cron: "23 8,11,14,17 * * *"
workflow_dispatch:

env:
CHARACTER_LIMIT: 5000
MAX_AGE: 7d

jobs:
job:
# Only run this in Git for Windows' fork
if: github.event.repository.owner.login == 'git-for-windows'
runs-on: ubuntu-latest
permissions:
issues: write
strategy:
matrix:
component:
- label: git
feed: https://github.com/git/git/tags.atom
- label: git-lfs
feed: https://github.com/git-lfs/git-lfs/tags.atom
- label: git-credential-manager
feed: https://github.com/git-ecosystem/git-credential-manager/tags.atom
- label: tig
feed: https://github.com/jonas/tig/tags.atom
- label: cygwin
feed: https://github.com/cygwin/cygwin/releases.atom
title-pattern: ^(?!.*newlib)
- label: msys2-runtime-package
feed: https://github.com/msys2/MSYS2-packages/commits/master/msys2-runtime.atom
- label: msys2-runtime
feed: https://github.com/msys2/msys2-runtime/commits/HEAD.atom
aggregate: true
- label: openssh
feed: https://github.com/openssh/openssh-portable/tags.atom
- label: libfido2
feed: https://github.com/Yubico/libfido2/tags.atom
- label: libcbor
feed: https://github.com/PJK/libcbor/tags.atom
- label: openssl
feed: https://github.com/openssl/openssl/tags.atom
title-pattern: ^(?!.*alpha)
- label: gnutls
feed: https://gnutls.org/news.atom
- label: heimdal
feed: https://github.com/heimdal/heimdal/tags.atom
- label: git-sizer
feed: https://github.com/github/git-sizer/tags.atom
- label: gitflow
feed: https://github.com/petervanderdoes/gitflow-avh/tags.atom
- label: curl
feed: https://github.com/curl/curl/tags.atom
- label: libgpg-error
feed: https://github.com/gpg/libgpg-error/releases.atom
title-pattern: ^libgpg-error-[0-9\.]*$
- label: libgcrypt
feed: https://github.com/gpg/libgcrypt/releases.atom
title-pattern: ^libgcrypt-[0-9\.]*$
- label: gpg
feed: https://github.com/gpg/gnupg/releases.atom
- label: mintty
feed: https://github.com/mintty/mintty/releases.atom
- label: 7-zip
feed: https://sourceforge.net/projects/sevenzip/rss?path=/7-Zip
aggregate: true
- label: bash
feed: https://git.savannah.gnu.org/cgit/bash.git/atom/?h=master
aggregate: true
- label: perl
feed: https://github.com/Perl/perl5/tags.atom
title-pattern: ^(?!.*(5\.[0-9]+[13579]|RC))
- label: pcre2
feed: https://github.com/PCRE2Project/pcre2/tags.atom
- label: mingw-w64-llvm
feed: https://github.com/msys2/MINGW-packages/commits/master/mingw-w64-llvm.atom
- label: innosetup
feed: https://github.com/jrsoftware/issrc/tags.atom
fail-fast: false
steps:
- uses: git-for-windows/rss-to-issues@v0
with:
feed: ${{matrix.component.feed}}
prefix: "[New ${{matrix.component.label}} version]"
labels: component-update
github-token: ${{ secrets.GITHUB_TOKEN }}
character-limit: ${{ env.CHARACTER_LIMIT }}
max-age: ${{ env.MAX_AGE }}
aggregate: ${{matrix.component.aggregate}}
title-pattern: ${{matrix.component.title-pattern}}
76 changes: 76 additions & 0 deletions .github/workflows/nano-server.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Windows Nano Server tests

on:
workflow_dispatch:

env:
DEVELOPER: 1

jobs:
test-nano-server:
runs-on: windows-2022
env:
WINDBG_DIR: "C:/Program Files (x86)/Windows Kits/10/Debuggers/x64"
IMAGE: mcr.microsoft.com/powershell:nanoserver-ltsc2022

steps:
- uses: actions/checkout@v4
- uses: git-for-windows/setup-git-for-windows-sdk@v1
- name: build Git
shell: bash
run: make -j15
- name: pull nanoserver image
shell: bash
run: docker pull $IMAGE
- name: run nano-server test
shell: bash
run: |
docker run \
--user "ContainerAdministrator" \
-v "$WINDBG_DIR:C:/dbg" \
-v "$(cygpath -aw /mingw64/bin):C:/mingw64-bin" \
-v "$(cygpath -aw .):C:/test" \
$IMAGE pwsh.exe -Command '
# Extend the PATH to include the `.dll` files in /mingw64/bin/
$env:PATH += ";C:\mingw64-bin"
# For each executable to test pick some no-operation set of
# flags/subcommands or something that should quickly result in an
# error with known exit code that is not a negative 32-bit
# number, and set the expected return code appropriately.
#
# Only test executables that could be expected to run in a UI
# less environment.
#
# ( Executable path, arguments, expected return code )
# also note space is required before close parenthesis (a
# powershell quirk when defining nested arrays like this)
$executables_to_test = @(
("C:\test\git.exe", "", 1 ),
("C:\test\scalar.exe", "version", 0 )
)
foreach ($executable in $executables_to_test)
{
Write-Output "Now testing $($executable[0])"
&$executable[0] $executable[1]
if ($LASTEXITCODE -ne $executable[2]) {
# if we failed, run the debugger to find out what function
# or DLL could not be found and then exit the script with
# failure The missing DLL or EXE will be referenced near
# the end of the output
# Set a flag to have the debugger show loader stub
# diagnostics. This requires running as administrator,
# otherwise the flag will be ignored.
C:\dbg\gflags -i $executable[0] +SLS
C:\dbg\cdb.exe -c "g" -c "q" $executable[0] $executable[1]
exit 1
}
}
exit 0
'
101 changes: 55 additions & 46 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,39 +1,45 @@
/fuzz_corpora
/GIT-BUILD-DIR
/GIT-BUILD-OPTIONS
/GIT-CFLAGS
/GIT-LDFLAGS
/GIT-PREFIX
/GIT-PERL-DEFINES
/GIT-PERL-HEADER
/GIT-PYTHON-VARS
/GIT-SCRIPT-DEFINES
/GIT-SPATCH-DEFINES
/GIT-TEST-SUITES
/GIT-USER-AGENT
/GIT-VERSION-FILE
/bin-wrappers/
/git
/git-add
/git-add--interactive
/git-am
/git-annotate
/git-apply
/git-archimport
/git-archive
/git-backfill
/git-bisect
/git-bisect--helper
/git-blame
/git-branch
/git-bugreport
/git-bundle
/git-cat-file
/git-check-attr
/git-check-ignore
/git-check-mailmap
/git-check-ref-format
/git-checkout
/git-checkout--worker
/git-checkout-index
/git-cherry
/git-cherry-pick
/git-clean
/git-clone
/git-column
/git-commit
/git-commit-graph
/git-commit-tree
/git-config
/git-count-objects
@@ -45,6 +51,7 @@
/git-cvsimport
/git-cvsserver
/git-daemon
/git-diagnose
/git-diff
/git-diff-files
/git-diff-index
@@ -59,28 +66,33 @@
/git-filter-branch
/git-fmt-merge-msg
/git-for-each-ref
/git-for-each-repo
/git-format-patch
/git-fsck
/git-fsck-objects
/git-fsmonitor--daemon
/git-gc
/git-get-tar-commit-id
/git-grep
/git-hash-object
/git-help
/git-hook
/git-http-backend
/git-http-fetch
/git-http-push
/git-imap-send
/git-index-pack
/git-init
/git-init-db
/git-interpret-trailers
/git-instaweb
/git-log
/git-ls-files
/git-ls-remote
/git-ls-tree
/git-mailinfo
/git-mailsplit
/git-maintenance
/git-merge
/git-merge-base
/git-merge-index
@@ -96,43 +108,40 @@
/git-mergetool--lib
/git-mktag
/git-mktree
/git-name-rev
/git-multi-pack-index
/git-mv
/git-name-rev
/git-notes
/git-p4
/git-pack-redundant
/git-pack-objects
/git-pack-refs
/git-parse-remote
/git-patch-id
/git-prune
/git-prune-packed
/git-pull
/git-push
/git-quiltimport
/git-range-diff
/git-read-tree
/git-rebase
/git-rebase--am
/git-rebase--interactive
/git-rebase--merge
/git-receive-pack
/git-reflog
/git-relink
/git-refs
/git-remote
/git-remote-http
/git-remote-https
/git-remote-ftp
/git-remote-ftps
/git-remote-fd
/git-remote-ext
/git-remote-testgit
/git-remote-testpy
/git-remote-testsvn
/git-repack
/git-replace
/git-replay
/git-request-pull
/git-rerere
/git-reset
/git-restore
/git-rev-list
/git-rev-parse
/git-revert
@@ -142,19 +151,23 @@
/git-sh-i18n
/git-sh-i18n--envsubst
/git-sh-setup
/git-sh-i18n
/git-shell
/git-shortlog
/git-show
/git-show-branch
/git-show-index
/git-show-ref
/git-sparse-checkout
/git-stage
/git-stash
/git-status
/git-stripspace
/git-submodule
/git-submodule--helper
/git-subtree
/git-survey
/git-svn
/git-switch
/git-symbolic-ref
/git-tag
/git-unpack-file
@@ -168,50 +181,32 @@
/git-verify-commit
/git-verify-pack
/git-verify-tag
/git-version
/git-web--browse
/git-whatchanged
/git-worktree
/git-write-tree
/scalar
/git-core-*/?*
/git.res
/gitweb/GITWEB-BUILD-OPTIONS
/gitweb/gitweb.cgi
/gitweb/static/gitweb.js
/gitweb/static/gitweb.min.*
/test-chmtime
/test-ctype
/test-date
/test-delta
/test-dump-cache-tree
/test-dump-split-index
/test-scrap-cache-tree
/test-genrandom
/test-hashmap
/test-index-version
/test-line-buffer
/test-match-trees
/test-mergesort
/test-mktemp
/test-parse-options
/test-path-utils
/test-prio-queue
/test-read-cache
/test-regex
/test-revision-walking
/test-run-command
/test-sha1
/test-sigchain
/test-string-list
/test-subprocess
/test-svn-fe
/test-urlmatch-normalization
/test-wildmatch
/common-cmds.h
/config-list.h
/command-list.h
/hook-list.h
/version-def.h
*.tar.gz
*.dsc
*.deb
/git.rc
/git.spec
*.exe
*.[aos]
*.o.json
*.py[co]
.build/
.depend/
*.gcda
*.gcno
@@ -228,19 +223,33 @@
/config.mak.autogen
/config.mak.append
/configure
/unicode
/.vscode/
/tags
/TAGS
/cscope*
/compile_commands.json
/.cache/
*.hcc
*.obj
*.lib
*.res
*.sln
*.sp
*.suo
*.ncb
*.vcproj
*.user
*.idb
*.pdb
/Debug/
/Release/
*.ilk
*.iobj
*.ipdb
*.dll
.vs/
Debug/
Release/
/UpgradeLog*.htm
/git.VC.VC.opendb
/git.VC.db
*.dSYM
/contrib/buildsystems/out
CMakeSettings.json
220 changes: 220 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
default:
timeout: 2h

stages:
- build
- test
- analyze

workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_REF_PROTECTED == "true"

test:linux:
image: $image
stage: test
needs: [ ]
tags:
- saas-linux-medium-amd64
variables:
CUSTOM_PATH: "/custom"
TEST_OUTPUT_DIRECTORY: "/tmp/test-output"
before_script:
- ./ci/install-dependencies.sh
script:
- useradd builder --create-home
- chown -R builder "${CI_PROJECT_DIR}"
- sudo --preserve-env --set-home --user=builder ./ci/run-build-and-tests.sh
after_script:
- |
if test "$CI_JOB_STATUS" != 'success'
then
sudo --preserve-env --set-home --user=builder ./ci/print-test-failures.sh
mv "$TEST_OUTPUT_DIRECTORY"/failed-test-artifacts t/
fi
parallel:
matrix:
- jobname: linux-old
image: ubuntu:20.04
CC: gcc
- jobname: linux-sha256
image: ubuntu:latest
CC: clang
- jobname: linux-reftable
image: ubuntu:latest
CC: clang
- jobname: linux-gcc
image: ubuntu:20.04
CC: gcc
CC_PACKAGE: gcc-8
- jobname: linux-TEST-vars
image: ubuntu:20.04
CC: gcc
CC_PACKAGE: gcc-8
- jobname: linux-gcc-default
image: ubuntu:latest
CC: gcc
- jobname: linux-leaks
image: ubuntu:latest
CC: gcc
- jobname: linux-reftable-leaks
image: ubuntu:latest
CC: gcc
- jobname: linux-asan-ubsan
image: ubuntu:latest
CC: clang
- jobname: pedantic
image: fedora:latest
- jobname: linux-musl
image: alpine:latest
- jobname: linux-meson
image: ubuntu:latest
CC: gcc
artifacts:
paths:
- t/failed-test-artifacts
when: on_failure

test:osx:
image: $image
stage: test
needs: [ ]
tags:
- saas-macos-medium-m1
variables:
TEST_OUTPUT_DIRECTORY: "/Volumes/RAMDisk"
before_script:
# Create a 4GB RAM disk that we use to store test output on. This small hack
# significantly speeds up tests by more than a factor of 2 because the
# macOS runners use network-attached storage as disks, which is _really_
# slow with the many small writes that our tests do.
- sudo diskutil apfs create $(hdiutil attach -nomount ram://8192000) RAMDisk
- ./ci/install-dependencies.sh
script:
- ./ci/run-build-and-tests.sh
after_script:
- |
if test "$CI_JOB_STATUS" != 'success'
then
./ci/print-test-failures.sh
mv "$TEST_OUTPUT_DIRECTORY"/failed-test-artifacts t/
fi
parallel:
matrix:
- jobname: osx-clang
image: macos-14-xcode-15
CC: clang
- jobname: osx-reftable
image: macos-14-xcode-15
CC: clang
- jobname: osx-meson
image: macos-14-xcode-15
CC: clang
artifacts:
paths:
- t/failed-test-artifacts
when: on_failure

build:mingw64:
stage: build
tags:
- saas-windows-medium-amd64
variables:
NO_PERL: 1
before_script:
- ./ci/install-sdk.ps1 -directory "git-sdk"
script:
- git-sdk/usr/bin/bash.exe -l -c 'ci/make-test-artifacts.sh artifacts'
artifacts:
paths:
- artifacts
- git-sdk

test:mingw64:
stage: test
tags:
- saas-windows-medium-amd64
needs:
- job: "build:mingw64"
artifacts: true
before_script:
- git-sdk/usr/bin/bash.exe -l -c 'tar xf artifacts/artifacts.tar.gz'
- New-Item -Path .git/info -ItemType Directory
- New-Item .git/info/exclude -ItemType File -Value "/git-sdk"
script:
- git-sdk/usr/bin/bash.exe -l -c "ci/run-test-slice.sh $CI_NODE_INDEX $CI_NODE_TOTAL"
after_script:
- git-sdk/usr/bin/bash.exe -l -c 'ci/print-test-failures.sh'
parallel: 10

test:fuzz-smoke-tests:
image: ubuntu:latest
stage: test
needs: [ ]
variables:
CC: clang
before_script:
- ./ci/install-dependencies.sh
script:
- ./ci/run-build-and-minimal-fuzzers.sh

static-analysis:
image: ubuntu:22.04
stage: analyze
needs: [ ]
variables:
jobname: StaticAnalysis
before_script:
- ./ci/install-dependencies.sh
script:
- ./ci/run-static-analysis.sh
- ./ci/check-directional-formatting.bash

check-whitespace:
image: ubuntu:latest
stage: analyze
needs: [ ]
before_script:
- ./ci/install-dependencies.sh
# Since $CI_MERGE_REQUEST_TARGET_BRANCH_SHA is only defined for merged
# pipelines, we fallback to $CI_MERGE_REQUEST_DIFF_BASE_SHA, which should
# be defined in all pipelines.
script:
- |
R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
./ci/check-whitespace.sh "$R"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'

check-style:
image: ubuntu:latest
stage: analyze
needs: [ ]
allow_failure: true
variables:
CC: clang
jobname: ClangFormat
before_script:
- ./ci/install-dependencies.sh
# Since $CI_MERGE_REQUEST_TARGET_BRANCH_SHA is only defined for merged
# pipelines, we fallback to $CI_MERGE_REQUEST_DIFF_BASE_SHA, which should
# be defined in all pipelines.
script:
- |
R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
./ci/run-style-check.sh "$R"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'

documentation:
image: ubuntu:latest
stage: analyze
needs: [ ]
variables:
jobname: Documentation
before_script:
- ./ci/install-dependencies.sh
script:
- ./ci/test-documentation.sh
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[submodule "sha1collisiondetection"]
path = sha1collisiondetection
url = https://github.com/cr-marcstevens/sha1collisiondetection.git
branch = master
62 changes: 57 additions & 5 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -13,52 +13,74 @@ Alex Riesen <raa.lkml@gmail.com> <raa@limbo.localdomain>
Alex Riesen <raa.lkml@gmail.com> <raa@steel.home>
Alex Vandiver <alex@chmrr.net> <alexmv@MIT.EDU>
Alexander Gavrilov <angavrilov@gmail.com>
Alexander Kuleshov <kuleshovmail@gmail.com>
Alexey Shumkin <alex.crezoff@gmail.com> <zapped@mail.ru>
Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com>
Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com>
Anders Kaseorg <andersk@MIT.EDU> <andersk@mit.edu>
Andrey Mazo <ahippo@yandex.com> Mazo, Andrey <amazo@checkvideo.com>
Aneesh Kumar K.V <aneesh.kumar@gmail.com>
Amos Waterland <apw@debian.org> <apw@rossby.metr.ou.edu>
Amos Waterland <apw@debian.org> <apw@us.ibm.com>
Ben Peart <benpeart@microsoft.com> <Ben.Peart@microsoft.com>
Ben Peart <benpeart@microsoft.com> <peartben@gmail.com>
Ben Walton <bdwalton@gmail.com> <bwalton@artsci.utoronto.ca>
Benoit Sigoure <tsunanet@gmail.com> <tsuna@lrde.epita.fr>
Bernt Hansen <bernt@norang.ca> <bernt@alumni.uwaterloo.ca>
Brandon Casey <drafnel@gmail.com> <casey@nrlssc.navy.mil>
brian m. carlson <sandals@crustytoothpaste.ath.cx> Brian M. Carlson <sandals@crustytoothpaste.ath.cx>
brian m. carlson <sandals@crustytoothpaste.ath.cx> <sandals@crustytoothpaste.net>
Brandon Williams <bwilliams.eng@gmail.com> <bmwill@google.com>
brian m. carlson <sandals@crustytoothpaste.net>
brian m. carlson <sandals@crustytoothpaste.net> <sandals@crustytoothpaste.ath.cx>
brian m. carlson <sandals@crustytoothpaste.net> <bk2204@github.com>
Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com>
Bryan Larsen <bryan@larsen.st> <bryanlarsen@yahoo.com>
Cheng Renquan <crquan@gmail.com>
Chris Shoemaker <c.shoemaker@cox.net>
Chris Wright <chrisw@sous-sol.org> <chrisw@osdl.org>
Christian Ludwig <chrissicool@gmail.com> <chrissicool@googlemail.com>
Cord Seele <cowose@gmail.com> <cowose@googlemail.com>
Christian Couder <chriscool@tuxfamily.org> <christian.couder@gmail.com>
Christian Stimming <stimming@tuhh.de> <chs@ckiste.goetheallee>
Christopher Díaz Riveros <chrisadr@gentoo.org> Christopher Diaz Riveros
Clemens Buchacher <drizzd@gmx.net> <drizzd@aon.at>
Clemens Buchacher <drizzd@gmx.net> <clemens.buchacher@intel.com>
Csaba Henk <csaba@gluster.com> <csaba@lowlife.hu>
Dan Johnson <computerdruid@gmail.com>
Dana L. How <danahow@gmail.com> <how@deathvalley.cswitch.com>
Dana L. How <danahow@gmail.com> Dana How
Daniel Barkalow <barkalow@iabervon.org>
Daniel Knittl-Frank <knittl89@googlemail.com> knittl
Daniel Trstenjak <daniel.trstenjak@gmail.com> <daniel.trstenjak@online.de>
Daniel Trstenjak <daniel.trstenjak@gmail.com> <trsten@science-computing.de>
David Brown <git@davidb.org> <davidb@quicinc.com>
David D. Kilzer <ddkilzer@kilzer.net>
David Kågedal <davidk@lysator.liu.se>
David Reiss <dreiss@facebook.com> <dreiss@dreiss-vmware.(none)>
David S. Miller <davem@davemloft.net>
David Turner <novalis@novalis.org> <dturner@twopensource.com>
David Turner <novalis@novalis.org> <dturner@twosigma.com>
Derrick Stolee <stolee@gmail.com> <derrickstolee@github.com>
Derrick Stolee <stolee@gmail.com> Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Derrick Stolee <stolee@gmail.com> <dstolee@microsoft.com>
Deskin Miller <deskinm@umich.edu>
Đoàn Trần Công Danh <congdanhqx@gmail.com> Doan Tran Cong Danh
Dirk Süsserott <newsletter@dirk.my1.cc>
Emily Shaffer <nasamuffin@google.com> <emilyshaffer@google.com>
Eric Blake <eblake@redhat.com> <ebb9@byu.net>
Eric Hanchrow <eric.hanchrow@gmail.com> <offby1@blarg.net>
Eric S. Raymond <esr@thyrsus.com>
Eric Wong <e@80x24.org> <normalperson@yhbt.net>
Erik Faye-Lund <kusmabite@gmail.com> <kusmabite@googlemail.com>
Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com> <eyvind-git@orakel.ntnu.no>
Fangyi Zhou <fangyi.zhou@yuriko.moe> Zhou Fangyi
Florian Achleitner <florian.achleitner.2.6.31@gmail.com> <florian.achleitner2.6.31@gmail.com>
Franck Bui-Huu <vagabon.xyz@gmail.com> <fbuihuu@gmail.com>
Frank Lichtenheld <frank@lichtenheld.de> <djpig@debian.org>
Frank Lichtenheld <frank@lichtenheld.de> <flichtenheld@astaro.com>
Fredrik Kuivinen <frekui@gmail.com> <freku045@student.liu.se>
Frédéric Heitzmann <frederic.heitzmann@gmail.com>
Garry Dolley <gdolley@ucla.edu> <gdolley@arpnetworks.com>
Glen Choo <glencbz@gmail.com> <chooglen@google.com>
Greg Price <price@mit.edu> <price@MIT.EDU>
Greg Price <price@mit.edu> <price@ksplice.com>
Heiko Voigt <hvoigt@hvoigt.net> <git-list@hvoigt.net>
@@ -81,14 +103,18 @@ Jason McMullan <mcmullan@netapp.com>
Jason Riedy <ejr@eecs.berkeley.edu> <ejr@EECS.Berkeley.EDU>
Jason Riedy <ejr@eecs.berkeley.edu> <ejr@cs.berkeley.edu>
Jay Soffian <jaysoffian@gmail.com> <jaysoffian+git@gmail.com>
Jean-Noël Avila <jn.avila@free.fr> Jean-Noel Avila
Jean-Noël Avila <jn.avila@free.fr> Jean-Noël AVILA
Jeff King <peff@peff.net> <peff@github.com>
Jeff Muizelaar <jmuizelaar@mozilla.com> <jeff@infidigm.net>
Jens Axboe <axboe@kernel.dk> <axboe@suse.de>
Jens Axboe <axboe@kernel.dk> <jens.axboe@oracle.com>
Jens Lindström <jl@opera.com> Jens Lindstrom <jl@opera.com>
Jim Meyering <jim@meyering.net> <meyering@redhat.com>
Joachim Berdal Haga <cjhaga@fys.uio.no>
Joachim Jablon <joachim.jablon@people-doc.com> <ewjoachim@gmail.com>
Johannes Schindelin <Johannes.Schindelin@gmx.de> <johannes.schindelin@gmx.de>
Johannes Schindelin <Johannes.Schindelin@gmx.de> Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Johannes Sixt <j6t@kdbg.org> <J.Sixt@eudaptics.com>
Johannes Sixt <j6t@kdbg.org> <j.sixt@viscovery.net>
Johannes Sixt <j6t@kdbg.org> <johannes.sixt@telecom.at>
@@ -108,6 +134,7 @@ Junio C Hamano <gitster@pobox.com> <junio@pobox.com>
Junio C Hamano <gitster@pobox.com> <junio@twinsun.com>
Junio C Hamano <gitster@pobox.com> <junkio@cox.net>
Junio C Hamano <gitster@pobox.com> <junkio@twinsun.com>
Kaartic Sivaraam <kaartic.sivaraam@gmail.com> <kaarticsivaraam91196@gmail.com>
Karl Wiberg <kha@treskal.com> Karl Hasselström
Karl Wiberg <kha@treskal.com> <kha@yoghurt.hemma.treskal.com>
Karsten Blees <blees@dcon.de> <karsten.blees@dcon.de>
@@ -125,6 +152,7 @@ Lars Doelle <lars.doelle@on-line ! de>
Lars Doelle <lars.doelle@on-line.de>
Lars Noschinski <lars@public.noschinski.de> <lars.noschinski@rwth-aachen.de>
Li Hong <leehong@pku.edu.cn>
Linus Arver <linus@ucla.edu> <linusa@google.com>
Linus Torvalds <torvalds@linux-foundation.org> <torvalds@evo.osdl.org>
Linus Torvalds <torvalds@linux-foundation.org> <torvalds@g5.osdl.org>
Linus Torvalds <torvalds@linux-foundation.org> <torvalds@osdl.org>
@@ -139,14 +167,19 @@ Mark Levedahl <mdl123@verizon.net> <mlevedahl@gmail.com>
Mark Rada <marada@uwaterloo.ca>
Martin Langhoff <martin@laptop.org> <martin@catalyst.net.nz>
Martin von Zweigbergk <martinvonz@gmail.com> <martin.von.zweigbergk@gmail.com>
Masaya Suzuki <masayasuzuki@google.com> <draftcode@gmail.com>
Matheus Tavares <matheus.tavb@gmail.com> <matheus.bernardino@usp.br>
Matt Draisey <matt@draisey.ca> <mattdraisey@sympatico.ca>
Matt Kraai <kraai@ftbfs.org> <matt.kraai@amo.abbott.com>
Matt McCutchen <matt@mattmccutchen.net> <hashproduct@gmail.com>
Matthias Kestenholz <matthias@spinlock.ch> <mk@spinlock.ch>
Matthias Rüster <matthias.ruester@gmail.com> Matthias Ruester
Matthias Urlichs <matthias@urlichs.de> <smurf@kiste.(none)>
Matthias Urlichs <matthias@urlichs.de> <smurf@smurf.noris.de>
Matthieu Moy <git@matthieu-moy.fr> <Matthieu.Moy@imag.fr>
Michael Coleman <tutufan@gmail.com>
Michael J Gruber <git@drmicha.warpmail.net> <michaeljgruber+gmane@fastmail.fm>
Michael J Gruber <git@grubix.eu> <michaeljgruber+gmane@fastmail.fm>
Michael J Gruber <git@grubix.eu> <git@drmicha.warpmail.net>
Michael S. Tsirkin <mst@kernel.org> <mst@redhat.com>
Michael S. Tsirkin <mst@kernel.org> <mst@mellanox.co.il>
Michael S. Tsirkin <mst@kernel.org> <mst@dev.mellanox.co.il>
@@ -167,11 +200,16 @@ Nick Stokoe <nick@noodlefactory.co.uk> Nick Woolley <nick@noodlefactory.co.uk>
Nick Stokoe <nick@noodlefactory.co.uk> Nick Woolley <nickwoolley@yahoo.co.uk>
Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com> <nicolas.morey@free.fr>
Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com> <nmorey@kalray.eu>
Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com> <nicolas@morey-chaisemartin.com>
Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com> <NMoreyChaisemartin@suse.com>
Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com> <nmoreychaisemartin@suse.com>
Nicolas Sebrecht <nicolas.s.dev@gmx.fr> <ni.s@laposte.net>
Orgad Shaneh <orgads@gmail.com> <orgad.shaneh@audiocodes.com>
Paolo Bonzini <bonzini@gnu.org> <paolo.bonzini@lu.unisi.ch>
Pascal Obry <pascal@obry.net> <pascal.obry@gmail.com>
Pascal Obry <pascal@obry.net> <pascal.obry@wanadoo.fr>
Pat Notz <patnotz@gmail.com> <pknotz@sandia.gov>
Patrick Steinhardt <ps@pks.im> <patrick.steinhardt@elego.de>
Paul Mackerras <paulus@samba.org> <paulus@dorrigo.(none)>
Paul Mackerras <paulus@samba.org> <paulus@pogo.(none)>
Peter Baumann <waste.manager@gmx.de> <Peter.B.Baumann@stud.informatik.uni-erlangen.de>
@@ -182,11 +220,17 @@ Petr Baudis <pasky@ucw.cz> <pasky@suse.cz>
Petr Baudis <pasky@ucw.cz> <xpasky@machine>
Phil Hord <hordp@cisco.com> <phil.hord@gmail.com>
Philip Jägenstedt <philip@foolip.org> <philip.jagenstedt@gmail.com>
Philip Oakley <philipoakley@iee.email> <philipoakley@iee.org> # secondary <philipoakley@dunelm.org.uk>
Philipp A. Hartmann <pah@qo.cx> <ph@sorgh.de>
Philippe Bruhat <book@cpan.org>
Ralf Thielow <ralf.thielow@gmail.com> <ralf.thielow@googlemail.com>
Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Ramsay Jones <ramsay@ramsayjones.plus.com> <ramsay@ramsay1.demon.co.uk>
Ramkumar Ramachandra <r@artagnon.com> <artagnon@gmail.com>
Randall S. Becker <randall.becker@nexbridge.ca> <rsbecker@nexbridge.com>
René Scharfe <l.s.r@web.de> <rene.scharfe@lsrfire.ath.cx>
René Scharfe <l.s.r@web.de> Rene Scharfe
Richard Hansen <rhansen@rhansen.org> <hansenr@google.com>
Richard Hansen <rhansen@rhansen.org> <rhansen@bbn.com>
Robert Fitzsimons <robfitz@273k.net>
Robert Shearman <robertshearman@gmail.com> <rob@codeweavers.com>
Robert Zeh <robert.a.zeh@gmail.com>
@@ -202,21 +246,27 @@ Sean Estabrooks <seanlkml@sympatico.ca>
Sebastian Schuberth <sschuberth@gmail.com> <sschuberth@visageimaging.com>
Seth Falcon <seth@userprimary.net> <sfalcon@fhcrc.org>
Shawn O. Pearce <spearce@spearce.org>
Wei Shuyu <wsy@dogben.com> Shuyu Wei
Sidhant Sharma <tigerkid001@gmail.com> Sidhant Sharma [:tk]
Simon Hausmann <hausmann@kde.org> <simon@lst.de>
Simon Hausmann <hausmann@kde.org> <shausman@trolltech.com>
Stefan Beller <stefanbeller@gmail.com> <stefanbeller@googlemail.com>
Stefan Beller <stefanbeller@gmail.com> <sbeller@google.com>
Stefan Naewe <stefan.naewe@gmail.com> <stefan.naewe@atlas-elektronik.com>
Stefan Naewe <stefan.naewe@gmail.com> <stefan.naewe@googlemail.com>
Stefan Sperling <stsp@elego.de> <stsp@stsp.name>
Štěpán Němec <stepnem@gmail.com> <stepan.nemec@gmail.com>
Stephen Boyd <bebarino@gmail.com> <sboyd@codeaurora.org>
Stephen P. Smith <ishchis2@gmail.com> <ischis2@cox.net>
Steven Drake <sdrake@xnet.co.nz> <sdrake@ihug.co.nz>
Steven Grimm <koreth@midwinter.com> <sgrimm@sgrimm-mbp.local>
Steven Grimm <koreth@midwinter.com> koreth@midwinter.com
Steven Walter <stevenrwalter@gmail.com> <swalter@lexmark.com>
Steven Walter <stevenrwalter@gmail.com> <swalter@lpdev.prtdev.lexmark.com>
Sven Verdoolaege <skimo@kotnet.org> <Sven.Verdoolaege@cs.kuleuven.ac.be>
Sven Verdoolaege <skimo@kotnet.org> <skimo@liacs.nl>
SZEDER Gábor <szeder.dev@gmail.com> <szeder@ira.uka.de>
Tao Qingyun <taoqy@ls-a.me> <845767657@qq.com>
Tay Ray Chuan <rctay89@gmail.com>
Ted Percival <ted@midg3t.net> <ted.percival@quest.com>
Theodore Ts'o <tytso@mit.edu>
@@ -240,12 +290,14 @@ Uwe Kleine-König <u.kleine-koenig@pengutronix.de> <ukleinek@informatik.uni-frei
Uwe Kleine-König <u.kleine-koenig@pengutronix.de> <uzeisberger@io.fsforth.de>
Uwe Kleine-König <u.kleine-koenig@pengutronix.de> <zeisberg@informatik.uni-freiburg.de>
Ville Skyttä <ville.skytta@iki.fi> <scop@xemacs.org>
Vitaly "_Vi" Shukela <public_vi@tut.by>
Vitaly "_Vi" Shukela <vi0oss@gmail.com> <public_vi@tut.by>
Vitaly "_Vi" Shukela <vi0oss@gmail.com> Vitaly _Vi Shukela
W. Trevor King <wking@tremily.us> <wking@drexel.edu>
William Pursell <bill.pursell@gmail.com>
YONETANI Tomokazu <y0n3t4n1@gmail.com> <qhwt+git@les.ath.cx>
YONETANI Tomokazu <y0n3t4n1@gmail.com> <y0netan1@dragonflybsd.org>
YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Yi-Jyun Pan <pan93412@gmail.com>
# the two anonymous contributors are different persons:
anonymous <linux@horizon.com>
anonymous <linux@horizon.net>
16 changes: 16 additions & 0 deletions .tsan-suppressions
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Suppressions for ThreadSanitizer (tsan).
#
# This file is used by setting the environment variable TSAN_OPTIONS to, e.g.,
# "suppressions=$(pwd)/.tsan-suppressions". Observe that relative paths such as
# ".tsan-suppressions" might not work.

# A static variable is written to racily, but we always write the same value, so
# in practice it (hopefully!) doesn't matter.
race:^want_color$
race:^transfer_debug$

# A boolean value, which tells whether the replace_map has been initialized or
# not, is read racily with an update. As this variable is written to only once,
# and it's OK if the value change right after reading it, this shouldn't be a
# problem.
race:^lookup_replace_object$
130 changes: 130 additions & 0 deletions ARCHITECTURE.md

Large diffs are not rendered by default.

139 changes: 139 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# Git for Windows Code of Conduct

This code of conduct outlines our expectations for participants within
the **Git for Windows** community, as well as steps for reporting unacceptable
behavior. We are committed to providing a welcoming and inspiring community
for all and expect our code of conduct to be honored. Anyone who violates
this code of conduct may be banned from the community.

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the Git for Windows maintainer.

All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series of
actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within the
community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].

[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

417 changes: 417 additions & 0 deletions CONTRIBUTING.md

Large diffs are not rendered by default.

9 changes: 8 additions & 1 deletion Documentation/.gitignore
Original file line number Diff line number Diff line change
@@ -10,4 +10,11 @@ howto-index.txt
doc.dep
cmds-*.txt
mergetools-*.txt
manpage-base-url.xsl
SubmittingPatches.txt
tmp-doc-diff/
tmp-meson-diff/
GIT-ASCIIDOCFLAGS
/.build/
/GIT-EXCLUDED-PROGRAMS
/asciidoc.conf
/asciidoctor-extensions.rb
174 changes: 174 additions & 0 deletions Documentation/BreakingChanges.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
= Upcoming breaking changes

The Git project aims to ensure backwards compatibility to the best extent
possible. Minor releases will not break backwards compatibility unless there is
a very strong reason to do so, like for example a security vulnerability.

Regardless of that, due to the age of the Git project, it is only natural to
accumulate a backlog of backwards-incompatible changes that will eventually be
required to keep the project aligned with a changing world. These changes fall
into several categories:

* Changes to long established defaults.
* Concepts that have been replaced with a superior design.
* Concepts, commands, configuration or options that have been lacking in major
ways and that cannot be fixed and which will thus be removed without any
replacement.

Explicitly not included in this list are fixes to minor bugs that may cause a
change in user-visible behavior.

The Git project irregularly releases breaking versions that deliberately break
backwards compatibility with older versions. This is done to ensure that Git
remains relevant, safe and maintainable going forward. The release cadence of
breaking versions is typically measured in multiple years. We had the following
major breaking releases in the past:

* Git 1.6.0, released in August 2008.
* Git 2.0, released in May 2014.

We use <major>.<minor> release numbers these days, starting from Git 2.0. For
future releases, our plan is to increment <major> in the release number when we
make the next breaking release. Before Git 2.0, the release numbers were
1.<major>.<minor> with the intention to increment <major> for "usual" breaking
releases, reserving the jump to Git 2.0 for really large backward-compatibility
breaking changes.

The intent of this document is to track upcoming deprecations for future
breaking releases. Furthermore, this document also tracks what will _not_ be
deprecated. This is done such that the outcome of discussions document both
when the discussion favors deprecation, but also when it rejects a deprecation.

Items should have a clear summary of the reasons why we do or do not want to
make the described change that can be easily understood without having to read
the mailing list discussions. If there are alternatives to the changed feature,
those alternatives should be pointed out to our users.

All items should be accompanied by references to relevant mailing list threads
where the deprecation was discussed. These references use message-IDs, which
can visited via

https://lore.kernel.org/git/$message_id/

to see the message and its surrounding discussion. Such a reference is there to
make it easier for you to find how the project reached consensus on the
described item back then.

This is a living document as the environment surrounding the project changes
over time. If circumstances change, an earlier decision to deprecate or change
something may need to be revisited from time to time. So do not take items on
this list to mean "it is settled, do not waste our time bringing it up again".

== Procedure

Discussing the desire to make breaking changes, declaring that breaking
changes are made at a certain version boundary, and recording these
decisions in this document, are necessary but not sufficient.
Because such changes are expected to be numerous, and the design and
implementation of them are expected to span over time, they have to
be deployable trivially at such a version boundary.

The breaking changes MUST be guarded with the a compile-time switch,
WITH_BREAKING_CHANGES, to help this process. When built with it,
the resulting Git binary together with its documentation would
behave as if these breaking changes slated for the next big version
boundary are already in effect. We may also want to have a CI job
or two to exercise the work-in-progress version of Git with these
breaking changes.


== Git 3.0

The following subsections document upcoming breaking changes for Git 3.0. There
is no planned release date for this breaking version yet. The early
adopter configuration used for changes for this release is `feature.git3`.

Proposed changes and removals only include items which are "ready" to be done.
In other words, this is not supposed to be a wishlist of features that should
be changed to or replaced in case the alternative was implemented already.

=== Changes

* The default hash function for new repositories will be changed from "sha1"
to "sha256". SHA-1 has been deprecated by NIST in 2011 and is nowadays
recommended against in FIPS 140-2 and similar certifications. Furthermore,
there are practical attacks on SHA-1 that weaken its cryptographic properties:
+
** The SHAppening (2015). The first demonstration of a practical attack
against SHA-1 with 2^57 operations.
** SHAttered (2017). Generation of two valid PDF files with 2^63 operations.
** Birthday-Near-Collision (2019). This attack allows for chosen prefix
attacks with 2^68 operations.
** Shambles (2020). This attack allows for chosen prefix attacks with 2^63
operations.
+
While we have protections in place against known attacks, it is expected
that more attacks against SHA-1 will be found by future research. Paired
with the ever-growing capability of hardware, it is only a matter of time
before SHA-1 will be considered broken completely. We want to be prepared
and will thus change the default hash algorithm to "sha256" for newly
initialized repositories.
+
An important requirement for this change is that the ecosystem is ready to
support the "sha256" object format. This includes popular Git libraries,
applications and forges.
+
There is no plan to deprecate the "sha1" object format at this point in time.
+
Cf. <2f5de416-04ba-c23d-1e0b-83bb655829a7@zombino.com>,
<20170223155046.e7nxivfwqqoprsqj@LykOS.localdomain>,
<CA+EOSBncr=4a4d8n9xS4FNehyebpmX8JiUwCsXD47EQDE+DiUQ@mail.gmail.com>.

=== Removals

* Support for grafting commits has long been superseded by git-replace(1).
Grafts are inferior to replacement refs:
+
** Grafts are a local-only mechanism and cannot be shared across
repositories.
** Grafts can lead to hard-to-diagnose problems when transferring objects
between repositories.
+
The grafting mechanism has been marked as outdated since e650d0643b (docs: mark
info/grafts as outdated, 2014-03-05) and will be removed.
+
Cf. <20140304174806.GA11561@sigill.intra.peff.net>.

* The git-pack-redundant(1) command can be used to remove redundant pack files.
The subcommand is unusably slow and the reason why nobody reports it as a
performance bug is suspected to be the absence of users. We have nominated
the command for removal and have started to emit a user-visible warning in
c3b58472be (pack-redundant: gauge the usage before proposing its removal,
2020-08-25) whenever the command is executed.
+
So far there was a single complaint about somebody still using the command, but
that complaint did not cause us to reverse course. On the contrary, we have
doubled down on the deprecation and starting with 4406522b76 (pack-redundant:
escalate deprecation warning to an error, 2023-03-23), the command dies unless
the user passes the `--i-still-use-this` option.
+
There have not been any subsequent complaints, so this command will finally be
removed.
+
Cf. <xmqq1rjuz6n3.fsf_-_@gitster.c.googlers.com>,
<CAKvOHKAFXQwt4D8yUCCkf_TQL79mYaJ=KAKhtpDNTvHJFuX1NA@mail.gmail.com>,
<20230323204047.GA9290@coredump.intra.peff.net>,

== Superseded features that will not be deprecated

Some features have gained newer replacements that aim to improve the design in
certain ways. The fact that there is a replacement does not automatically mean
that the old way of doing things will eventually be removed. This section tracks
those features with newer alternatives.

* The features git-checkout(1) offers are covered by the pair of commands
git-restore(1) and git-switch(1). Because the use of git-checkout(1) is still
widespread, and it is not expected that this will change anytime soon, all
three commands will stay.
+
This decision may get revisited in case we ever figure out that there are
almost no users of any of the commands anymore.
+
Cf. <xmqqttjazwwa.fsf@gitster.g>,
<xmqqleeubork.fsf@gitster.g>,
<112b6568912a6de6672bf5592c3a718e@manjaro.org>.
599 changes: 517 additions & 82 deletions Documentation/CodingGuidelines

Large diffs are not rendered by default.

74 changes: 74 additions & 0 deletions Documentation/DecisionMaking.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
Decision-Making Process in the Git Project
==========================================

Introduction
------------
This document describes the current decision-making process in the Git
project. It is a descriptive rather than prescriptive doc; that is, we want to
describe how things work in practice rather than explicitly recommending any
particular process or changes to the current process.

Here we document how the project makes decisions for discussions
(with or without patches), in scale larger than an individual patch
series (which is fully covered by the SubmittingPatches document).


Larger Discussions (with patches)
---------------------------------
As with discussions on an individual patch series, starting a larger-scale
discussion often begins by sending a patch or series to the list. This might
take the form of an initial design doc, with implementation following in later
iterations of the series (for example,
link:https://lore.kernel.org/git/0169ce6fb9ccafc089b74ae406db0d1a8ff8ac65.1688165272.git.steadmon@google.com/[adding unit tests] or
link:https://lore.kernel.org/git/20200420235310.94493-1-emilyshaffer@google.com/[config-based hooks]),
or it might include a full implementation from the beginning.
In either case, discussion progresses the same way for an individual patch series,
until consensus is reached or the topic is dropped.


Larger Discussions (without patches)
------------------------------------
Occasionally, larger discussions might occur without an associated patch series.
These may be very large-scale technical decisions that are beyond the scope of
even a single large patch series, or they may be more open-ended,
policy-oriented discussions (examples:
link:https://lore.kernel.org/git/ZZ77NQkSuiRxRDwt@nand.local/[introducing Rust]
or link:https://lore.kernel.org/git/YHofmWcIAidkvJiD@google.com/[improving submodule UX]).
In either case, discussion progresses as described above for general patch series.

For larger discussions without a patch series or other concrete implementation,
it may be hard to judge when consensus has been reached, as there are not any
official guidelines. If discussion stalls at this point, it may be helpful to
restart discussion with an RFC patch series (such as a partial, unfinished
implementation or proof of concept) that can be more easily debated.

When consensus is reached that it is a good idea, the original
proposer is expected to coordinate the effort to make it happen,
with help from others who were involved in the discussion, as
needed.

For decisions that require code changes, it is often the case that the original
proposer will follow up with a patch series, although it is also common for
other interested parties to provide an implementation (or parts of the
implementation, for very large changes).

For non-technical decisions such as community norms or processes, it is up to
the community as a whole to implement and sustain agreed-upon changes.
The project leadership committee (PLC) may help the implementation of
policy decisions.


Other Discussion Venues
-----------------------
Occasionally decision proposals are presented off-list, e.g. at the semi-regular
Contributors' Summit. While higher-bandwidth face-to-face discussion is often
useful for quickly reaching consensus among attendees, generally we expect to
summarize the discussion in notes that can later be presented on-list. For an
example, see the thread
link:https://lore.kernel.org/git/AC2EB721-2979-43FD-922D-C5076A57F24B@jramsay.com.au/[Notes
from Git Contributor Summit, Los Angeles (April 5, 2020)] by James Ramsay.

We prefer that "official" discussion happens on the list so that the full
community has opportunity to engage in discussion. This also means that the
mailing list archives contain a more-or-less complete history of project
discussions and decisions.
430 changes: 266 additions & 164 deletions Documentation/Makefile

Large diffs are not rendered by default.

1,395 changes: 1,395 additions & 0 deletions Documentation/MyFirstContribution.txt

Large diffs are not rendered by default.

898 changes: 898 additions & 0 deletions Documentation/MyFirstObjectWalk.txt

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.5.0.txt
Original file line number Diff line number Diff line change
@@ -251,7 +251,7 @@ Updates in v1.5.0 since v1.4.4 series
the repository when that happens.


* Crufts removal
* Cruft removal

- We used to say "old commits are retrievable using reflog and
'master@{yesterday}' syntax as long as you haven't run
@@ -379,7 +379,7 @@ Updates in v1.5.0 since v1.4.4 series
- The value of i18n.commitencoding in the originating
repository is recorded in the commit object on the "encoding"
header, if it is not UTF-8. git-log and friends notice this,
and reencodes the message to the log output encoding when
and re-encodes the message to the log output encoding when
displaying, if they are different. The log output encoding
is determined by "git log --encoding=<encoding>",
i18n.logoutputencoding configuration, or i18n.commitencoding
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.6.0.3.txt
Original file line number Diff line number Diff line change
@@ -50,7 +50,7 @@ Fixes since v1.6.0.2
if the working tree is currently dirty.

* "git for-each-ref --format=%(subject)" fixed for commits with no
no newline in the message body.
newline in the message body.

* "git remote" fixed to protect printf from user input.

4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.6.2.txt
Original file line number Diff line number Diff line change
@@ -10,8 +10,8 @@ To ease the transition plan, the receiving repository of such a
push running this release will issue a big warning when the
configuration variable is missing. Please refer to:

http://git.or.cz/gitwiki/GitFaq#non-bare
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitFaq.html#non-bare
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/

for more details on the reason why this change is needed and the
transition plan.
4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.6.3.txt
Original file line number Diff line number Diff line change
@@ -10,8 +10,8 @@ To ease the transition plan, the receiving repository of such a
push running this release will issue a big warning when the
configuration variable is missing. Please refer to:

http://git.or.cz/gitwiki/GitFaq#non-bare
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitFaq.html#non-bare
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/

for more details on the reason why this change is needed and the
transition plan.
4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.6.4.txt
Original file line number Diff line number Diff line change
@@ -10,8 +10,8 @@ To ease the transition plan, the receiving repository of such a
push running this release will issue a big warning when the
configuration variable is missing. Please refer to:

http://git.or.cz/gitwiki/GitFaq#non-bare
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitFaq.html#non-bare
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/

for more details on the reason why this change is needed and the
transition plan.
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.6.5.4.txt
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@ Fixes since v1.6.5.3

* "git prune-packed" gave progress output even when its standard error is
not connected to a terminal; this caused cron jobs that run it to
produce crufts.
produce cruft.

* "git pack-objects --all-progress" is an option to ask progress output
from write-object phase _if_ progress output were to be produced, and
4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.6.5.txt
Original file line number Diff line number Diff line change
@@ -21,8 +21,8 @@ To ease the transition plan, the receiving repository of such a
push running this release will issue a big warning when the
configuration variable is missing. Please refer to:

http://git.or.cz/gitwiki/GitFaq#non-bare
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitFaq.html#non-bare
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/

for more details on the reason why this change is needed and the
transition plan.
4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.6.6.txt
Original file line number Diff line number Diff line change
@@ -63,8 +63,8 @@ users will fare this time.

Please refer to:

http://git.or.cz/gitwiki/GitFaq#non-bare
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitFaq.html#non-bare
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/

for more details on the reason why this change is needed and the
transition process that already took place so far.
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.7.0.2.txt
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ Fixes since v1.7.0.1
* "git status" in 1.7.0 lacked the optimization we used to have in 1.6.X series
to speed up scanning of large working tree.

* "gitweb" did not diagnose parsing errors properly while reading tis configuration
* "gitweb" did not diagnose parsing errors properly while reading its configuration
file.

And other minor fixes and documentation updates.
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.7.10.1.txt
Original file line number Diff line number Diff line change
@@ -69,7 +69,7 @@ Fixes since v1.7.10
* The 'push to upstream' implementation was broken in some corner
cases. "git push $there" without refspec, when the current branch
is set to push to a remote different from $there, used to push to
$there using the upstream information to a remote unreleated to
$there using the upstream information to a remote unrelated to
$there.

* Giving "--continue" to a conflicted "rebase -i" session skipped a
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.7.10.4.txt
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ Fixes since v1.7.10.3
* The message file for Swedish translation has been updated a bit.

* A name taken from mailmap was copied into an internal buffer
incorrectly and could overun the buffer if it is too long.
incorrectly and could overrun the buffer if it is too long.

* A malformed commit object that has a header line chomped in the
middle could kill git with a NULL pointer dereference.
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.7.11.7.txt
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ Fixes since v1.7.11.6
references" nor "Reload" did not update what is shown as the
contents of it, when the user overwrote the tag with "git tag -f".

* "git for-each-ref" did not currectly support more than one --sort
* "git for-each-ref" did not correctly support more than one --sort
option.

* "git log .." errored out saying it is both rev range and a path
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.7.12.3.txt
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ Fixes since v1.7.12.2
its Accept-Encoding header.

* "git receive-pack" (the counterpart to "git push") did not give
progress output while processing objects it received to the puser
progress output while processing objects it received to the user
when run over the smart-http protocol.

* "git status" honored the ignore=dirty settings in .gitmodules but
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.7.5.3.txt
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@ Fixes since v1.7.5.2
* "git log --stdin path" with an input that has additional pathspec
used to corrupt memory.

* "git send-pack" (hence "git push") over smalt-HTTP protocol could
* "git send-pack" (hence "git push") over smart-HTTP protocol could
deadlock when the client side pack-object died early.

* Compressed tarball gitweb generates used to be made with the timestamp
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.7.7.txt
Original file line number Diff line number Diff line change
@@ -84,7 +84,7 @@ Updates since v1.7.6
logic used by "git diff" to determine the hunk header.

* Invoking the low-level "git http-fetch" without "-a" option (which
git itself never did---normal users should not have to worry about
git itself never did--normal users should not have to worry about
this) is now deprecated.

* The "--decorate" option to "git log" and its family learned to
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.8.0.txt
Original file line number Diff line number Diff line change
@@ -233,7 +233,7 @@ to them for details).
together, misdetected branches.

* "git receive-pack" (the counterpart to "git push") did not give
progress output while processing objects it received to the puser
progress output while processing objects it received to the user
when run over the smart-http protocol.

* When you misspell the command name you give to the "exec" action in
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.8.3.1.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Git v1.8.3.1 Release Notes
========================
==========================

Fixes since v1.8.3
------------------
4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.8.4.1.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Git v1.8.4.1 Release Notes
========================
==========================

Fixes since v1.8.4
------------------
@@ -15,7 +15,7 @@ Fixes since v1.8.4
in 1.8.4-rc1).

* "git rebase -i" and other scripted commands were feeding a
random, data dependant error message to 'echo' and expecting it
random, data dependent error message to 'echo' and expecting it
to come out literally.

* Setting the "submodule.<name>.path" variable to the empty
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.8.4.2.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Git v1.8.4.2 Release Notes
========================
==========================

Fixes since v1.8.4.1
--------------------
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.8.4.3.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Git v1.8.4.3 Release Notes
========================
==========================

Fixes since v1.8.4.2
--------------------
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.8.4.4.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Git v1.8.4.4 Release Notes
========================
==========================

Fixes since v1.8.4.3
--------------------
4 changes: 2 additions & 2 deletions Documentation/RelNotes/1.8.4.txt
Original file line number Diff line number Diff line change
@@ -58,7 +58,7 @@ Foreign interfaces, subsystems and ports.
credential helper interface from Git.pm.

* Update build for Cygwin 1.[57]. Torsten Bögershausen reports that
this is fine with Cygwin 1.7 ($gmane/225824) so let's try moving it
this is fine with Cygwin 1.7 (cf. <51A606A0.5060101@web.de>) so let's try moving it
ahead.

* The credential helper to talk to keychain on OS X (in contrib/) has
@@ -365,7 +365,7 @@ details).
(merge 2fbd4f9 mh/maint-lockfile-overflow later to maint).

* Invocations of "git checkout" used internally by "git rebase" were
counted as "checkout", and affected later "git checkout -" to the
counted as "checkout", and affected later "git checkout -", which took
the user to an unexpected place.
(merge 3bed291 rr/rebase-checkout-reflog later to maint).

34 changes: 34 additions & 0 deletions Documentation/RelNotes/1.8.5.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Git v1.8.5.6 Release Notes
==========================

Fixes since v1.8.5.5
--------------------

* We used to allow committing a path ".Git/config" with Git that is
running on a case sensitive filesystem, but an attempt to check out
such a path with Git that runs on a case insensitive filesystem
would have clobbered ".git/config", which is definitely not what
the user would have expected. Git now prevents you from tracking
a path with ".Git" (in any case combination) as a path component.

* On Windows, certain path components that are different from ".git"
are mapped to ".git", e.g. "git~1/config" is treated as if it were
".git/config". HFS+ has a similar issue, where certain unicode
codepoints are ignored, e.g. ".g\u200cit/config" is treated as if
it were ".git/config". Pathnames with these potential issues are
rejected on the affected systems. Git on systems that are not
affected by this issue (e.g. Linux) can also be configured to
reject them to ensure cross platform interoperability of the hosted
projects.

* "git fsck" notices a tree object that records such a path that can
be confused with ".git", and with receive.fsckObjects configuration
set to true, an attempt to "git push" such a tree object will be
rejected. Such a path may not be a problem on a well behaving
filesystem but in order to protect those on HFS+ and on case
insensitive filesystems, this check is enabled on all platforms.

A big "thanks!" for bringing this issue to us goes to our friends in
the Mercurial land, namely, Matt Mackall and Augie Fackler.

Also contains typofixes, documentation updates and trivial code clean-ups.
2 changes: 1 addition & 1 deletion Documentation/RelNotes/1.9.0.txt
Original file line number Diff line number Diff line change
@@ -177,7 +177,7 @@ Performance, Internal Implementation, etc.
* The naming convention of the packfiles has been updated; it used to
be based on the enumeration of names of the objects that are
contained in the pack, but now it also depends on how the packed
result is represented---packing the same set of objects using
result is represented--packing the same set of objects using
different settings (or delta order) would produce a pack with
different name.

34 changes: 34 additions & 0 deletions Documentation/RelNotes/1.9.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Git v1.9.5 Release Notes
========================

Fixes since v1.9.4
------------------

* We used to allow committing a path ".Git/config" with Git that is
running on a case sensitive filesystem, but an attempt to check out
such a path with Git that runs on a case insensitive filesystem
would have clobbered ".git/config", which is definitely not what
the user would have expected. Git now prevents you from tracking
a path with ".Git" (in any case combination) as a path component.

* On Windows, certain path components that are different from ".git"
are mapped to ".git", e.g. "git~1/config" is treated as if it were
".git/config". HFS+ has a similar issue, where certain unicode
codepoints are ignored, e.g. ".g\u200cit/config" is treated as if
it were ".git/config". Pathnames with these potential issues are
rejected on the affected systems. Git on systems that are not
affected by this issue (e.g. Linux) can also be configured to
reject them to ensure cross platform interoperability of the hosted
projects.

* "git fsck" notices a tree object that records such a path that can
be confused with ".git", and with receive.fsckObjects configuration
set to true, an attempt to "git push" such a tree object will be
rejected. Such a path may not be a problem on a well behaving
filesystem but in order to protect those on HFS+ and on case
insensitive filesystems, this check is enabled on all platforms.

A big "thanks!" for bringing this issue to us goes to our friends in
the Mercurial land, namely, Matt Mackall and Augie Fackler.

Also contains typofixes, documentation updates and trivial code clean-ups.
34 changes: 34 additions & 0 deletions Documentation/RelNotes/2.0.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Git v2.0.5 Release Notes
========================

Fixes since v2.0.4
------------------

* We used to allow committing a path ".Git/config" with Git that is
running on a case sensitive filesystem, but an attempt to check out
such a path with Git that runs on a case insensitive filesystem
would have clobbered ".git/config", which is definitely not what
the user would have expected. Git now prevents you from tracking
a path with ".Git" (in any case combination) as a path component.

* On Windows, certain path components that are different from ".git"
are mapped to ".git", e.g. "git~1/config" is treated as if it were
".git/config". HFS+ has a similar issue, where certain unicode
codepoints are ignored, e.g. ".g\u200cit/config" is treated as if
it were ".git/config". Pathnames with these potential issues are
rejected on the affected systems. Git on systems that are not
affected by this issue (e.g. Linux) can also be configured to
reject them to ensure cross platform interoperability of the hosted
projects.

* "git fsck" notices a tree object that records such a path that can
be confused with ".git", and with receive.fsckObjects configuration
set to true, an attempt to "git push" such a tree object will be
rejected. Such a path may not be a problem on a well behaving
filesystem but in order to protect those on HFS+ and on case
insensitive filesystems, this check is enabled on all platforms.

A big "thanks!" for bringing this issue to us goes to our friends in
the Mercurial land, namely, Matt Mackall and Augie Fackler.

Also contains typofixes, documentation updates and trivial code clean-ups.
44 changes: 44 additions & 0 deletions Documentation/RelNotes/2.1.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Git v2.1.1 Release Notes
========================

* Git 2.0 had a regression where "git fetch" into a shallowly
cloned repository from a repository with bitmap object index
enabled did not work correctly. This has been corrected.

* Git 2.0 had a regression which broke (rarely used) "git diff-tree
-t". This has been corrected.

* "git log --pretty/format=" with an empty format string did not
mean the more obvious "No output whatsoever" but "Use default
format", which was counterintuitive. Now it means "nothing shown
for the log message part".

* "git -c section.var command" and "git -c section.var= command"
should pass the configuration differently (the former should be a
boolean true, the latter should be an empty string), but they
didn't work that way. Now it does.

* Applying a patch not generated by Git in a subdirectory used to
check the whitespace breakage using the attributes for incorrect
paths. Also whitespace checks were performed even for paths
excluded via "git apply --exclude=<path>" mechanism.

* "git bundle create" with date-range specification were meant to
exclude tags outside the range, but it did not work correctly.

* "git add x" where x that used to be a directory has become a
symbolic link to a directory misbehaved.

* The prompt script checked $GIT_DIR/ref/stash file to see if there
is a stash, which was a no-no.

* "git checkout -m" did not switch to another branch while carrying
the local changes forward when a path was deleted from the index.

* With sufficiently long refnames, fast-import could have overflown
an on-stack buffer.

* After "pack-refs --prune" packed refs at the top-level, it failed
to prune them.

* "git gc --auto" triggered from "git fetch --quiet" was not quiet.
20 changes: 20 additions & 0 deletions Documentation/RelNotes/2.1.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Git v2.1.2 Release Notes
========================

* "git push" over HTTP transport had an artificial limit on number of
refs that can be pushed imposed by the command line length.

* When receiving an invalid pack stream that records the same object
twice, multiple threads got confused due to a race.

* An attempt to remove the entire tree in the "git fast-import" input
stream caused it to misbehave.

* Reachability check (used in "git prune" and friends) did not add a
detached HEAD as a starting point to traverse objects still in use.

* "git config --add section.var val" used to lose existing
section.var whose value was an empty string.

* "git fsck" failed to report that it found corrupt objects via its
exit status in some cases.
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.1.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
Git v2.1.3 Release Notes
========================

* Some MUAs mangled a line in a message that begins with "From " to
">From " when writing to a mailbox file and feeding such an input to
"git am" used to lose such a line.

* "git daemon" (with NO_IPV6 build configuration) used to incorrectly
use the hostname even when gethostbyname() reported that the given
hostname is not found.

* Newer versions of 'meld' breaks the auto-detection we use to see if
they are new enough to support the `--output` option.

* "git pack-objects" forgot to disable the codepath to generate
object reachability bitmap when it needs to split the resulting
pack.

* "gitweb" used deprecated CGI::startfrom, which was removed from
CGI.pm as of 4.04; use CGI::start_from instead.

* "git log" documentation had an example section marked up not
quite correctly, which passed AsciiDoc but failed with
AsciiDoctor.

Also contains some documentation updates.
34 changes: 34 additions & 0 deletions Documentation/RelNotes/2.1.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Git v2.1.4 Release Notes
========================

Fixes since v2.1.3
------------------

* We used to allow committing a path ".Git/config" with Git that is
running on a case sensitive filesystem, but an attempt to check out
such a path with Git that runs on a case insensitive filesystem
would have clobbered ".git/config", which is definitely not what
the user would have expected. Git now prevents you from tracking
a path with ".Git" (in any case combination) as a path component.

* On Windows, certain path components that are different from ".git"
are mapped to ".git", e.g. "git~1/config" is treated as if it were
".git/config". HFS+ has a similar issue, where certain unicode
codepoints are ignored, e.g. ".g\u200cit/config" is treated as if
it were ".git/config". Pathnames with these potential issues are
rejected on the affected systems. Git on systems that are not
affected by this issue (e.g. Linux) can also be configured to
reject them to ensure cross platform interoperability of the hosted
projects.

* "git fsck" notices a tree object that records such a path that can
be confused with ".git", and with receive.fsckObjects configuration
set to true, an attempt to "git push" such a tree object will be
rejected. Such a path may not be a problem on a well behaving
filesystem but in order to protect those on HFS+ and on case
insensitive filesystems, this check is enabled on all platforms.

A big "thanks!" for bringing this issue to us goes to our friends in
the Mercurial land, namely, Matt Mackall and Augie Fackler.

Also contains typofixes, documentation updates and trivial code clean-ups.
675 changes: 675 additions & 0 deletions Documentation/RelNotes/2.10.0.txt

Large diffs are not rendered by default.

131 changes: 131 additions & 0 deletions Documentation/RelNotes/2.10.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
Git v2.10.1 Release Notes
=========================

Fixes since v2.10
-----------------

* Clarify various ways to specify the "revision ranges" in the
documentation.

* "diff-highlight" script (in contrib/) learned to work better with
"git log -p --graph" output.

* The test framework left the number of tests and success/failure
count in the t/test-results directory, keyed by the name of the
test script plus the process ID. The latter however turned out not
to serve any useful purpose. The process ID part of the filename
has been removed.

* Having a submodule whose ".git" repository is somehow corrupt
caused a few commands that recurse into submodules loop forever.

* "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
the resulting repository becomes an invalid one. Teach the command
to forbid removal of HEAD.

* A test spawned a short-lived background process, which sometimes
prevented the test directory from getting removed at the end of the
script on some platforms.

* Update a few tests that used to use GIT_CURL_VERBOSE to use the
newer GIT_TRACE_CURL.

* Update Japanese translation for "git-gui".

* "git fetch http::/site/path" did not die correctly and segfaulted
instead.

* "git commit-tree" stopped reading commit.gpgsign configuration
variable that was meant for Porcelain "git commit" in Git 2.9; we
forgot to update "git gui" to look at the configuration to match
this change.

* "git log --cherry-pick" used to include merge commits as candidates
to be matched up with other commits, resulting a lot of wasted time.
The patch-id generation logic has been updated to ignore merges to
avoid the wastage.

* The http transport (with curl-multi option, which is the default
these days) failed to remove curl-easy handle from a curlm session,
which led to unnecessary API failures.

* "git diff -W" output needs to extend the context backward to
include the header line of the current function and also forward to
include the body of the entire current function up to the header
line of the next one. This process may have to merge to adjacent
hunks, but the code forgot to do so in some cases.

* Performance tests done via "t/perf" did not use the same set of
build configuration if the user relied on autoconf generated
configuration.

* "git format-patch --base=..." feature that was recently added
showed the base commit information after "-- " e-mail signature
line, which turned out to be inconvenient. The base information
has been moved above the signature line.

* Even when "git pull --rebase=preserve" (and the underlying "git
rebase --preserve") can complete without creating any new commit
(i.e. fast-forwards), it still insisted on having a usable ident
information (read: user.email is set correctly), which was less
than nice. As the underlying commands used inside "git rebase"
would fail with a more meaningful error message and advice text
when the bogus ident matters, this extra check was removed.

* "git gc --aggressive" used to limit the delta-chain length to 250,
which is way too deep for gaining additional space savings and is
detrimental for runtime performance. The limit has been reduced to
50.

* Documentation for individual configuration variables to control use
of color (like `color.grep`) said that their default value is
'false', instead of saying their default is taken from `color.ui`.
When we updated the default value for color.ui from 'false' to
'auto' quite a while ago, all of them broke. This has been
corrected.

* A shell script example in check-ref-format documentation has been
fixed.

* "git checkout <word>" does not follow the usual disambiguation
rules when the <word> can be both a rev and a path, to allow
checking out a branch 'foo' in a project that happens to have a
file 'foo' in the working tree without having to disambiguate.
This was poorly documented and the check was incorrect when the
command was run from a subdirectory.

* Some codepaths in "git diff" used regexec(3) on a buffer that was
mmap(2)ed, which may not have a terminating NUL, leading to a read
beyond the end of the mapped region. This was fixed by introducing
a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
extension.

* The procedure to build Git on Mac OS X for Travis CI hardcoded the
internal directory structure we assumed HomeBrew uses, which was a
no-no. The procedure has been updated to ask HomeBrew things we
need to know to fix this.

* When "git rebase -i" is given a broken instruction, it told the
user to fix it with "--edit-todo", but didn't say what the step
after that was (i.e. "--continue").

* "git add --chmod=+x" added recently lacked documentation, which has
been corrected.

* "git add --chmod=+x <pathspec>" added recently only toggled the
executable bit for paths that are either new or modified. This has
been corrected to flip the executable bit for all paths that match
the given pathspec.

* "git pack-objects --include-tag" was taught that when we know that
we are sending an object C, we want a tag B that directly points at
C but also a tag A that points at the tag B. We used to miss the
intermediate tag B in some cases.

* Documentation around tools to import from CVS was fairly outdated.

* In the codepath that comes up with the hostname to be used in an
e-mail when the user didn't tell us, we looked at ai_canonname
field in struct addrinfo without making sure it is not NULL first.

Also contains minor documentation updates and code clean-ups.
111 changes: 111 additions & 0 deletions Documentation/RelNotes/2.10.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
Git v2.10.2 Release Notes
=========================

Fixes since v2.10.1
-------------------

* The code that parses the format parameter of for-each-ref command
has seen a micro-optimization.

* The "graph" API used in "git log --graph" miscounted the number of
output columns consumed so far when drawing a padding line, which
has been fixed; this did not affect any existing code as nobody
tried to write anything after the padding on such a line, though.

* Almost everybody uses DEFAULT_ABBREV to refer to the default
setting for the abbreviation, but "git blame" peeked into
underlying variable bypassing the macro for no good reason.

* Doc update to clarify what "log -3 --reverse" does.

* An author name, that spelled a backslash-quoted double quote in the
human readable part "My \"double quoted\" name", was not unquoted
correctly while applying a patch from a piece of e-mail.

* The original command line syntax for "git merge", which was "git
merge <msg> HEAD <parent>...", has been deprecated for quite some
time, and "git gui" was the last in-tree user of the syntax. This
is finally fixed, so that we can move forward with the deprecation.

* Codepaths that read from an on-disk loose object were too loose in
validating what they are reading is a proper object file and
sometimes read past the data they read from the disk, which has
been corrected. H/t to Gustavo Grieco for reporting.

* "git worktree", even though it used the default_abbrev setting that
ought to be affected by core.abbrev configuration variable, ignored
the variable setting. The command has been taught to read the
default set of configuration variables to correct this.

* A low-level function verify_packfile() was meant to show errors
that were detected without dying itself, but under some conditions
it didn't and died instead, which has been fixed.

* When "git fetch" tries to find where the history of the repository
it runs in has diverged from what the other side has, it has a
mechanism to avoid digging too deep into irrelevant side branches.
This however did not work well over the "smart-http" transport due
to a design bug, which has been fixed.

* When we started cURL to talk to imap server when a new enough
version of cURL library is available, we forgot to explicitly add
imap(s):// before the destination. To some folks, that didn't work
and the library tried to make HTTP(s) requests instead.

* The ./configure script generated from configure.ac was taught how
to detect support of SSL by libcurl better.

* http.emptyauth configuration is a way to allow an empty username to
pass when attempting to authenticate using mechanisms like
Kerberos. We took an unspecified (NULL) username and sent ":"
(i.e. no username, no password) to CURLOPT_USERPWD, but did not do
the same when the username is explicitly set to an empty string.

* "git clone" of a local repository can be done at the filesystem
level, but the codepath did not check errors while copying and
adjusting the file that lists alternate object stores.

* Documentation for "git commit" was updated to clarify that "commit
-p <paths>" adds to the current contents of the index to come up
with what to commit.

* A stray symbolic link in $GIT_DIR/refs/ directory could make name
resolution loop forever, which has been corrected.

* The "submodule.<name>.path" stored in .gitmodules is never copied
to .git/config and such a key in .git/config has no meaning, but
the documentation described it and submodule.<name>.url next to
each other as if both belong to .git/config. This has been fixed.

* Recent git allows submodule.<name>.branch to use a special token
"." instead of the branch name; the documentation has been updated
to describe it.

* In a worktree connected to a repository elsewhere, created via "git
worktree", "git checkout" attempts to protect users from confusion
by refusing to check out a branch that is already checked out in
another worktree. However, this also prevented checking out a
branch, which is designated as the primary branch of a bare
repository, in a worktree that is connected to the bare
repository. The check has been corrected to allow it.

* "git rebase" immediately after "git clone" failed to find the fork
point from the upstream.

* When fetching from a remote that has many tags that are irrelevant
to branches we are following, we used to waste way too many cycles
when checking if the object pointed at by a tag (that we are not
going to fetch!) exists in our repository too carefully.

* The Travis CI configuration we ship ran the tests with --verbose
option but this risks non-TAP output that happens to be "ok" to be
misinterpreted as TAP signalling a test that passed. This resulted
in unnecessary failure. This has been corrected by introducing a
new mode to run our tests in the test harness to send the verbose
output separately to the log file.

* Some AsciiDoc formatter mishandles a displayed illustration with
tabs in it. Adjust a few of them in merge-base documentation to
work around them.

Also contains minor documentation updates and code clean-ups.
55 changes: 55 additions & 0 deletions Documentation/RelNotes/2.10.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
Git v2.10.3 Release Notes
=========================

Fixes since v2.10.2
-------------------

* Extract a small helper out of the function that reads the authors
script file "git am" internally uses.
This by itself is not useful until a second caller appears in the
future for "rebase -i" helper.

* The command-line completion script (in contrib/) learned to
complete "git cmd ^mas<HT>" to complete the negative end of
reference to "git cmd ^master".

* "git send-email" attempts to pick up valid e-mails from the
trailers, but people in real world write non-addresses there, like
"Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
on the availability and vintage of Mail::Address perl module.

* The code that we have used for the past 10+ years to cycle
4-element ring buffers turns out to be not quite portable in
theoretical world.

* "git daemon" used fixed-length buffers to turn URL to the
repository the client asked for into the server side directory
path, using snprintf() to avoid overflowing these buffers, but
allowed possibly truncated paths to the directory. This has been
tightened to reject such a request that causes overlong path to be
required to serve.

* Recent update to git-sh-setup (a library of shell functions that
are used by our in-tree scripted Porcelain commands) included
another shell library git-sh-i18n without specifying where it is,
relying on the $PATH. This has been fixed to be more explicit by
prefixing $(git --exec-path) output in front.

* Fix for a racy false-positive test failure.

* Portability update and workaround for builds on recent Mac OS X.

* Update to the test framework made in 2.9 timeframe broke running
the tests under valgrind, which has been fixed.

* Improve the rule to convert "unsigned char [20]" into "struct
object_id *" in contrib/coccinelle/

* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").

Also contains minor documentation updates and code clean-ups.
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.10.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Git v2.10.4 Release Notes
=========================

This release forward-ports the fix for "ssh://..." URL from Git v2.7.6
17 changes: 17 additions & 0 deletions Documentation/RelNotes/2.10.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Git v2.10.5 Release Notes
=========================

Fixes since v2.10.4
-------------------

* "git cvsserver" no longer is invoked by "git daemon" by default,
as it is old and largely unmaintained.

* Various Perl scripts did not use safe_pipe_capture() instead of
backticks, leaving them susceptible to end-user input. They have
been corrected.

Credits go to joernchen <joernchen@phenoelit.de> for finding the
unsafe constructs in "git cvsserver", and to Jeff King at GitHub for
finding and fixing instances of the same issue in other scripts.

593 changes: 593 additions & 0 deletions Documentation/RelNotes/2.11.0.txt

Large diffs are not rendered by default.

168 changes: 168 additions & 0 deletions Documentation/RelNotes/2.11.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
Git v2.11.1 Release Notes
=========================

Fixes since v2.11
-----------------

* The default Travis-CI configuration specifies newer P4 and GitLFS.

* The character width table has been updated to match Unicode 9.0

* Update the isatty() emulation for Windows by updating the previous
hack that depended on internals of (older) MSVC runtime.

* "git rev-parse --symbolic" failed with a more recent notation like
"HEAD^-1" and "HEAD^!".

* An empty directory in a working tree that can simply be nuked used
to interfere while merging or cherry-picking a change to create a
submodule directory there, which has been fixed..

* The code in "git push" to compute if any commit being pushed in the
superproject binds a commit in a submodule that hasn't been pushed
out was overly inefficient, making it unusable even for a small
project that does not have any submodule but have a reasonable
number of refs.

* "git push --dry-run --recurse-submodule=on-demand" wasn't
"--dry-run" in the submodules.

* The output from "git worktree list" was made in readdir() order,
and was unstable.

* mergetool.<tool>.trustExitCode configuration variable did not apply
to built-in tools, but now it does.

* "git p4" LFS support was broken when LFS stores an empty blob.

* Fix a corner case in merge-recursive regression that crept in
during 2.10 development cycle.

* Update the error messages from the dumb-http client when it fails
to obtain loose objects; we used to give sensible error message
only upon 404 but we now forbid unexpected redirects that needs to
be reported with something sensible.

* When diff.renames configuration is on (and with Git 2.9 and later,
it is enabled by default, which made it worse), "git stash"
misbehaved if a file is removed and another file with a very
similar content is added.

* "git diff --no-index" did not take "--no-abbrev" option.

* "git difftool --dir-diff" had a minor regression when started from
a subdirectory, which has been fixed.

* "git commit --allow-empty --only" (no pathspec) with dirty index
ought to be an acceptable way to create a new commit that does not
change any paths, but it was forbidden, perhaps because nobody
needed it so far.

* A pathname that begins with "//" or "\\" on Windows is special but
path normalization logic was unaware of it.

* "git pull --rebase", when there is no new commits on our side since
we forked from the upstream, should be able to fast-forward without
invoking "git rebase", but it didn't.

* The way to specify hotkeys to "xxdiff" that is used by "git
mergetool" has been modernized to match recent versions of xxdiff.

* Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
to where cherry-pick started while picking multiple changes, when
the cherry-pick stopped to ask for help from the user, and the user
did "git reset --hard" to a different commit in order to re-attempt
the operation.

* Code cleanup in shallow boundary computation.

* A recent update to receive-pack to make it easier to drop garbage
objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
have a pathname with a colon in it (no surprise!), and this in turn
made it impossible to push into a repository at such a path. This
has been fixed by introducing a quoting mechanism used when
appending such a path to the colon-separated list.

* The function usage_msg_opt() has been updated to say "fatal:"
before the custom message programs give, when they want to die
with a message about wrong command line options followed by the
standard usage string.

* "git index-pack --stdin" needs an access to an existing repository,
but "git index-pack file.pack" to generate an .idx file that
corresponds to a packfile does not.

* Fix for NDEBUG builds.

* A lazy "git push" without refspec did not internally use a fully
specified refspec to perform 'current', 'simple', or 'upstream'
push, causing unnecessary "ambiguous ref" errors.

* "git p4" misbehaved when swapping a directory and a symbolic link.

* Even though an fix was attempted in Git 2.9.3 days, but running
"git difftool --dir-diff" from a subdirectory never worked. This
has been fixed.

* "git p4" that tracks multiple p4 paths imported a single changelist
that touches files in these multiple paths as one commit, followed
by many empty commits. This has been fixed.

* A potential but unlikely buffer overflow in Windows port has been
fixed.

* When the http server gives an incomplete response to a smart-http
rpc call, it could lead to client waiting for a full response that
will never come. Teach the client side to notice this condition
and abort the transfer.

* Some platforms no longer understand "latin-1" that is still seen in
the wild in e-mail headers; replace them with "iso-8859-1" that is
more widely known when conversion fails from/to it.

* Update the procedure to generate "tags" for developer support.

* Update the definition of the MacOSX test environment used by
TravisCI.

* A few git-svn updates.

* Compression setting for producing packfiles were spread across
three codepaths, one of which did not honor any configuration.
Unify these so that all of them honor core.compression and
pack.compression variables the same way.

* "git fast-import" sometimes mishandled while rebalancing notes
tree, which has been fixed.

* Recent update to the default abbreviation length that auto-scales
lacked documentation update, which has been corrected.

* Leakage of lockfiles in the config subsystem has been fixed.

* It is natural that "git gc --auto" may not attempt to pack
everything into a single pack, and there is no point in warning
when the user has configured the system to use the pack bitmap,
leading to disabling further "gc".

* "git archive" did not read the standard configuration files, and
failed to notice a file that is marked as binary via the userdiff
driver configuration.

* "git blame --porcelain" misidentified the "previous" <commit, path>
pair (aka "source") when contents came from two or more files.

* "git rebase -i" with a recent update started showing an incorrect
count when squashing more than 10 commits.

* "git <cmd> @{push}" on a detached HEAD used to segfault; it has
been corrected to error out with a message.

* Tighten a test to avoid mistaking an extended ERE regexp engine as
a PRE regexp engine.

* Typing ^C to pager, which usually does not kill it, killed Git and
took the pager down as a collateral damage in certain process-tree
structure. This has been fixed.

Also contains various documentation updates and code clean-ups.
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.11.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Git v2.11.2 Release Notes
=========================

Fixes since v2.11.1
-------------------

* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.11.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Git v2.11.3 Release Notes
=========================

This release forward-ports the fix for "ssh://..." URL from Git v2.7.6
17 changes: 17 additions & 0 deletions Documentation/RelNotes/2.11.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Git v2.11.4 Release Notes
=========================

Fixes since v2.11.3
-------------------

* "git cvsserver" no longer is invoked by "git daemon" by default,
as it is old and largely unmaintained.

* Various Perl scripts did not use safe_pipe_capture() instead of
backticks, leaving them susceptible to end-user input. They have
been corrected.

Credits go to joernchen <joernchen@phenoelit.de> for finding the
unsafe constructs in "git cvsserver", and to Jeff King at GitHub for
finding and fixing instances of the same issue in other scripts.

500 changes: 500 additions & 0 deletions Documentation/RelNotes/2.12.0.txt

Large diffs are not rendered by default.

41 changes: 41 additions & 0 deletions Documentation/RelNotes/2.12.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
Git v2.12.1 Release Notes
=========================

Fixes since v2.12
-----------------

* Reduce authentication round-trip over HTTP when the server supports
just a single authentication method. This also improves the
behaviour when Git is misconfigured to enable http.emptyAuth
against a server that does not authenticate without a username
(i.e. not using Kerberos etc., which makes http.emptyAuth
pointless).

* Windows port wants to use OpenSSL's implementation of SHA-1
routines, so let them.

* Add 32-bit Linux variant to the set of platforms to be tested with
Travis CI.

* When a redirected http transport gets an error during the
redirected request, we ignored the error we got from the server,
and ended up giving a not-so-useful error message.

* The patch subcommand of "git add -i" was meant to have paths
selection prompt just like other subcommand, unlike "git add -p"
directly jumps to hunk selection. Recently, this was broken and
"add -i" lost the paths selection dialog, but it now has been
fixed.

* Git v2.12 was shipped with an embarrassing breakage where various
operations that verify paths given from the user stopped dying when
seeing an issue, and instead later triggering segfault.

* The code to parse "git log -L..." command line was buggy when there
are many ranges specified with -L; overrun of the allocated buffer
has been fixed.

* The command-line parsing of "git log -L" copied internal data
structures using incorrect size on ILP32 systems.

Also contains various documentation updates and code clean-ups.
83 changes: 83 additions & 0 deletions Documentation/RelNotes/2.12.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
Git v2.12.2 Release Notes
=========================

Fixes since v2.12.1
-------------------

* "git status --porcelain" is supposed to give a stable output, but a
few strings were left as translatable by mistake.

* "Dumb http" transport used to misparse a nonsense http-alternates
response, which has been fixed.

* "git diff --quiet" relies on the size field in diff_filespec to be
correctly populated, but diff_populate_filespec() helper function
made an incorrect short-cut when asked only to populate the size
field for paths that need to go through convert_to_git() (e.g. CRLF
conversion).

* There is no need for Python only to give a few messages to the
standard error stream, but we somehow did.

* A leak in a codepath to read from a packed object in (rare) cases
has been plugged.

* "git upload-pack", which is a counter-part of "git fetch", did not
report a request for a ref that was not advertised as invalid.
This is generally not a problem (because "git fetch" will stop
before making such a request), but is the right thing to do.

* A "gc.log" file left by a backgrounded "gc --auto" disables further
automatic gc; it has been taught to run at least once a day (by
default) by ignoring a stale "gc.log" file that is too old.

* "git remote rm X", when a branch has remote X configured as the
value of its branch.*.remote, tried to remove branch.*.remote and
branch.*.merge and failed if either is unset.

* A caller of tempfile API that uses stdio interface to write to
files may ignore errors while writing, which is detected when
tempfile is closed (with a call to ferror()). By that time, the
original errno that may have told us what went wrong is likely to
be long gone and was overwritten by an irrelevant value.
close_tempfile() now resets errno to EIO to make errno at least
predictable.

* "git show-branch" expected there were only very short branch names
in the repository and used a fixed-length buffer to hold them
without checking for overflow.

* The code that parses header fields in the commit object has been
updated for (micro)performance and code hygiene.

* A test that creates a confusing branch whose name is HEAD has been
corrected not to do so.

* "Cc:" on the trailer part does not have to conform to RFC strictly,
unlike in the e-mail header. "git send-email" has been updated to
ignore anything after '>' when picking addresses, to allow non-address
cruft like " # stable 4.4" after the address.

* "git push" had a handful of codepaths that could lead to a deadlock
when unexpected error happened, which has been fixed.

* Code to read submodule.<name>.ignore config did not state the
variable name correctly when giving an error message diagnosing
misconfiguration.

* "git ls-remote" and "git archive --remote" are designed to work
without being in a directory under Git's control. However, recent
updates revealed that we randomly look into a directory called
.git/ without actually doing necessary set-up when working in a
repository. Stop doing so.

* The code to parse the command line "git grep <patterns>... <rev>
[[--] <pathspec>...]" has been cleaned up, and a handful of bugs
have been fixed (e.g. we used to check "--" if it is a rev).

* The code to parse "git -c VAR=VAL cmd" and set configuration
variable for the duration of cmd had two small bugs, which have
been fixed.
This supersedes jc/config-case-cmdline topic that has been discarded.

Also contains various documentation updates and code clean-ups.
64 changes: 64 additions & 0 deletions Documentation/RelNotes/2.12.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
Git v2.12.3 Release Notes
=========================

Fixes since v2.12.2
-------------------

* The "parse_config_key()" API function has been cleaned up.

* An helper function to make it easier to append the result from
real_path() to a strbuf has been added.

* The t/perf performance test suite was not prepared to test not so
old versions of Git, but now it covers versions of Git that are not
so ancient.

* Picking two versions of Git and running tests to make sure the
older one and the newer one interoperate happily has now become
possible.

* Teach the "debug" helper used in the test framework that allows a
command to run under "gdb" to make the session interactive.

* "git repack --depth=<n>" for a long time busted the specified depth
when reusing delta from existing packs. This has been corrected.

* user.email that consists of only cruft chars should consistently
error out, but didn't.

* A few tests were run conditionally under (rare) conditions where
they cannot be run (like running cvs tests under 'root' account).

* "git branch @" created refs/heads/@ as a branch, and in general the
code that handled @{-1} and @{upstream} was a bit too loose in
disambiguating.

* "git fetch" that requests a commit by object name, when the other
side does not allow such an request, failed without much
explanation.

* "git filter-branch --prune-empty" drops a single-parent commit that
becomes a no-op, but did not drop a root commit whose tree is empty.

* Recent versions of Git treats http alternates (used in dumb http
transport) just like HTTP redirects and requires the client to
enable following it, due to security concerns. But we forgot to
give a warning when we decide not to honor the alternates.

* NO_PTHREADS build has been broken for some time; now fixed.

* Fix for potential segv introduced in v2.11.0 and later (also
v2.10.2).

* A few unterminated here documents in tests were fixed, which in
turn revealed incorrect expectations the tests make. These tests
have been updated.

* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").

Also contains various documentation updates and code clean-ups.
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.12.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Git v2.12.4 Release Notes
=========================

This release forward-ports the fix for "ssh://..." URL from Git v2.7.6
17 changes: 17 additions & 0 deletions Documentation/RelNotes/2.12.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Git v2.12.5 Release Notes
=========================

Fixes since v2.12.4
-------------------

* "git cvsserver" no longer is invoked by "git daemon" by default,
as it is old and largely unmaintained.

* Various Perl scripts did not use safe_pipe_capture() instead of
backticks, leaving them susceptible to end-user input. They have
been corrected.

Credits go to joernchen <joernchen@phenoelit.de> for finding the
unsafe constructs in "git cvsserver", and to Jeff King at GitHub for
finding and fixing instances of the same issue in other scripts.

618 changes: 618 additions & 0 deletions Documentation/RelNotes/2.13.0.txt

Large diffs are not rendered by default.

114 changes: 114 additions & 0 deletions Documentation/RelNotes/2.13.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
Git v2.13.1 Release Notes
=========================

Fixes since v2.13
-----------------

* The Web interface to gmane news archive is long gone, even though
the articles are still accessible via NTTP. Replace the links with
ones to public-inbox.org. Because their message identification is
based on the actual message-id, it is likely that it will be easier
to migrate away from it if/when necessary.

* Update tests to pass under GETTEXT_POISON (a mechanism to ensure
that output strings that should not be translated are not
translated by mistake), and tell TravisCI to run them.

* Setting "log.decorate=false" in the configuration file did not take
effect in v2.13, which has been corrected.

* An earlier update to test 7400 needed to be skipped on CYGWIN.

* Git sometimes gives an advice in a rhetorical question that does
not require an answer, which can confuse new users and non native
speakers. Attempt to rephrase them.

* "git read-tree -m" (no tree-ish) gave a nonsense suggestion "use
--empty if you want to clear the index". With "-m", such a request
will still fail anyway, as you'd need to name at least one tree-ish
to be merged.

* The codepath in "git am" that is used when running "git rebase"
leaked memory held for the log message of the commits being rebased.

* "pack-objects" can stream a slice of an existing packfile out when
the pack bitmap can tell that the reachable objects are all needed
in the output, without inspecting individual objects. This
strategy however would not work well when "--local" and other
options are in use, and need to be disabled.

* Clarify documentation for include.path and includeIf.<condition>.path
configuration variables.

* Tag objects, which are not reachable from any ref, that point at
missing objects were mishandled by "git gc" and friends (they
should silently be ignored instead)

* A few http:// links that are redirected to https:// in the
documentation have been updated to https:// links.

* Make sure our tests would pass when the sources are checked out
with "platform native" line ending convention by default on
Windows. Some "text" files out tests use and the test scripts
themselves that are meant to be run with /bin/sh, ought to be
checked out with eol=LF even on Windows.

* Fix memory leaks pointed out by Coverity (and people).

* The receive-pack program now makes sure that the push certificate
records the same set of push options used for pushing.

* "git cherry-pick" and other uses of the sequencer machinery
mishandled a trailer block whose last line is an incomplete line.
This has been fixed so that an additional sign-off etc. are added
after completing the existing incomplete line.

* The shell completion script (in contrib/) learned "git stash" has
a new "push" subcommand.

* Travis CI gained a task to format the documentation with both
AsciiDoc and AsciiDoctor.

* Update the C style recommendation for notes for translators, as
recent versions of gettext tools can work with our style of
multi-line comments.

* "git clone --config var=val" is a way to populate the
per-repository configuration file of the new repository, but it did
not work well when val is an empty string. This has been fixed.

* A few codepaths in "checkout" and "am" working on an unborn branch
tried to access an uninitialized piece of memory.

* "git for-each-ref --format=..." with %(HEAD) in the format used to
resolve the HEAD symref as many times as it had processed refs,
which was wasteful, and "git branch" shared the same problem.

* "git interpret-trailers", when used as GIT_EDITOR for "git commit
-v", looked for and appended to a trailer block at the very end,
i.e. at the end of the "diff" output. The command has been
corrected to pay attention to the cut-mark line "commit -v" adds to
the buffer---the real trailer block should appear just before it.

* A test allowed both "git push" and "git receive-pack" on the other
end write their traces into the same file. This is OK on platforms
that allows atomically appending to a file opened with O_APPEND,
but on other platforms led to a mangled output, causing
intermittent test failures. This has been fixed by disabling
traces from "receive-pack" in the test.

* "foo\bar\baz" in "git fetch foo\bar\baz", even though there is no
slashes in it, cannot be a nickname for a remote on Windows, as
that is likely to be a pathname on a local filesystem.

* The "collision detecting" SHA-1 implementation shipped with 2.13
was quite broken on some big-endian platforms and/or platforms that
do not like unaligned fetches. Update to the upstream code which
has already fixed these issues.

* "git am -h" triggered a BUG().

* The interaction of "url.*.insteadOf" and custom URL scheme's
whitelisting is now documented better.

Also contains various documentation updates and code clean-ups.
54 changes: 54 additions & 0 deletions Documentation/RelNotes/2.13.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
Git v2.13.2 Release Notes
=========================

Fixes since v2.13.1
-------------------

* The "collision detecting" SHA-1 implementation shipped with 2.13.1
was still broken on some platforms. Update to the upstream code
again to take their fix.

* "git checkout --recurse-submodules" did not quite work with a
submodule that itself has submodules.

* Introduce the BUG() macro to improve die("BUG: ...").

* The "run-command" API implementation has been made more robust
against dead-locking in a threaded environment.

* A recent update to t5545-push-options.sh started skipping all the
tests in the script when a web server testing is disabled or
unavailable, not just the ones that require a web server. Non HTTP
tests have been salvaged to always run in this script.

* "git clean -d" used to clean directories that has ignored files,
even though the command should not lose ignored ones without "-x".
"git status --ignored" did not list ignored and untracked files
without "-uall". These have been corrected.

* The timestamp of the index file is now taken after the file is
closed, to help Windows, on which a stale timestamp is reported by
fstat() on a file that is opened for writing and data was written
but not yet closed.

* "git pull --rebase --autostash" didn't auto-stash when the local history
fast-forwards to the upstream.

* "git describe --contains" penalized light-weight tags so much that
they were almost never considered. Instead, give them about the
same chance to be considered as an annotated tag that is the same
age as the underlying commit would.

* The result from "git diff" that compares two blobs, e.g. "git diff
$commit1:$path $commit2:$path", used to be shown with the full
object name as given on the command line, but it is more natural to
use the $path in the output and use it to look up .gitattributes.

* A flaky test has been corrected.

* Help contributors that visit us at GitHub.

* "git stash push <pathspec>" did not work from a subdirectory at all.
Bugfix for a topic in v2.13

Also contains various documentation updates and code clean-ups.
62 changes: 62 additions & 0 deletions Documentation/RelNotes/2.13.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
Git v2.13.3 Release Notes
=========================

Fixes since v2.13.2
-------------------

* The "collision detecting" SHA-1 implementation shipped with 2.13.2
was still broken on some platforms. Update to the upstream code
again to take their fix.

* The 'diff-highlight' program (in contrib/) has been restructured
for easier reuse by an external project 'diff-so-fancy'.

* "git mergetool" learned to work around a wrapper MacOS X adds
around underlying meld.

* An example in documentation that does not work in multi worktree
configuration has been corrected.

* The pretty-format specifiers like '%h', '%t', etc. had an
optimization that no longer works correctly. In preparation/hope
of getting it correctly implemented, first discard the optimization
that is broken.

* The code to pick up and execute command alias definition from the
configuration used to switch to the top of the working tree and
then come back when the expanded alias was executed, which was
unnecessarily complex. Attempt to simplify the logic by using the
early-config mechanism that does not chdir around.

* "git add -p" were updated in 2.12 timeframe to cope with custom
core.commentchar but the implementation was buggy and a
metacharacter like $ and * did not work.

* Fix a recent regression to "git rebase -i" and add tests that would
have caught it and others.

* An unaligned 32-bit access in pack-bitmap code has been corrected.

* Tighten error checks for invalid "git apply" input.

* The split index code did not honor core.sharedrepository setting
correctly.

* The Makefile rule in contrib/subtree for building documentation
learned to honour USE_ASCIIDOCTOR just like the main documentation
set does.

* A few tests that tried to verify the contents of push certificates
did not use 'git rev-parse' to formulate the line to look for in
the certificate correctly.

* After "git branch --move" of the currently checked out branch, the
code to walk the reflog of HEAD via "log -g" and friends
incorrectly stopped at the reflog entry that records the renaming
of the branch.

* The rewrite of "git branch --list" using for-each-ref's internals
that happened in v2.13 regressed its handling of color.branch.local;
this has been fixed.

Also contains various documentation updates and code clean-ups.
28 changes: 28 additions & 0 deletions Documentation/RelNotes/2.13.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
Git v2.13.4 Release Notes
=========================

Fixes since v2.13.3
-------------------

* Update the character width tables.

* A recent update broke an alias that contained an uppercase letter,
which has been fixed.

* On Cygwin, similar to Windows, "git push //server/share/repository"
ought to mean a repository on a network share that can be accessed
locally, but this did not work correctly due to stripping the double
slashes at the beginning.

* The progress meter did not give a useful output when we haven't had
0.5 seconds to measure the throughput during the interval. Instead
show the overall throughput rate at the end, which is a much more
useful number.

* We run an early part of "git gc" that deals with refs before
daemonising (and not under lock) even when running a background
auto-gc, which caused multiple gc processes attempting to run the
early part at the same time. This is now prevented by running the
early part also under the GC lock.

Also contains a handful of small code and documentation clean-ups.
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.13.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Git v2.13.5 Release Notes
=========================

This release forward-ports the fix for "ssh://..." URL from Git v2.7.6
17 changes: 17 additions & 0 deletions Documentation/RelNotes/2.13.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Git v2.13.6 Release Notes
=========================

Fixes since v2.13.5
-------------------

* "git cvsserver" no longer is invoked by "git daemon" by default,
as it is old and largely unmaintained.

* Various Perl scripts did not use safe_pipe_capture() instead of
backticks, leaving them susceptible to end-user input. They have
been corrected.

Credits go to joernchen <joernchen@phenoelit.de> for finding the
unsafe constructs in "git cvsserver", and to Jeff King at GitHub for
finding and fixing instances of the same issue in other scripts.

20 changes: 20 additions & 0 deletions Documentation/RelNotes/2.13.7.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
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.
517 changes: 517 additions & 0 deletions Documentation/RelNotes/2.14.0.txt

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.14.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Git v2.14.1 Release Notes
=========================

This release forward-ports the fix for "ssh://..." URL from Git v2.7.6
105 changes: 105 additions & 0 deletions Documentation/RelNotes/2.14.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
Git v2.14.2 Release Notes
=========================

Fixes since v2.14.1
-------------------

* Because recent Git for Windows do come with a real msgfmt, the
build procedure for git-gui has been updated to use it instead of a
hand-rolled substitute.

* "%C(color name)" in the pretty print format always produced ANSI
color escape codes, which was an early design mistake. They now
honor the configuration (e.g. "color.ui = never") and also tty-ness
of the output medium.

* The http.{sslkey,sslCert} configuration variables are to be
interpreted as a pathname that honors "~[username]/" prefix, but
weren't, which has been fixed.

* Numerous bugs in walking of reflogs via "log -g" and friends have
been fixed.

* "git commit" when seeing an totally empty message said "you did not
edit the message", which is clearly wrong. The message has been
corrected.

* When a directory is not readable, "gitweb" fails to build the
project list. Work this around by skipping such a directory.

* A recently added test for the "credential-cache" helper revealed
that EOF detection done around the time the connection to the cache
daemon is torn down were flaky. This was fixed by reacting to
ECONNRESET and behaving as if we got an EOF.

* Some versions of GnuPG fail to kill gpg-agent it auto-spawned
and such a left-over agent can interfere with a test. Work it
around by attempting to kill one before starting a new test.

* "git log --tag=no-such-tag" showed log starting from HEAD, which
has been fixed---it now shows nothing.

* The "tag.pager" configuration variable was useless for those who
actually create tag objects, as it interfered with the use of an
editor. A new mechanism has been introduced for commands to enable
pager depending on what operation is being carried out to fix this,
and then "git tag -l" is made to run pager by default.

* "git push --recurse-submodules $there HEAD:$target" was not
propagated down to the submodules, but now it is.

* Commands like "git rebase" accepted the --rerere-autoupdate option
from the command line, but did not always use it. This has been
fixed.

* "git clone --recurse-submodules --quiet" did not pass the quiet
option down to submodules.

* "git am -s" has been taught that some input may end with a trailer
block that is not Signed-off-by: and it should refrain from adding
an extra blank line before adding a new sign-off in such a case.

* "git svn" used with "--localtime" option did not compute the tz
offset for the timestamp in question and instead always used the
current time, which has been corrected.

* Memory leaks in a few error codepaths have been plugged.

* bash 4.4 or newer gave a warning on NUL byte in command
substitution done in "git stash"; this has been squelched.

* "git grep -L" and "git grep --quiet -L" reported different exit
codes; this has been corrected.

* When handshake with a subprocess filter notices that the process
asked for an unknown capability, Git did not report what program
the offending subprocess was running. This has been corrected.

* "git apply" that is used as a better "patch -p1" failed to apply a
taken from a file with CRLF line endings to a file with CRLF line
endings. The root cause was because it misused convert_to_git()
that tried to do "safe-crlf" processing by looking at the index
entry at the same path, which is a nonsense---in that mode, "apply"
is not working on the data in (or derived from) the index at all.
This has been fixed.

* Killing "git merge --edit" before the editor returns control left
the repository in a state with MERGE_MSG but without MERGE_HEAD,
which incorrectly tells the subsequent "git commit" that there was
a squash merge in progress. This has been fixed.

* "git archive" did not work well with pathspecs and the
export-ignore attribute.

* "git cvsserver" no longer is invoked by "git daemon" by default,
as it is old and largely unmaintained.

* Various Perl scripts did not use safe_pipe_capture() instead of
backticks, leaving them susceptible to end-user input. They have
been corrected.

Also contains various documentation updates and code clean-ups.

Credits go to joernchen <joernchen@phenoelit.de> for finding the
unsafe constructs in "git cvsserver", and to Jeff King at GitHub for
finding and fixing instances of the same issue in other scripts.
99 changes: 99 additions & 0 deletions Documentation/RelNotes/2.14.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
Git v2.14.3 Release Notes
=========================

Fixes since v2.14.2
-------------------

* A helper function to read a single whole line into strbuf
mistakenly triggered OOM error at EOF under certain conditions,
which has been fixed.

* In addition to "cc: <a@dd.re.ss> # cruft", "cc: a@dd.re.ss # cruft"
was taught to "git send-email" as a valid way to tell it that it
needs to also send a carbon copy to <a@dd.re.ss> in the trailer
section.

* Fix regression to "gitk --bisect" by a recent update.

* Unlike "git commit-tree < file", "git commit-tree -F file" did not
pass the contents of the file verbatim and instead completed an
incomplete line at the end, if exists. The latter has been updated
to match the behaviour of the former.

* "git archive", especially when used with pathspec, stored an empty
directory in its output, even though Git itself never does so.
This has been fixed.

* API error-proofing which happens to also squelch warnings from GCC.

* "git gc" tries to avoid running two instances at the same time by
reading and writing pid/host from and to a lock file; it used to
use an incorrect fscanf() format when reading, which has been
corrected.

* The test linter has been taught that we do not like "echo -e".

* Code cmp.std.c nitpick.

* "git describe --match" learned to take multiple patterns in v2.13
series, but the feature ignored the patterns after the first one
and did not work at all. This has been fixed.

* "git cat-file --textconv" started segfaulting recently, which
has been corrected.

* The built-in pattern to detect the "function header" for HTML did
not match <H1>..<H6> elements without any attributes, which has
been fixed.

* "git mailinfo" was loose in decoding quoted printable and produced
garbage when the two letters after the equal sign are not
hexadecimal. This has been fixed.

* The documentation for '-X<option>' for merges was misleadingly
written to suggest that "-s theirs" exists, which is not the case.

* Spell the name of our system as "Git" in the output from
request-pull script.

* Fixes for a handful memory access issues identified by valgrind.

* Backports a moral equivalent of 2015 fix to the poll emulation from
the upstream gnulib to fix occasional breakages on HPE NonStop.

* In the "--format=..." option of the "git for-each-ref" command (and
its friends, i.e. the listing mode of "git branch/tag"), "%(atom:)"
(e.g. "%(refname:)", "%(body:)" used to error out. Instead, treat
them as if the colon and an empty string that follows it were not
there.

* Users with "color.ui = always" in their configuration were broken
by a recent change that made plumbing commands to pay attention to
them as the patch created internally by "git add -p" were colored
(heh) and made unusable. This has been fixed.

* "git branch -M a b" while on a branch that is completely unrelated
to either branch a or branch b misbehaved when multiple worktree
was in use. This has been fixed.

* "git fast-export" with -M/-C option issued "copy" instruction on a
path that is simultaneously modified, which was incorrect.

* The checkpoint command "git fast-import" did not flush updates to
refs and marks unless at least one object was created since the
last checkpoint, which has been corrected, as these things can
happen without any new object getting created.

* The scripts to drive TravisCI has been reorganized and then an
optimization to avoid spending cycles on a branch whose tip is
tagged has been implemented.

* "git fetch <there> <src>:<dst>" allows an object name on the <src>
side when the other side accepts such a request since Git v2.5, but
the documentation was left stale.

* A regression in 2.11 that made the code to read the list of
alternate object stores overrun the end of the string has been
fixed.

Also contains various documentation updates and code clean-ups.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.14.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.14.4 Release Notes
=========================

This release is to forward-port the fixes made in the v2.13.7 version
of Git. See its release notes for details.
16 changes: 16 additions & 0 deletions Documentation/RelNotes/2.14.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Git v2.14.5 Release Notes
=========================

This release is to address the recently reported CVE-2018-17456.

Fixes since v2.14.4
-------------------

* Submodules' "URL"s come from the untrusted .gitmodules file, but
we blindly gave it to "git clone" to clone submodules when "git
clone --recurse-submodules" was used to clone a project that has
such a submodule. The code has been hardened to reject such
malformed URLs (e.g. one that begins with a dash).

Credit for finding and fixing this vulnerability goes to joernchen
and Jeff King, respectively.
54 changes: 54 additions & 0 deletions Documentation/RelNotes/2.14.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
Git v2.14.6 Release Notes
=========================

This release addresses the security issues CVE-2019-1348,
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387.

Fixes since v2.14.5
-------------------

* CVE-2019-1348:
The --export-marks option of git fast-import is exposed also via
the in-stream command feature export-marks=... and it allows
overwriting arbitrary paths.

* CVE-2019-1349:
When submodules are cloned recursively, under certain circumstances
Git could be fooled into using the same Git directory twice. We now
require the directory to be empty.

* CVE-2019-1350:
Incorrect quoting of command-line arguments allowed remote code
execution during a recursive clone in conjunction with SSH URLs.

* CVE-2019-1351:
While the only permitted drive letters for physical drives on
Windows are letters of the US-English alphabet, this restriction
does not apply to virtual drives assigned via subst <letter>:
<path>. Git mistook such paths for relative paths, allowing writing
outside of the worktree while cloning.

* CVE-2019-1352:
Git was unaware of NTFS Alternate Data Streams, allowing files
inside the .git/ directory to be overwritten during a clone.

* CVE-2019-1353:
When running Git in the Windows Subsystem for Linux (also known as
"WSL") while accessing a working directory on a regular Windows
drive, none of the NTFS protections were active.

* CVE-2019-1354:
Filenames on Linux/Unix can contain backslashes. On Windows,
backslashes are directory separators. Git did not use to refuse to
write out tracked files with such filenames.

* CVE-2019-1387:
Recursive clones are currently affected by a vulnerability that is
caused by too-lax validation of submodule names, allowing very
targeted attacks via remote code execution in recursive clones.

Credit for finding these vulnerabilities goes to Microsoft Security
Response Center, in particular to Nicolas Joly. The `fast-import`
fixes were provided by Jeff King, the other fixes by Johannes
Schindelin with help from Garima Singh.
508 changes: 508 additions & 0 deletions Documentation/RelNotes/2.15.0.txt

Large diffs are not rendered by default.

88 changes: 88 additions & 0 deletions Documentation/RelNotes/2.15.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
Git v2.15.1 Release Notes
=========================

Fixes since v2.15
-----------------

* TravisCI build updates.

* "auto" as a value for the columnar output configuration ought to
judge "is the output consumed by humans?" with the same criteria as
"auto" for coloured output configuration, i.e. either the standard
output stream is going to tty, or a pager is in use. We forgot the
latter, which has been fixed.

* The experimental "color moved lines differently in diff output"
feature was buggy around "ignore whitespace changes" edges, which
has been corrected.

* Instead of using custom line comparison and hashing functions to
implement "moved lines" coloring in the diff output, use the pair
of these functions from lower-layer xdiff/ code.

* Some codepaths did not check for errors when asking what branch the
HEAD points at, which have been fixed.

* "git commit", after making a commit, did not check for errors when
asking on what branch it made the commit, which has been corrected.

* "git status --ignored -u" did not stop at a working tree of a
separate project that is embedded in an ignored directory and
listed files in that other project, instead of just showing the
directory itself as ignored.

* A broken access to object databases in recent update to "git grep
--recurse-submodules" has been fixed.

* A recent regression in "git rebase -i" that broke execution of git
commands from subdirectories via "exec" instruction has been fixed.

* "git check-ref-format --branch @{-1}" bit a "BUG()" when run
outside a repository for obvious reasons; clarify the documentation
and make sure we do not even try to expand the at-mark magic in
such a case, but still call the validation logic for branch names.

* Command line completion (in contrib/) update.

* Description of blame.{showroot,blankboundary,showemail,date}
configuration variables have been added to "git config --help".

* After an error from lstat(), diff_populate_filespec() function
sometimes still went ahead and used invalid data in struct stat,
which has been fixed.

* UNC paths are also relevant in Cygwin builds and they are now
tested just like Mingw builds.

* Correct start-up sequence so that a repository could be placed
immediately under the root directory again (which was broken at
around Git 2.13).

* The credential helper for libsecret (in contrib/) has been improved
to allow possibly prompting the end user to unlock secrets that are
currently locked (otherwise the secrets may not be loaded).

* Updates from GfW project.

* "git rebase -i" recently started misbehaving when a submodule that
is configured with 'submodule.<name>.ignore' is dirty; this has
been corrected.

* Some error messages did not quote filenames shown in it, which have
been fixed.

* Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed.

* We used to add an empty alternate object database to the system
that does not help anything; it has been corrected.

* Error checking in "git imap-send" for empty response has been
improved.

* An ancient bug in "git apply --ignore-space-change" codepath has
been fixed.

* There was a recent semantic mismerge in the codepath to write out a
section of a configuration section, which has been corrected.

Also contains various documentation updates and code clean-ups.
50 changes: 50 additions & 0 deletions Documentation/RelNotes/2.15.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
Git v2.15.2 Release Notes
=========================

Fixes since v2.15.1
-------------------

* Recent update to the refs infrastructure implementation started
rewriting packed-refs file more often than before; this has been
optimized again for most trivial cases.

* The SubmittingPatches document has been converted to produce an
HTML version via AsciiDoc/Asciidoctor.

* Contrary to the documentation, "git pull -4/-6 other-args" did not
ask the underlying "git fetch" to go over IPv4/IPv6, which has been
corrected.

* When "git rebase" prepared an mailbox of changes and fed it to "git
am" to replay them, it was confused when a stray "From " happened
to be in the log message of one of the replayed changes. This has
been corrected.

* Command line completion (in contrib/) has been taught about the
"--copy" option of "git branch".

* "git apply --inaccurate-eof" when used with "--ignore-space-change"
triggered an internal sanity check, which has been fixed.

* The sequencer machinery (used by "git cherry-pick A..B", and "git
rebase -i", among other things) would have lost a commit if stopped
due to an unlockable index file, which has been fixed.

* The three-way merge performed by "git cherry-pick" was confused
when a new submodule was added in the meantime, which has been
fixed (or "papered over").

* "git notes" sent its error message to its standard output stream,
which was corrected.

* A few scripts (both in production and tests) incorrectly redirected
their error output. These have been corrected.

* Clarify and enhance documentation for "merge-base --fork-point", as
it was clear what it computed but not why/what for.

* This release also contains the fixes made in the v2.13.7 version of
Git. See its release notes for details.


Also contains various documentation updates and code clean-ups.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.15.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.15.3 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 to address
the recently reported CVE-2018-17456; see the release notes for that
version for details.
11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.15.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Git v2.15.4 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6 to address
the security issues CVE-2019-1348, CVE-2019-1349, CVE-2019-1350,
CVE-2019-1351, CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, and
CVE-2019-1387; see the release notes for that version for details.

In conjunction with a vulnerability that was fixed in v2.20.2,
`.gitmodules` is no longer allowed to contain entries of the form
`submodule.<name>.update=!command`.
482 changes: 482 additions & 0 deletions Documentation/RelNotes/2.16.0.txt

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.16.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Git v2.16.1 Release Notes
=========================

Fixes since v2.16
-----------------

* "git clone" segfaulted when cloning a project that happens to
track two paths that differ only in case on a case insensitive
filesystem.

Does not contain any other documentation updates or code clean-ups.
30 changes: 30 additions & 0 deletions Documentation/RelNotes/2.16.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
Git v2.16.2 Release Notes
=========================

Fixes since v2.16.1
-------------------

* An old regression in "git describe --all $annotated_tag^0" has been
fixed.

* "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.

* "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 stash -- <pathspec>" incorrectly blew away untracked files in
the directory that matched the pathspec, which has been corrected.

* "git add -p" was taught to ignore local changes to submodules as
they do not interfere with the partial addition of regular changes
anyway.


Also contains various documentation updates and code clean-ups.
49 changes: 49 additions & 0 deletions Documentation/RelNotes/2.16.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
Git v2.16.3 Release Notes
=========================

Fixes since v2.16.2
-------------------

* "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 commit --fixup" did not allow "-m<message>" 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.

* Fix for a commented-out code to adjust it to a rather old API change
around object ID.

* When there are too many changed paths, "git diff" showed a warning
message but in the middle of a line.

* 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 shareable.

* Crash fix for a corner case where an error codepath tried to unlock
what it did not acquire lock on.

* The split-index mode had a few corner case bugs fixed.

* Assorted fixes to "git daemon".

* Completion of "git merge -s<strategy>" (in contrib/) did not work
well in non-C locale.

* Workaround for segfault with more recent versions of SVN.

* Recently introduced leaks in fsck have been plugged.

* Travis CI integration now builds the executable in 'script' phase
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).

Also contains various documentation updates and code clean-ups.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.16.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.16.4 Release Notes
=========================

This release is to forward-port the fixes made in the v2.13.7 version
of Git. See its release notes for details.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.16.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.16.5 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 to address
the recently reported CVE-2018-17456; see the release notes for that
version for details.
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.16.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Git v2.16.6 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6 and in
v2.15.4 addressing the security issues CVE-2019-1348, CVE-2019-1349,
CVE-2019-1350, CVE-2019-1351, CVE-2019-1352, CVE-2019-1353,
CVE-2019-1354, and CVE-2019-1387; see the release notes for those
versions for details.
398 changes: 398 additions & 0 deletions Documentation/RelNotes/2.17.0.txt

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions Documentation/RelNotes/2.17.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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 has support on the
server side to reject pushes to repositories that attempt to create
such problematic .gitmodules file etc. as tracked contents, to help
hosting sites protect their customers by preventing malicious
contents from spreading.
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.17.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Git v2.17.2 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 to address
the recently reported CVE-2018-17456; see the release notes for that
version for details.

In addition, this release also teaches "fsck" and the server side
logic to reject pushes to repositories that attempt to create such a
problematic ".gitmodules" file as tracked contents, to help hosting
sites protect their customers by preventing malicious contents from
spreading.
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.17.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Git v2.17.3 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6 and in
v2.15.4 addressing the security issues CVE-2019-1348, CVE-2019-1349,
CVE-2019-1350, CVE-2019-1351, CVE-2019-1352, CVE-2019-1353,
CVE-2019-1354, and CVE-2019-1387; see the release notes for those
versions for details.

In addition, `git fsck` was taught to identify `.gitmodules` entries
of the form `submodule.<name>.update=!command`, which have been
disallowed in v2.15.4.
16 changes: 16 additions & 0 deletions Documentation/RelNotes/2.17.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Git v2.17.4 Release Notes
=========================

This release is to address the security issue: CVE-2020-5260

Fixes since v2.17.3
-------------------

* With a crafted URL that contains a newline in it, the credential
helper machinery can be fooled to give credential information for
a wrong host. The attack has been made impossible by forbidding
a newline character in any value passed via the credential
protocol.

Credit for finding the vulnerability goes to Felix Wilhelm of Google
Project Zero.
22 changes: 22 additions & 0 deletions Documentation/RelNotes/2.17.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Git v2.17.5 Release Notes
=========================

This release is to address a security issue: CVE-2020-11008

Fixes since v2.17.4
-------------------

* With a crafted URL that contains a newline or empty host, or lacks
a scheme, the credential helper machinery can be fooled into
providing credential information that is not appropriate for the
protocol in use and host being contacted.

Unlike the vulnerability CVE-2020-5260 fixed in v2.17.4, the
credentials are not for a host of the attacker's choosing; instead,
they are for some unspecified host (based on how the configured
credential helper handles an absent "host" parameter).

The attack has been made impossible by refusing to work with
under-specified credential patterns.

Credit for finding the vulnerability goes to Carlo Arenas.
16 changes: 16 additions & 0 deletions Documentation/RelNotes/2.17.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Git v2.17.6 Release Notes
=========================

This release addresses the security issues CVE-2021-21300.

Fixes since v2.17.5
-------------------

* CVE-2021-21300:
On case-insensitive file systems with support for symbolic links,
if Git is configured globally to apply delay-capable clean/smudge
filters (such as Git LFS), Git could be fooled into running
remote code during a clone.

Credit for finding and fixing this vulnerability goes to Matheus
Tavares, helped by Johannes Schindelin.
583 changes: 583 additions & 0 deletions Documentation/RelNotes/2.18.0.txt

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.18.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.18.1 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 and in
v2.17.2 to address the recently reported CVE-2018-17456; see the
release notes for those versions for details.
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.18.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Git v2.18.2 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6, v2.15.4
and in v2.17.3, addressing the security issues CVE-2019-1348,
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387; see the release notes
for those versions for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.18.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.18.3 Release Notes
=========================

This release merges the security fix that appears in v2.17.4; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.18.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.18.4 Release Notes
=========================

This release merges the security fix that appears in v2.17.5; see
the release notes for that version for details.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.18.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.18.5 Release Notes
=========================

This release merges up the fixes that appear in v2.17.6 to address
the security issue CVE-2021-21300; see the release notes for that
version for details.
615 changes: 615 additions & 0 deletions Documentation/RelNotes/2.19.0.txt

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.19.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.19.1 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 and in
v2.17.2 to address the recently reported CVE-2018-17456; see the
release notes for those versions for details.
108 changes: 108 additions & 0 deletions Documentation/RelNotes/2.19.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
Git v2.19.2 Release Notes
=========================

Fixes since v2.19.1
-------------------

* "git interpret-trailers" and its underlying machinery had a buggy
code that attempted to ignore patch text after commit log message,
which triggered in various codepaths that will always get the log
message alone and never get such an input.

* "git rebase -i" did not clear the state files correctly when a run
of "squash/fixup" is aborted and then the user manually amended the
commit instead, which has been corrected.

* When fsmonitor is in use, after operation on submodules updates
.gitmodules, we lost track of the fact that we did so and relied on
stale fsmonitor data.

* Fix for a long-standing bug that leaves the index file corrupt when
it shrinks during a partial commit.

* Further fix for O_APPEND emulation on Windows

* A corner case bugfix in "git rerere" code.

* "git add ':(attr:foo)'" is not supported and is supposed to be
rejected while the command line arguments are parsed, but we fail
to reject such a command line upfront.

* "git rebase" etc. in Git 2.19 fails to abort when given an empty
commit log message as result of editing, which has been corrected.

* The code to backfill objects in lazily cloned repository did not
work correctly, which has been corrected.

* Update error messages given by "git remote" and make them consistent.

* "git update-ref" learned to make both "--no-deref" and "--stdin"
work at the same time.

* Recently added "range-diff" had a corner-case bug to cause it
segfault, which has been corrected.

* The recently introduced commit-graph auxiliary data is incompatible
with mechanisms such as replace & grafts that "breaks" immutable
nature of the object reference relationship. Disable optimizations
based on its use (and updating existing commit-graph) when these
incompatible features are in use in the repository.

* The mailmap file update.

* The code in "git status" sometimes hit an assertion failure. This
was caused by a structure that was reused without cleaning the data
used for the first run, which has been corrected.

* A corner-case bugfix.

* A partial clone that is configured to lazily fetch missing objects
will on-demand issue a "git fetch" request to the originating
repository to fill not-yet-obtained objects. The request has been
optimized for requesting a tree object (and not the leaf blob
objects contained in it) by telling the originating repository that
no blobs are needed.

* The codepath to support the experimental split-index mode had
remaining "racily clean" issues fixed.

* "git log --graph" showing an octopus merge sometimes miscounted the
number of display columns it is consuming to show the merge and its
parent commits, which has been corrected.

* The implementation of run_command() API on the UNIX platforms had a
bug that caused a command not on $PATH to be found in the current
directory.

* A mutex used in "git pack-objects" were not correctly initialized
and this caused "git repack" to dump core on Windows.

* Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
Windows would strip initial parts from the paths because they
were not recognized as absolute, which has been corrected.

* The receive.denyCurrentBranch=updateInstead codepath kicked in even
when the push should have been rejected due to other reasons, such
as it does not fast-forward or the update-hook rejects it, which
has been corrected.

* "git repack" in a shallow clone did not correctly update the
shallow points in the repository, leading to a repository that
does not pass fsck.

* Operations on promisor objects make sense in the context of only a
small subset of the commands that internally use the revisions
machinery, but the "--exclude-promisor-objects" option were taken
and led to nonsense results by commands like "log", to which it
didn't make much sense. This has been corrected.

* The "container" mode of TravisCI is going away. Our .travis.yml
file is getting prepared for the transition.

* Our test scripts can now take the '-V' option as a synonym for the
'--verbose-log' option.

* A regression in Git 2.12 era made "git fsck" fall into an infinite
loop while processing truncated loose objects.

Also contains various documentation updates and code clean-ups.
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.19.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Git v2.19.3 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6, v2.15.4
and in v2.17.3, addressing the security issues CVE-2019-1348,
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387; see the release notes
for those versions for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.19.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.19.4 Release Notes
=========================

This release merges the security fix that appears in v2.17.4; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.19.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.19.5 Release Notes
=========================

This release merges the security fix that appears in v2.17.5; see
the release notes for that version for details.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.19.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.19.6 Release Notes
=========================

This release merges up the fixes that appear in v2.17.6 and
v2.18.5 to address the security issue CVE-2021-21300; see the
release notes for these versions for details.
313 changes: 313 additions & 0 deletions Documentation/RelNotes/2.2.0.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,313 @@
Git v2.2 Release Notes
======================

Updates since v2.1
------------------

Ports

* Building on older MacOS X systems automatically sets
the necessary NO_APPLE_COMMON_CRYPTO build-time option.

* Building with NO_PTHREADS has been resurrected.

* Compilation options have been updated a bit to better support the
z/OS port.


UI, Workflows & Features

* "git archive" learned to filter what gets archived with a pathspec.

* "git config --edit --global" starts from a skeletal per-user
configuration file contents, instead of a total blank, when the
user does not already have any global config. This immediately
reduces the need to later ask "Have you forgotten to set
core.user?", and we can add more to the template as we gain
more experience.

* "git stash list -p" used to be almost always a no-op because each
stash entry is represented as a merge commit. It learned to show
the difference between the base commit version and the working tree
version, which is in line with what "git stash show" gives.

* Sometimes users want to report a bug they experience on their
repository, but they are not at liberty to share the contents of
the repository. "fast-export" was taught an "--anonymize" option
to replace blob contents, names of people, paths and log
messages with bland and simple strings to help them.

* "git difftool" learned an option to stop feeding paths to the
diff backend when it exits with a non-zero status.

* "git grep" learned to paint (or not paint) partial matches on
context lines when showing "grep -C<num>" output in color.

* "log --date=iso" uses a slight variant of the ISO 8601 format that is
more human readable. A new "--date=iso-strict" option gives
datetime output that conforms more strictly.

* The logic "git prune" uses is more resilient against various corner
cases.

* A broken reimplementation of Git could write an invalid index that
records both stage #0 and higher-stage entries for the same path.
We now notice and reject such an index, as there is no sensible
fallback (we do not know if the broken tool wanted to resolve and
forgot to remove the higher-stage entries, or if it wanted to unresolve
and forgot to remove the stage #0 entry).

* The temporary files "git mergetool" uses are renamed to avoid too
many dots in them (e.g. a temporary file for "hello.c" used to be
named e.g. "hello.BASE.4321.c" but now uses underscore instead,
e.g. "hello_BASE_4321.c", to allow us to have multiple variants).

* The temporary files "git mergetool" uses can be placed in a newly
created temporary directory, instead of the current directory, by
setting the mergetool.writeToTemp configuration variable.

* "git mergetool" understands "--tool bc" now, as version 4 of
BeyondCompare can be driven the same way as its version 3 and it
feels awkward to say "--tool bc3" to run version 4.

* The "pre-receive" and "post-receive" hooks are no longer required
to consume their input fully (not following this requirement used
to result in intermittent errors in "git push").

* The pretty-format specifier "%d", which expands to " (tagname)"
for a tagged commit, gained a cousin "%D" that just gives the
"tagname" without frills.

* "git push" learned "--signed" push, that allows a push (i.e.
request to update the refs on the other side to point at a new
history, together with the transmission of necessary objects) to be
signed, so that it can be verified and audited, using the GPG
signature of the person who pushed, that the tips of branches at a
public repository really point the commits the pusher wanted to,
without having to "trust" the server.

* "git interpret-trailers" is a new filter to programmatically edit
the tail end of the commit log messages, e.g. "Signed-off-by:".

* "git help everyday" shows the "Everyday Git in 20 commands or so"
document, whose contents have been updated to match more modern
Git practice.

* On the "git svn" front, work progresses to reduce memory consumption and
to improve handling of mergeinfo.


Performance, Internal Implementation, Development Support etc.

* The API to manipulate the "refs" has been restructured to make it
more transactional, with the eventual goal to allow all-or-none
atomic updates and migrating the storage to something other than
the traditional filesystem based one (e.g. databases).

* The lockfile API and its users have been cleaned up.

* We no longer attempt to keep track of individual dependencies to
the header files in the build procedure, relying instead on automated
dependency generation support from modern compilers.

* In tests, we have been using NOT_{MINGW,CYGWIN} test prerequisites
long before negated prerequisites e.g. !MINGW were invented.
The former has been converted to the latter to avoid confusion.

* Optimized looking up a remote's configuration in a repository with very many
remotes defined.

* There are cases where you lock and open to write a file, close it
to show the updated contents to an external processes, and then have
to update the file again while still holding the lock; now the
lockfile API has support for such an access pattern.

* The API to allocate the structure to keep track of commit
decoration has been updated to make it less cumbersome to use.

* An in-core caching layer to let us avoid reading the same
configuration files several times has been added. A few commands
have been converted to use this subsystem.

* Various code paths have been cleaned up and simplified by using
the "strbuf", "starts_with()", and "skip_prefix()" APIs more.

* A few codepaths that died when large blobs that would not fit in
core are involved in their operation have been taught to punt
instead, by e.g. marking a too-large blob as not to be diffed.

* A few more code paths in "commit" and "checkout" have been taught
to repopulate the cache-tree in the index, to help speed up later
"write-tree" (used in "commit") and "diff-index --cached" (used in
"status").

* A common programming mistake to assign the same short option name
to two separate options is detected by the parse_options() API to help
developers.

* The code path to write out the packed-refs file has been optimized,
which especially matters in a repository with a large number of
refs.

* The check to see if a ref $F can be created by making sure no
existing ref has $F/ as its prefix has been optimized, which
especially matters in a repository with a large number of existing
refs.

* "git fsck" was taught to check the contents of tag objects a bit more.

* "git hash-object" was taught a "--literally" option to help
debugging.

* When running a required clean filter, we do not have to mmap the
original before feeding the filter. Instead, stream the file
contents directly to the filter and process its output.

* The scripts in the test suite can be run with the "-x" option to show
a shell-trace of each command they run.

* The "run-command" API learned to manage the argv and environment
arrays for child process, alleviating the need for the callers to
allocate and deallocate them.

* Some people use AsciiDoctor, instead of AsciiDoc, to format our
documentation set; the documentation has been adjusted to be usable
by both, as AsciiDoctor is pickier than AsciiDoc about its input
mark-up.


Also contains various documentation updates and code clean-ups.


Fixes since v2.1
----------------

Unless otherwise noted, all the fixes since v2.1 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

* "git log --pretty/format=" with an empty format string did not
mean the more obvious "No output whatsoever" but "Use default
format", which was counterintuitive.

* "git -c section.var command" and "git -c section.var= command"
should pass the configuration value differently (the former should be a
boolean true, the latter should be an empty string).

* Applying a patch not generated by Git in a subdirectory used to
check for whitespace breakage using the attributes of incorrect
paths. Also whitespace checks were performed even for paths
excluded via the "git apply --exclude=<path>" mechanism.

* "git bundle create" with a date-range specification was meant to
exclude tags outside the range, but it didn't.

* "git add x" where x used to be a directory and is now a
symbolic link to a directory misbehaved.

* The prompt script checked the $GIT_DIR/ref/stash file to see if there
is a stash, which was a no-no.

* Pack-protocol documentation had a minor typo.

* "git checkout -m" did not switch to another branch while carrying
the local changes forward when a path was deleted from the index.

* "git daemon" (with NO_IPV6 build configuration) used to incorrectly
use the hostname even when gethostbyname() reported that the given
hostname is not found.
(merge 107efbe rs/daemon-fixes later to maint).

* With sufficiently long refnames, "git fast-import" could have
overflowed an on-stack buffer.

* After "pack-refs --prune" packed refs at the top-level, it failed
to prune them.

* Progress output from "git gc --auto" was visible in "git fetch -q".

* We used to pass -1000 to poll(2), expecting it to also mean "no
timeout", which should be spelled as -1.

* "git rebase" documentation was unclear that it is required to
specify on what <upstream> the rebase is to be done when telling it
to first check out <branch>.
(merge 95c6826 so/rebase-doc later to maint).

* "git push" over HTTP transport had an artificial limit on the number of
refs that can be pushed, imposed by the command line length.
(merge 26be19b jk/send-pack-many-refspecs later to maint).

* When receiving an invalid pack stream that records the same object
twice, multiple threads got confused due to a race.
(merge ab791dd jk/index-pack-threading-races later to maint).

* An attempt to remove the entire tree in the "git fast-import" input
stream caused it to misbehave.
(merge 2668d69 mb/fast-import-delete-root later to maint).

* Reachability check (used in "git prune" and friends) did not add a
detached HEAD as a starting point to traverse objects still in use.
(merge c40fdd0 mk/reachable-protect-detached-head later to maint).

* "git config --add section.var val" when section.var already has an
empty-string value used to lose the empty-string value.
(merge c1063be ta/config-add-to-empty-or-true-fix later to maint).

* "git fsck" failed to report that it found corrupt objects via its
exit status in some cases.
(merge 30d1038 jk/fsck-exit-code-fix later to maint).

* Use of the "--verbose" option used to break "git branch --merged".
(merge 12994dd jk/maint-branch-verbose-merged later to maint).

* Some MUAs mangle a line in a message that begins with "From " to
">From " when writing to a mailbox file, and feeding such an input
to "git am" used to lose such a line.
(merge 85de86a jk/mbox-from-line later to maint).

* "rev-parse --verify --quiet $name" is meant to quietly exit with a
non-zero status when $name is not a valid object name, but still
gave error messages in some cases.

* A handful of C source files have been updated to include
"git-compat-util.h" as the first thing, to conform better to our
coding guidelines.
(merge 1c4b660 da/include-compat-util-first-in-c later to maint).

* The t7004 test, which tried to run Git with small stack space, has been
updated to use a bit larger stack to avoid false breakage on some
platforms.
(merge b9a1907 sk/tag-contains-wo-recursion later to maint).

* A few documentation pages had example sections marked up not quite
correctly, which passed AsciiDoc but failed with AsciiDoctor.
(merge c30c43c bc/asciidoc-pretty-formats-fix later to maint).
(merge f8a48af bc/asciidoc later to maint).

* "gitweb" used deprecated CGI::startfrom, which was removed from
CGI.pm as of 4.04; use CGI::start_from instead.
(merge 4750f4b rm/gitweb-start-form later to maint).

* Newer versions of 'meld' break the auto-detection we use to see if
they are new enough to support the `--output` option.
(merge b12d045 da/mergetool-meld later to maint).

* "git pack-objects" forgot to disable the codepath to generate the
object reachability bitmap when it needs to split the resulting
pack.
(merge 2113471 jk/pack-objects-no-bitmap-when-splitting later to maint).

* The code to use cache-tree trusted the on-disk data too much and
fell into an infinite loop upon seeing an incorrectly recorded
index file.
(merge 729dbbd jk/cache-tree-protect-from-broken-libgit2 later to maint).

* "git fetch" into a repository where branch B was deleted earlier,
back when it had reflog enabled, and then branch B/C is fetched
into it without reflog enabled, which is arguably an unlikely
corner case, unnecessarily failed.
(merge aae828b jk/fetch-reflog-df-conflict later to maint).

* "git log --first-parent -L..." used to crash.
(merge a8787c5 tm/line-log-first-parent later to maint).
34 changes: 34 additions & 0 deletions Documentation/RelNotes/2.2.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Git v2.2.1 Release Notes
========================

Fixes since v2.2
----------------

* We used to allow committing a path ".Git/config" with Git that is
running on a case sensitive filesystem, but an attempt to check out
such a path with Git that runs on a case insensitive filesystem
would have clobbered ".git/config", which is definitely not what
the user would have expected. Git now prevents you from tracking
a path with ".Git" (in any case combination) as a path component.

* On Windows, certain path components that are different from ".git"
are mapped to ".git", e.g. "git~1/config" is treated as if it were
".git/config". HFS+ has a similar issue, where certain unicode
codepoints are ignored, e.g. ".g\u200cit/config" is treated as if
it were ".git/config". Pathnames with these potential issues are
rejected on the affected systems. Git on systems that are not
affected by this issue (e.g. Linux) can also be configured to
reject them to ensure cross platform interoperability of the hosted
projects.

* "git fsck" notices a tree object that records such a path that can
be confused with ".git", and with receive.fsckObjects configuration
set to true, an attempt to "git push" such a tree object will be
rejected. Such a path may not be a problem on a well behaving
filesystem but in order to protect those on HFS+ and on case
insensitive filesystems, this check is enabled on all platforms.

A big "thanks!" for bringing this issue to us goes to our friends in
the Mercurial land, namely, Matt Mackall and Augie Fackler.

Also contains typofixes, documentation updates and trivial code clean-ups.
63 changes: 63 additions & 0 deletions Documentation/RelNotes/2.2.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
Git v2.2.2 Release Notes
========================

Fixes since v2.2.1
------------------

* "git checkout $treeish $path", when $path in the index and the
working tree already matched what is in $treeish at the $path,
still overwrote the $path unnecessarily.

* "git config --get-color" did not parse its command line arguments
carefully.

* open() emulated on Windows platforms did not give EISDIR upon
an attempt to open a directory for writing.

* A few code paths used abs() when they should have used labs() on
long integers.

* "gitweb" used to depend on a behaviour recent CGI.pm deprecated.

* "git init" (hence "git clone") initialized the per-repository
configuration file .git/config with x-bit by mistake.

* Git 2.0 was supposed to make the "simple" mode for the default of
"git push", but it didn't.

* "Everyday" document had a broken link.

* The build procedure did not bother fixing perl and python scripts
when NO_PERL and NO_PYTHON build-time configuration changed.

* The code that reads the reflog from the newer to the older entries
did not handle an entry that crosses a boundary of block it uses to
read them correctly.

* "git apply" was described in the documentation to take --ignore-date
option, which it does not.

* Traditionally we tried to avoid interpreting date strings given by
the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when
used early November 2014 was taken as "October 12, 2014" because it
is likely that a date in the future, December 10, is a mistake.
This heuristics has been loosened to allow people to express future
dates (most notably, --until=<date> may want to be far in the
future) and we no longer tiebreak by future-ness of the date when

(1) ISO-like format is used, and
(2) the string can make sense interpreted as both y-m-d and y-d-m.

Git may still have to use the heuristics to tiebreak between dd/mm/yy
and mm/dd/yy, though.

* The code to abbreviate an object name to its short unique prefix
has been optimized when no abbreviation was requested.

* "git add --ignore-errors ..." did not ignore an error to
give a file that did not exist.

* Git did not correctly read an overlong refname from a packed refs
file.

Also contains typofixes, documentation updates and trivial code clean-ups.
9 changes: 9 additions & 0 deletions Documentation/RelNotes/2.2.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Git v2.2.3 Release Notes
========================

Fixes since v2.2.2
------------------

* A handful of codepaths that used to use fixed-sized arrays to hold
pathnames have been corrected to use strbuf and other mechanisms to
allow longer pathnames without fearing overflows.
700 changes: 700 additions & 0 deletions Documentation/RelNotes/2.20.0.txt

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions Documentation/RelNotes/2.20.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Git v2.20.1 Release Notes
=========================

This release is primarily to fix brown-paper-bag breakages in the
2.20.0 release.

Fixes since v2.20
-----------------

* A few newly added tests were not portable and caused minority
platforms to report false breakages, which have been fixed.

* Portability fix for a recent update to parse-options API.

* "git help -a" did not work well when an overly long alias is
defined, which has been corrected.

* A recent update accidentally squelched an error message when the
run_command API failed to run a missing command, which has been
corrected.
18 changes: 18 additions & 0 deletions Documentation/RelNotes/2.20.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Git v2.20.2 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6, v2.15.4
and in v2.17.3, addressing the security issues CVE-2019-1348,
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
CVE-2019-1353, CVE-2019-1354, and CVE-2019-1387; see the release notes
for those versions for details.

The change to disallow `submodule.<name>.update=!command` entries in
`.gitmodules` which was introduced v2.15.4 (and for which v2.17.3
added explicit fsck checks) fixes the vulnerability in v2.20.x where a
recursive clone followed by a submodule update could execute code
contained within the repository without the user explicitly having
asked for that (CVE-2019-19604).

Credit for finding this vulnerability goes to Joern Schneeweisz,
credit for the fixes goes to Jonathan Nieder.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.20.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.20.3 Release Notes
=========================

This release merges the security fix that appears in v2.17.4; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.20.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.20.4 Release Notes
=========================

This release merges the security fix that appears in v2.17.5; see
the release notes for that version for details.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.20.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.20.5 Release Notes
=========================

This release merges up the fixes that appear in v2.17.6, v2.18.5
and v2.19.6 to address the security issue CVE-2021-21300; see
the release notes for these versions for details.
451 changes: 451 additions & 0 deletions Documentation/RelNotes/2.21.0.txt

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.21.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Git v2.21.1 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6, v2.15.4,
v2.17.3 and in v2.20.2, addressing the security issues CVE-2019-1348,
CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352,
CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and CVE-2019-19604;
see the release notes for those versions for details.

Additionally, this version also includes a couple of fixes for the
Windows-specific quoting of command-line arguments when Git executes
a Unix shell on Windows.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.21.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.21.2 Release Notes
=========================

This release merges the security fix that appears in v2.17.4; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.21.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.21.3 Release Notes
=========================

This release merges the security fix that appears in v2.17.5; see
the release notes for that version for details.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.21.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.21.4 Release Notes
=========================

This release merges up the fixes that appear in v2.17.6, v2.18.5,
v2.19.6 and v2.20.5 to address the security issue CVE-2021-21300;
see the release notes for these versions for details.
597 changes: 597 additions & 0 deletions Documentation/RelNotes/2.22.0.txt

Large diffs are not rendered by default.

150 changes: 150 additions & 0 deletions Documentation/RelNotes/2.22.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
Git 2.22.1 Release Notes
========================

Fixes since v2.22
-----------------

* A relative pathname given to "git init --template=<path> <repo>"
ought to be relative to the directory "git init" gets invoked in,
but it instead was made relative to the repository, which has been
corrected.

* "git worktree add" used to fail when another worktree connected to
the same repository was corrupt, which has been corrected.

* The ownership rule for the file descriptor to fast-import remote
backend was mixed up, leading to unrelated file descriptor getting
closed, which has been fixed.

* "git update-server-info" used to leave stale packfiles in its
output, which has been corrected.

* The server side support for "git fetch" used to show incorrect
value for the HEAD symbolic ref when the namespace feature is in
use, which has been corrected.

* "git am -i --resolved" segfaulted after trying to see a commit as
if it were a tree, which has been corrected.

* "git bundle verify" needs to see if prerequisite objects exist in
the receiving repository, but the command did not check if we are
in a repository upfront, which has been corrected.

* "git merge --squash" is designed to update the working tree and the
index without creating the commit, and this cannot be countermanded
by adding the "--commit" option; the command now refuses to work
when both options are given.

* The data collected by fsmonitor was not properly written back to
the on-disk index file, breaking t7519 tests occasionally, which
has been corrected.

* Update to Unicode 12.1 width table.

* The command line to invoke a "git cat-file" command from inside
"git p4" was not properly quoted to protect a caret and running a
broken command on Windows, which has been corrected.

* "git request-pull" learned to warn when the ref we ask them to pull
from in the local repository and in the published repository are
different.

* When creating a partial clone, the object filtering criteria is
recorded for the origin of the clone, but this incorrectly used a
hardcoded name "origin" to name that remote; it has been corrected
to honor the "--origin <name>" option.

* "git fetch" into a lazy clone forgot to fetch base objects that are
necessary to complete delta in a thin packfile, which has been
corrected.

* The filter_data used in the list-objects-filter (which manages a
lazily sparse clone repository) did not use the dynamic array API
correctly---'nr' is supposed to point at one past the last element
of the array in use. This has been corrected.

* The description about slashes in gitignore patterns (used to
indicate things like "anchored to this level only" and "only
matches directories") has been revamped.

* The URL decoding code has been updated to avoid going past the end
of the string while parsing %-<hex>-<hex> sequence.

* The list of for-each like macros used by clang-format has been
updated.

* "git push --atomic" that goes over the transport-helper (namely,
the smart http transport) failed to prevent refs to be pushed when
it can locally tell that one of the ref update will fail without
having to consult the other end, which has been corrected.

* "git clean" silently skipped a path when it cannot lstat() it; now
it gives a warning.

* A codepath that reads from GPG for signed object verification read
past the end of allocated buffer, which has been fixed.

* "git rm" to resolve a conflicted path leaked an internal message
"needs merge" before actually removing the path, which was
confusing. This has been corrected.

* The "git clone" documentation refers to command line options in its
description in the short form; they have been replaced with long
forms to make them more recognisable.

* The configuration variable rebase.rescheduleFailedExec should be
effective only while running an interactive rebase and should not
affect anything when running a non-interactive one, which was not
the case. This has been corrected.

* "git submodule foreach" did not protect command line options passed
to the command to be run in each submodule correctly, when the
"--recursive" option was in use.

* Use "Erase in Line" CSI sequence that is already used in the editor
support to clear cruft in the progress output.

* The codepath to compute delta islands used to spew progress output
without giving the callers any way to squelch it, which has been
fixed.

* The code to parse scaled numbers out of configuration files has
been made more robust and also easier to follow.

* An incorrect list of options was cached after command line
completion failed (e.g. trying to complete a command that requires
a repository outside one), which has been corrected.

* "git rebase --abort" used to leave refs/rewritten/ when concluding
"git rebase -r", which has been corrected.

* "git stash show 23" used to work, but no more after getting
rewritten in C; this regression has been corrected.

* "git interpret-trailers" always treated '#' as the comment
character, regardless of core.commentChar setting, which has been
corrected.

* Code clean-up to avoid signed integer overlaps during binary search.

* "git checkout -p" needs to selectively apply a patch in reverse,
which did not work well.

* The commit-graph file is now part of the "files that the runtime
may keep open file descriptors on, all of which would need to be
closed when done with the object store", and the file descriptor to
an existing commit-graph file now is closed before "gc" finalizes a
new instance to replace it.

* Code restructuring during 2.20 period broke fetching tags via
"import" based transports.

* We have been trying out a few language features outside c89; the
coding guidelines document did not talk about them and instead had
a blanket ban against them.

* The internal diff machinery can be made to read out of bounds while
looking for --funcion-context line in a corner case, which has been
corrected.

Also contains various documentation updates, code clean-ups and minor fixups.
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.22.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Git v2.22.2 Release Notes
=========================

This release merges up the fixes that appear in v2.14.6, v2.15.4,
v2.17.3, v2.20.2 and in v2.21.1, addressing the security issues
CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351,
CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and
CVE-2019-19604; see the release notes for those versions for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.22.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.22.3 Release Notes
=========================

This release merges the security fix that appears in v2.17.4; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.22.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.22.4 Release Notes
=========================

This release merges the security fix that appears in v2.17.5; see
the release notes for that version for details.
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.22.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Git v2.22.5 Release Notes
=========================

This release merges up the fixes that appear in v2.17.6,
v2.18.5, v2.19.6, v2.20.5 and v2.21.4 to address the security
issue CVE-2021-21300; see the release notes for these versions
for details.
348 changes: 348 additions & 0 deletions Documentation/RelNotes/2.23.0.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.23.1.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.23.2.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.23.3.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.23.4.txt
398 changes: 398 additions & 0 deletions Documentation/RelNotes/2.24.0.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.24.1.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.24.2.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.24.3.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.24.4.txt
370 changes: 370 additions & 0 deletions Documentation/RelNotes/2.25.0.txt
55 changes: 55 additions & 0 deletions Documentation/RelNotes/2.25.1.txt
60 changes: 60 additions & 0 deletions Documentation/RelNotes/2.25.2.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.25.3.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.25.4.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.25.5.txt
341 changes: 341 additions & 0 deletions Documentation/RelNotes/2.26.0.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.26.1.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.26.2.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.26.3.txt
525 changes: 525 additions & 0 deletions Documentation/RelNotes/2.27.0.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.27.1.txt
236 changes: 236 additions & 0 deletions Documentation/RelNotes/2.28.0.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.28.1.txt
514 changes: 514 additions & 0 deletions Documentation/RelNotes/2.29.0.txt
11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.29.1.txt
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.29.2.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.29.3.txt
300 changes: 300 additions & 0 deletions Documentation/RelNotes/2.3.0.txt
52 changes: 52 additions & 0 deletions Documentation/RelNotes/2.3.1.txt
18 changes: 18 additions & 0 deletions Documentation/RelNotes/2.3.10.txt
79 changes: 79 additions & 0 deletions Documentation/RelNotes/2.3.2.txt
39 changes: 39 additions & 0 deletions Documentation/RelNotes/2.3.3.txt
32 changes: 32 additions & 0 deletions Documentation/RelNotes/2.3.4.txt
44 changes: 44 additions & 0 deletions Documentation/RelNotes/2.3.5.txt
13 changes: 13 additions & 0 deletions Documentation/RelNotes/2.3.6.txt
21 changes: 21 additions & 0 deletions Documentation/RelNotes/2.3.7.txt
22 changes: 22 additions & 0 deletions Documentation/RelNotes/2.3.8.txt
9 changes: 9 additions & 0 deletions Documentation/RelNotes/2.3.9.txt
401 changes: 401 additions & 0 deletions Documentation/RelNotes/2.30.0.txt
55 changes: 55 additions & 0 deletions Documentation/RelNotes/2.30.1.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.30.2.txt
24 changes: 24 additions & 0 deletions Documentation/RelNotes/2.30.3.txt
21 changes: 21 additions & 0 deletions Documentation/RelNotes/2.30.4.txt
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.30.5.txt
60 changes: 60 additions & 0 deletions Documentation/RelNotes/2.30.6.txt
86 changes: 86 additions & 0 deletions Documentation/RelNotes/2.30.7.txt
51 changes: 51 additions & 0 deletions Documentation/RelNotes/2.30.8.txt
43 changes: 43 additions & 0 deletions Documentation/RelNotes/2.30.9.txt
365 changes: 365 additions & 0 deletions Documentation/RelNotes/2.31.0.txt
27 changes: 27 additions & 0 deletions Documentation/RelNotes/2.31.1.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.31.2.txt
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.31.3.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.31.4.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.31.5.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.31.6.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.31.7.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.31.8.txt
416 changes: 416 additions & 0 deletions Documentation/RelNotes/2.32.0.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.32.1.txt
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.32.2.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.32.3.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.32.4.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.32.5.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.32.6.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.32.7.txt
279 changes: 279 additions & 0 deletions Documentation/RelNotes/2.33.0.txt
138 changes: 138 additions & 0 deletions Documentation/RelNotes/2.33.1.txt
15 changes: 15 additions & 0 deletions Documentation/RelNotes/2.33.2.txt
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.33.3.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.33.4.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.33.5.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.33.6.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.33.7.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.33.8.txt
438 changes: 438 additions & 0 deletions Documentation/RelNotes/2.34.0.txt
23 changes: 23 additions & 0 deletions Documentation/RelNotes/2.34.1.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.34.2.txt
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.34.3.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.34.4.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.34.5.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.34.6.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.34.7.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.34.8.txt
412 changes: 412 additions & 0 deletions Documentation/RelNotes/2.35.0.txt
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.35.1.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.35.2.txt
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.35.3.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.35.4.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.35.5.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.35.6.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.35.7.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.35.8.txt
429 changes: 429 additions & 0 deletions Documentation/RelNotes/2.36.0.txt
33 changes: 33 additions & 0 deletions Documentation/RelNotes/2.36.1.txt
56 changes: 56 additions & 0 deletions Documentation/RelNotes/2.36.2.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.36.3.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.36.4.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.36.5.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.36.6.txt
337 changes: 337 additions & 0 deletions Documentation/RelNotes/2.37.0.txt
17 changes: 17 additions & 0 deletions Documentation/RelNotes/2.37.1.txt
88 changes: 88 additions & 0 deletions Documentation/RelNotes/2.37.2.txt
46 changes: 46 additions & 0 deletions Documentation/RelNotes/2.37.3.txt
65 changes: 65 additions & 0 deletions Documentation/RelNotes/2.37.4.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.37.5.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.37.6.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.37.7.txt
404 changes: 404 additions & 0 deletions Documentation/RelNotes/2.38.0.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.38.1.txt
67 changes: 67 additions & 0 deletions Documentation/RelNotes/2.38.2.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.38.3.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.38.4.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.38.5.txt
346 changes: 346 additions & 0 deletions Documentation/RelNotes/2.39.0.txt
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.39.1.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.39.2.txt
64 changes: 64 additions & 0 deletions Documentation/RelNotes/2.39.3.txt
79 changes: 79 additions & 0 deletions Documentation/RelNotes/2.39.4.txt
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.39.5.txt
514 changes: 514 additions & 0 deletions Documentation/RelNotes/2.4.0.txt
40 changes: 40 additions & 0 deletions Documentation/RelNotes/2.4.1.txt
18 changes: 18 additions & 0 deletions Documentation/RelNotes/2.4.10.txt
11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.4.11.txt
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.4.12.txt
45 changes: 45 additions & 0 deletions Documentation/RelNotes/2.4.2.txt
76 changes: 76 additions & 0 deletions Documentation/RelNotes/2.4.3.txt
35 changes: 35 additions & 0 deletions Documentation/RelNotes/2.4.4.txt
28 changes: 28 additions & 0 deletions Documentation/RelNotes/2.4.5.txt
23 changes: 23 additions & 0 deletions Documentation/RelNotes/2.4.6.txt
53 changes: 53 additions & 0 deletions Documentation/RelNotes/2.4.7.txt
21 changes: 21 additions & 0 deletions Documentation/RelNotes/2.4.8.txt
9 changes: 9 additions & 0 deletions Documentation/RelNotes/2.4.9.txt
320 changes: 320 additions & 0 deletions Documentation/RelNotes/2.40.0.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.40.1.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.40.2.txt
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.40.3.txt
399 changes: 399 additions & 0 deletions Documentation/RelNotes/2.41.0.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.41.1.txt
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.41.2.txt
329 changes: 329 additions & 0 deletions Documentation/RelNotes/2.42.0.txt
88 changes: 88 additions & 0 deletions Documentation/RelNotes/2.42.1.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.42.2.txt
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.42.3.txt
323 changes: 323 additions & 0 deletions Documentation/RelNotes/2.43.0.txt
82 changes: 82 additions & 0 deletions Documentation/RelNotes/2.43.1.txt
37 changes: 37 additions & 0 deletions Documentation/RelNotes/2.43.2.txt
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.43.3.txt
7 changes: 7 additions & 0 deletions Documentation/RelNotes/2.43.4.txt
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.43.5.txt
334 changes: 334 additions & 0 deletions Documentation/RelNotes/2.44.0.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.44.1.txt
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.44.2.txt
476 changes: 476 additions & 0 deletions Documentation/RelNotes/2.45.0.txt
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.45.1.txt
26 changes: 26 additions & 0 deletions Documentation/RelNotes/2.45.2.txt
107 changes: 107 additions & 0 deletions Documentation/RelNotes/2.45.3.txt
461 changes: 461 additions & 0 deletions Documentation/RelNotes/2.46.0.txt
75 changes: 75 additions & 0 deletions Documentation/RelNotes/2.46.1.txt
23 changes: 23 additions & 0 deletions Documentation/RelNotes/2.46.2.txt
342 changes: 342 additions & 0 deletions Documentation/RelNotes/2.47.0.txt
31 changes: 31 additions & 0 deletions Documentation/RelNotes/2.47.1.txt
330 changes: 330 additions & 0 deletions Documentation/RelNotes/2.48.0.txt
564 changes: 564 additions & 0 deletions Documentation/RelNotes/2.5.0.txt
65 changes: 65 additions & 0 deletions Documentation/RelNotes/2.5.1.txt
63 changes: 63 additions & 0 deletions Documentation/RelNotes/2.5.2.txt
17 changes: 17 additions & 0 deletions Documentation/RelNotes/2.5.3.txt
18 changes: 18 additions & 0 deletions Documentation/RelNotes/2.5.4.txt
11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.5.5.txt
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.5.6.txt
370 changes: 370 additions & 0 deletions Documentation/RelNotes/2.6.0.txt
18 changes: 18 additions & 0 deletions Documentation/RelNotes/2.6.1.txt
65 changes: 65 additions & 0 deletions Documentation/RelNotes/2.6.2.txt
111 changes: 111 additions & 0 deletions Documentation/RelNotes/2.6.3.txt
63 changes: 63 additions & 0 deletions Documentation/RelNotes/2.6.4.txt
58 changes: 58 additions & 0 deletions Documentation/RelNotes/2.6.5.txt
11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.6.6.txt
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.6.7.txt
414 changes: 414 additions & 0 deletions Documentation/RelNotes/2.7.0.txt
87 changes: 87 additions & 0 deletions Documentation/RelNotes/2.7.1.txt
41 changes: 41 additions & 0 deletions Documentation/RelNotes/2.7.2.txt
62 changes: 62 additions & 0 deletions Documentation/RelNotes/2.7.3.txt
11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.7.4.txt
14 changes: 14 additions & 0 deletions Documentation/RelNotes/2.7.5.txt
25 changes: 25 additions & 0 deletions Documentation/RelNotes/2.7.6.txt
439 changes: 439 additions & 0 deletions Documentation/RelNotes/2.8.0.txt
9 changes: 9 additions & 0 deletions Documentation/RelNotes/2.8.1.txt
70 changes: 70 additions & 0 deletions Documentation/RelNotes/2.8.2.txt
101 changes: 101 additions & 0 deletions Documentation/RelNotes/2.8.3.txt
69 changes: 69 additions & 0 deletions Documentation/RelNotes/2.8.4.txt
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.8.5.txt
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.8.6.txt
512 changes: 512 additions & 0 deletions Documentation/RelNotes/2.9.0.txt
117 changes: 117 additions & 0 deletions Documentation/RelNotes/2.9.1.txt
13 changes: 13 additions & 0 deletions Documentation/RelNotes/2.9.2.txt
170 changes: 170 additions & 0 deletions Documentation/RelNotes/2.9.3.txt
90 changes: 90 additions & 0 deletions Documentation/RelNotes/2.9.4.txt
4 changes: 4 additions & 0 deletions Documentation/RelNotes/2.9.5.txt
179 changes: 179 additions & 0 deletions Documentation/ReviewingGuidelines.txt
901 changes: 642 additions & 259 deletions Documentation/SubmittingPatches
51 changes: 51 additions & 0 deletions Documentation/ToolsForGit.txt
97 changes: 0 additions & 97 deletions Documentation/asciidoc.conf

This file was deleted.

92 changes: 92 additions & 0 deletions Documentation/asciidoc.conf.in
134 changes: 134 additions & 0 deletions Documentation/asciidoctor-extensions.rb.in
80 changes: 61 additions & 19 deletions Documentation/blame-options.txt
7 changes: 5 additions & 2 deletions Documentation/build-docdep.perl
21 changes: 12 additions & 9 deletions Documentation/cat-texi.perl
48 changes: 27 additions & 21 deletions Documentation/cmd-list.perl
2,897 changes: 485 additions & 2,412 deletions Documentation/config.txt
12 changes: 12 additions & 0 deletions Documentation/config/add.txt
176 changes: 176 additions & 0 deletions Documentation/config/advice.txt
43 changes: 43 additions & 0 deletions Documentation/config/alias.txt
14 changes: 14 additions & 0 deletions Documentation/config/am.txt
11 changes: 11 additions & 0 deletions Documentation/config/apply.txt
6 changes: 6 additions & 0 deletions Documentation/config/attr.txt
91 changes: 91 additions & 0 deletions Documentation/config/bitmap-pseudo-merge.txt
37 changes: 37 additions & 0 deletions Documentation/config/blame.txt
103 changes: 103 additions & 0 deletions Documentation/config/branch.txt
9 changes: 9 additions & 0 deletions Documentation/config/browser.txt
31 changes: 31 additions & 0 deletions Documentation/config/bundle.txt
44 changes: 44 additions & 0 deletions Documentation/config/checkout.txt
3 changes: 3 additions & 0 deletions Documentation/config/clean.txt
23 changes: 23 additions & 0 deletions Documentation/config/clone.txt
206 changes: 206 additions & 0 deletions Documentation/config/color.txt
55 changes: 55 additions & 0 deletions Documentation/config/column.txt
29 changes: 29 additions & 0 deletions Documentation/config/commit.txt
37 changes: 37 additions & 0 deletions Documentation/config/commitgraph.txt
7 changes: 7 additions & 0 deletions Documentation/config/completion.txt
779 changes: 779 additions & 0 deletions Documentation/config/core.txt
55 changes: 55 additions & 0 deletions Documentation/config/credential.txt
269 changes: 269 additions & 0 deletions Documentation/config/diff.txt
43 changes: 43 additions & 0 deletions Documentation/config/difftool.txt
103 changes: 103 additions & 0 deletions Documentation/config/extensions.txt
8 changes: 8 additions & 0 deletions Documentation/config/fastimport.txt
41 changes: 41 additions & 0 deletions Documentation/config/feature.txt
128 changes: 128 additions & 0 deletions Documentation/config/fetch.txt
9 changes: 9 additions & 0 deletions Documentation/config/filter.txt
22 changes: 22 additions & 0 deletions Documentation/config/fmt-merge-msg.txt
153 changes: 153 additions & 0 deletions Documentation/config/format.txt
71 changes: 71 additions & 0 deletions Documentation/config/fsck.txt
11 changes: 11 additions & 0 deletions Documentation/config/fsmonitor--daemon.txt
181 changes: 181 additions & 0 deletions Documentation/config/gc.txt
67 changes: 67 additions & 0 deletions Documentation/config/gitcvs.txt
16 changes: 16 additions & 0 deletions Documentation/config/gitweb.txt
85 changes: 85 additions & 0 deletions Documentation/config/gpg.txt
28 changes: 28 additions & 0 deletions Documentation/config/grep.txt
57 changes: 57 additions & 0 deletions Documentation/config/gui.txt
50 changes: 50 additions & 0 deletions Documentation/config/guitool.txt
26 changes: 26 additions & 0 deletions Documentation/config/help.txt
362 changes: 362 additions & 0 deletions Documentation/config/http.txt
10 changes: 10 additions & 0 deletions Documentation/config/i18n.txt
44 changes: 44 additions & 0 deletions Documentation/config/imap.txt
6 changes: 6 additions & 0 deletions Documentation/config/includeif.txt
43 changes: 43 additions & 0 deletions Documentation/config/index.txt
20 changes: 20 additions & 0 deletions Documentation/config/init.txt
20 changes: 20 additions & 0 deletions Documentation/config/instaweb.txt
15 changes: 15 additions & 0 deletions Documentation/config/interactive.txt
64 changes: 64 additions & 0 deletions Documentation/config/log.txt
9 changes: 9 additions & 0 deletions Documentation/config/lsrefs.txt
6 changes: 6 additions & 0 deletions Documentation/config/mailinfo.txt
15 changes: 15 additions & 0 deletions Documentation/config/mailmap.txt
71 changes: 71 additions & 0 deletions Documentation/config/maintenance.txt
12 changes: 12 additions & 0 deletions Documentation/config/man.txt
125 changes: 125 additions & 0 deletions Documentation/config/merge.txt
101 changes: 101 additions & 0 deletions Documentation/config/mergetool.txt
68 changes: 68 additions & 0 deletions Documentation/config/notes.txt
215 changes: 215 additions & 0 deletions Documentation/config/pack.txt
8 changes: 8 additions & 0 deletions Documentation/config/pager.txt
9 changes: 9 additions & 0 deletions Documentation/config/pretty.txt
3 changes: 3 additions & 0 deletions Documentation/config/promisor.txt
63 changes: 63 additions & 0 deletions Documentation/config/protocol.txt
33 changes: 33 additions & 0 deletions Documentation/config/pull.txt
134 changes: 134 additions & 0 deletions Documentation/config/push.txt
87 changes: 87 additions & 0 deletions Documentation/config/rebase.txt
145 changes: 145 additions & 0 deletions Documentation/config/receive.txt
56 changes: 56 additions & 0 deletions Documentation/config/reftable.txt
121 changes: 121 additions & 0 deletions Documentation/config/remote.txt
3 changes: 3 additions & 0 deletions Documentation/config/remotes.txt
41 changes: 41 additions & 0 deletions Documentation/config/repack.txt
12 changes: 12 additions & 0 deletions Documentation/config/rerere.txt
3 changes: 3 additions & 0 deletions Documentation/config/revert.txt
62 changes: 62 additions & 0 deletions Documentation/config/safe.txt
115 changes: 115 additions & 0 deletions Documentation/config/sendemail.txt
5 changes: 5 additions & 0 deletions Documentation/config/sendpack.txt
5 changes: 5 additions & 0 deletions Documentation/config/sequencer.txt
3 changes: 3 additions & 0 deletions Documentation/config/showbranch.txt
16 changes: 16 additions & 0 deletions Documentation/config/sideband.txt
27 changes: 27 additions & 0 deletions Documentation/config/sparse.txt
24 changes: 24 additions & 0 deletions Documentation/config/splitindex.txt
35 changes: 35 additions & 0 deletions Documentation/config/ssh.txt
14 changes: 14 additions & 0 deletions Documentation/config/stash.txt
79 changes: 79 additions & 0 deletions Documentation/config/status.txt
108 changes: 108 additions & 0 deletions Documentation/config/submodule.txt
14 changes: 14 additions & 0 deletions Documentation/config/survey.txt
17 changes: 17 additions & 0 deletions Documentation/config/tag.txt
6 changes: 6 additions & 0 deletions Documentation/config/tar.txt
71 changes: 71 additions & 0 deletions Documentation/config/trace2.txt
127 changes: 127 additions & 0 deletions Documentation/config/transfer.txt
6 changes: 6 additions & 0 deletions Documentation/config/uploadarchive.txt
88 changes: 88 additions & 0 deletions Documentation/config/uploadpack.txt
Loading