Language Selection

English French German Italian Portuguese Spanish

Git 2.26.0

Filed under
  • Git v2.26.0 released
    The latest feature release Git v2.26.0 is now available at the
    usual places.  It is comprised of 504 non-merge commits since
    v2.25.0, contributed by 64 people, 12 of which are new faces.
    The tarballs are found at:
    The following public repositories all have a copy of the 'v2.26.0'
    tag and the 'master' branch that the tag points at:
      url =
      url = git://
      url =
    New contributors whose contributions weren't in v2.25.0 are as follows.
    Welcome to the Git development community!
      Abhishek Kumar, Benno Evers, Emir Sarı, Eyal Soha, Harald
      van Dijk, Jacques Bodin-Hullin, Kir Kolyshkin, Lucius Hu,
      Luke Bonanomi, Peter Kaestle, Rasmus Jonsson, and Shourya Shukla.
    Returning contributors who helped this release are as follows.
    Thanks for your continued support.
      Alban Gruin, Alessandro Menti, Alexander Shopov, Alexandr
      Miloslavskiy, Beat Bolli, Bert Wesarg, brian m. carlson,
      Christian Stimming, Christopher Diaz Riveros, David Turner,
      Denton Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah
      Newren, Emily Shaffer, Eric Sunshine, Fangyi Zhou, Hans
      Jerry Illikainen, Hariom Verma, Heba Waly, Jean-Noël Avila,
      Jeff King, Jiang Xin, Johan Herland, Johannes Berg, Johannes
      Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Jordi
      Mas, Junio C Hamano, Kevin Willford, Kyle Meyer, Luke Diamand,
      Martin Ågren, Masaya Suzuki, Matheus Tavares, Matthew Rogers,
      Matthias Rüster, Miriam Rubio, Paolo Bonzini, Peter Krefting,
      Philippe Blain, Pranit Bauva, Pratyush Yadav, Ralf Thielow,
      René Scharfe, SZEDER Gábor, Tanushree Tumane, Taylor Blau,
      Trần Ngọc Quân, and Yi-Jyun Pan.
    Git 2.26 Release Notes
    Updates since v2.25
    Backward compatibility notes
     * "git rebase" uses a different backend that is based on the 'merge'
       machinery by default.  There are a few known differences in the
       behaviour from the traditional machinery based on patch+apply.
       If your workflow is negatively affected by this change, please
       report it to so that we can take a look into
       it.  After doing so, you can set the 'rebase.backend' configuration
       variable to 'apply', in order to use the old default behaviour in
       the meantime.
    UI, Workflows & Features
     * Sample credential helper for using .netrc has been updated to work
       out of the box.
     * gpg.minTrustLevel configuration variable has been introduced to
       tell various signature verification codepaths the required minimum
       trust level.
     * The command line completion (in contrib/) learned to complete
       subcommands and arguments to "git worktree".
     * Disambiguation logic to tell revisions and pathspec apart has been
       tweaked so that backslash-escaped glob special characters do not
       count in the "wildcards are pathspec" rule.
     * One effect of specifying where the GIT_DIR is (either with the
       environment variable, or with the "git --git-dir=<where> cmd"
       option) is to disable the repository discovery.  This has been
       placed a bit more stress in the documentation, as new users often
       get confused.
     * Two help messages given when "git add" notices the user gave it
       nothing to add have been updated to use advise() API.
     * A new version of fsmonitor-watchman hook has been introduced, to
       avoid races.
     * "git config" learned to show in which "scope", in addition to in
       which file, each config setting comes from.
     * The basic 7 colors learned the brighter counterparts
       (e.g. "brightred").
     * "git sparse-checkout" learned a new "add" subcommand.
     * A configuration element used for credential subsystem can now use
       wildcard pattern to specify for which set of URLs the entry
     * "git clone --recurse-submodules --single-branch" now uses the same
       single-branch option when cloning the submodules.
     * "git rm" and "git stash" learns the new "--pathspec-from-file"
     * "git am --show-current-patch" is a way to show the piece of e-mail
       for the stopped step, which is not suitable to directly feed "git
       apply" (it is designed to be a good "git am" input).  It learned a
       new option to show only the patch part.
     * Handling of conflicting renames in merge-recursive have further
       been made consistent with how existing codepaths try to mimic what
       is done to add/add conflicts.
    Performance, Internal Implementation, Development Support etc.
     * Tell .editorconfig that in this project, *.txt files are indented
       with tabs.
     * The test-lint machinery knew to check "VAR=VAL shell_function"
       construct, but did not check "VAR= shell_function", which has been
     * Replace "git config --bool" calls with "git config --type=bool" in
       sample templates.
     * The effort to move "git-add--interactive" to C continues.
     * Improve error message generation for "git submodule add".
     * Preparation of test scripts for the day when the object names will
       use SHA-256 continues.
     * Warn programmers about pretend_object_file() that allows the code
       to tentatively use in-core objects.
     * The way "git pack-objects" reuses objects stored in existing pack
       to generate its result has been improved.
     * The transport protocol version 2 becomes the default one.
     * Traditionally, we avoided threaded grep while searching in objects
       (as opposed to files in the working tree) as accesses to the object
       layer is not thread-safe.  This limitation is getting lifted.
     * "git rebase -i" (and friends) used to unnecessarily check out the
       tip of the branch to be rebased, which has been corrected.
     * A low-level API function get_oid(), that accepts various ways to
       name an object, used to issue end-user facing error messages
       without l10n, which has been updated to be translatable.
     * Unneeded connectivity check is now disabled in a partial clone when
       fetching into it.
     * Some rough edges in the sparse-checkout feature, especially around
       the cone mode, have been cleaned up.
     * The diff-* plumbing family of subcommands now pay attention to the
       diff.wsErrorHighlight configuration, which has been ignored before;
       this allows "git add -p" to also show the whitespace problems to
       the end user.
     * Some codepaths were given a repository instance as a parameter to
       work in the repository, but passed the_repository instance to its
       callees, which has been cleaned up (somewhat).
     * Memory footprint and performance of "git name-rev" has been
     * The object reachability bitmap machinery and the partial cloning
       machinery were not prepared to work well together, because some
       object-filtering criteria that partial clones use inherently rely
       on object traversal, but the bitmap machinery is an optimization
       to bypass that object traversal.  There however are some cases
       where they can work together, and they were taught about them.
     * "git rebase" has learned to use the merge backend (i.e. the
       machinery that drives "rebase -i") by default, while allowing
       "--apply" option to use the "apply" backend (e.g. the moral
       equivalent of "format-patch piped to am").  The rebase.backend
       configuration variable can be set to customize.
     * Underlying machinery of "git bisect--helper" is being refactored
       into pieces that are more easily reused.
    Fixes since v2.25
     * "git commit" gives output similar to "git status" when there is
       nothing to commit, but without honoring the advise.statusHints
       configuration variable, which has been corrected.
     * has_object_file() said "no" given an object registered to the
       system via pretend_object_file(), making it inconsistent with
       read_object_file(), causing lazy fetch to attempt fetching an
       empty tree from promisor remotes.
     * Complete an update to tutorial that encourages "git switch" over
       "git checkout" that was done only half-way.
     * C pedantry ;-) fix.
     * The code that tries to skip over the entries for the paths in a
       single directory using the cache-tree was not careful enough
       against corrupt index file.
     * Reduce unnecessary round-trip when running "ls-remote" over the
       stateless RPC mechanism.
     * "git restore --staged" did not correctly update the cache-tree
       structure, resulting in bogus trees to be written afterwards, which
       has been corrected.
     * The code recently added to move to the entry beyond the ones in the
       same directory in the index in the sparse-cone mode did not count
       the number of entries to skip over incorrectly, which has been
     * Rendering by "git log --graph" of ancestry lines leading to a merge
       commit were made suboptimal to waste vertical space a bit with a
       recent update, which has been corrected.
     * Work around test breakages caused by custom regex engine used in
       libasan, when address sanitizer is used with more recent versions
       of gcc and clang.
     * Minor bugfixes to "git add -i" that has recently been rewritten in C.
     * "git fetch --refmap=" option has got a better documentation.
     * "git checkout X" did not correctly fail when X is not a local
       branch but could name more than one remote-tracking branches
       (i.e. to be dwimmed as the starting point to create a corresponding
       local branch), which has been corrected.
       (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).
     * Corner case bugs in "git clean" that stems from a (necessarily for
       performance reasons) awkward calling convention in the directory
       enumeration API has been corrected.
     * A fetch that is told to recursively fetch updates in submodules
       inevitably produces reams of output, and it becomes hard to spot
       error messages.  The command has been taught to enumerate
       submodules that had errors at the end of the operation.
       (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).
     * The "--recurse-submodules" option of various subcommands did not
       work well when run in an alternate worktree, which has been
     * Futureproofing a test not to depend on the current implementation
     * Running "git rm" on a submodule failed unnecessarily when
       .gitmodules is only cache-dirty, which has been corrected.
     * C pedantry ;-) fix.
     * "git grep --no-index" should not get affected by the contents of
       the .gitmodules file but when "--recurse-submodules" is given or
       the "submodule.recurse" variable is set, it did.  Now these
       settings are ignored in the "--no-index" mode.
     * Technical details of the bundle format has been documented.
     * Unhelpful warning messages during documentation build have been squelched.
     * "git rebase -i" identifies existing commits in its todo file with
       their abbreviated object name, which could become ambiguous as it
       goes to create new commits, and has a mechanism to avoid ambiguity
       in the main part of its execution.  A few other cases however were
       not covered by the protection against ambiguity, which has been
     * Allow the rebase.missingCommitsCheck configuration to kick in when
       "rebase --edit-todo" and "rebase --continue" restarts the procedure.
       (merge 5a5445d878 ag/edit-todo-drop-check later to maint).
     * The way "git submodule status" reports an initialized but not yet
       populated submodule has not been reimplemented correctly when a
       part of the "git submodule" command was rewritten in C, which has
       been corrected.
       (merge f38c92452d pk/status-of-uncloned-submodule later to maint).
     * The code to automatically shrink the fan-out in the notes tree had
       an off-by-one bug, which has been killed.
     * The index-pack code now diagnoses a bad input packstream that
       records the same object twice when it is used as delta base; the
       code used to declare a software bug when encountering such an
       input, but it is an input error.
     * The code to compute the commit-graph has been taught to use a more
       robust way to tell if two object directories refer to the same
       (merge a7df60cac8 tb/commit-graph-object-dir later to maint).
     * "git remote rename X Y" needs to adjust configuration variables
       (e.g. branch.<name>.remote) whose value used to be X to Y.
       branch.<name>.pushRemote is now also updated.
     * Update to doc-diff.
     * Doc markup fix.
     * "git check-ignore" did not work when the given path is explicitly
       marked as not ignored with a negative entry in the .gitignore file.
     * The merge-recursive machinery failed to refresh the cache entry for
       a merge result in a couple of places, resulting in an unnecessary
       merge failure, which has been fixed.
     * Fix for a bug revealed by a recent change to make the protocol v2
       the default.
     * In rare cases "git worktree add <path>" could think that <path>
       was already a registered worktree even when it wasn't and refuse
       to add the new worktree. This has been corrected.
       (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).
     * "git push" should stop from updating a branch that is checked out
       when receive.denyCurrentBranch configuration is set, but it failed
       to pay attention to checkouts in secondary worktrees.  This has
       been corrected.
       (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).
     * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
       checked it out, even when the BRANCH is checked out in a different
       worktree.  This has been corrected.
       (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).
     * "git describe" in a repository with multiple root commits sometimes
       gave up looking for the best tag to describe a given commit with
       too early, which has been adjusted.
     * "git merge signed-tag" while lacking the public key started to say
       "No signature", which was utterly wrong.  This regression has been
     * MinGW's poll() emulation has been improved.
     * "git show" and others gave an object name in raw format in its
       error output, which has been corrected to give it in hex.
     * "git fetch" over HTTP walker protocol did not show any progress
       output.  We inherently do not know how much work remains, but still
       we can show something not to bore users.
       (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).
     * Both "git ls-remote -h" and "git grep -h" give short usage help,
       like any other Git subcommand, but it is not unreasonable to expect
       that the former would behave the same as "git ls-remote --head"
       (there is no other sensible behaviour for the latter).  The
       documentation has been updated in an attempt to clarify this.
     * Other code cleanup, docfix, build fix, etc.
       (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
       (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
       (merge c513a958b6 ss/t6025-modernize later to maint).
       (merge b441717256 dl/test-must-fail-fixes later to maint).
       (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
       (merge 145136a95a jc/skip-prefix later to maint).
       (merge 5290d45134 jk/alloc-cleanups later to maint).
       (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
       (merge 517b60564e rs/strbuf-insertstr later to maint).
       (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
       (merge de26f02db1 js/test-avoid-pipe later to maint).
       (merge a2dc43414c es/doc-mentoring later to maint).
       (merge 02bbbe9df9 es/worktree-cleanup later to maint).
       (merge 2ce6d075fa rs/micro-cleanups later to maint).
       (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
       (merge 3c29e21eb0 ma/test-cleanup later to maint).
       (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
       (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
       (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
       (merge fd0bc17557 kk/complete-diff-color-moved later to maint).
       (merge 65bf820d0e en/test-cleanup later to maint).
  • Git v2.26.0 released

    Version 2.26.0 of the Git source-code management system is out. Significant changes include a reimplementation of the "rebase" mechanism, improvements to sparse checkouts, performance improvements, and more.

  • Git 2.26 Released With Transport Protocol V2 Default, Continued Work Towards SHA256 Hashes

    Git 2.26 is out as the newest feature release for this distributed revision control system.

Git 2.26 fetches faster by default

  • Git 2.26 fetches faster by default

    With the recent release of Git 2.26, the open source distributed version control system uses version 2 of Git’s network fetch protocol by default.

    This protocol, introduced in 2018, addresses a problem with the old protocol, whereby a server would immediately list all of the branches, tags, and other references in the repository before the client could send anything. Use of the old protocol could mean sending megabytes of extra data for some repositories, even when the client only wanted to know about the master branch.


    New config options, including the ability to use wildcards when matching credential URLs. Git config options can be set for all connections or only connections to specific URLs.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

More in Tux Machines

today's leftovers

  • Avita Essential: Perfect Laptop for School and College Students at Rs. 17,990

    Starting with the basics, this is a thin and light notebook. The processor inside powering Avita Essential is the Intel Celeron N4000 which is not a powerful processor for windows but perfect for Ubuntu or ChromeOS. There is 4GB of LPDDR4 inside which again is not good enough for Windows but perfect for Ubuntu and ChromeOS. For storage Avita Essential has 128GB SSD. Fast storage means faster boot time but again we would highly recommend using Ubuntu or ChromeOS on this machine.

  • Buttered-Up Fedora | LINUX Unplugged 377

    Fedora 33 is a bold release, and we’ve put it through the wringer. We tell you what’s great, and what you should know before diving in. Plus our thoughts on the bigger problem exposed by the youtube-dl takedown.

  • mintCast 346.5 – The Midori Story – mintCast

    In our Innards section, we talk lesser known browsers And finally, the feedback and a couple of suggestions

  • AMDGPU Linux Driver To Finally Enable BACO For Hawaii - Allowing S4/Hibernation - Phoronix

    The Radeon R9 290 "Hawaii" series are about seven years old almost to the day and the AMD Linux open-source driver crew is seemingly celebrating by finally adding the few lines of code needed to enable BACO power management. [...] The patch posted on Tuesday amounts to just a few lines of code for wiring up Hawaii to the AMDGPU driver's BACO support. It's just a few lines of code now but it's only been more recently that AMDGPU began squaring away its BACO support. Thus back in the early days of Hawaii it wasn't as trivial to provide this support albeit for end-users still a pity it took so long for allowing these GPUs to support S4/hibernation.

  • Noah Meyerhans | Debian STS: Short Term Support

    In another of my frequent late-night bouts with insomnia, I started thinking about the intersection of a number of different issues facing Debian today, both from a user point of view and a developer point of view. Debian has a reputation for shipping “stale” software. Versions in the stable branch are often significantly behind the latest development upstream. Debian’s policy here has been that this is fine, our goal is to ship something stable, not something bleeding edge. Unofficially, our response to users is: If you need bleeding edge software, Debian may not be for you. Officially, we have no response to users who want fresher software. Debian also has a problem with a lack of manpower. I believe that part of why we have a hard time attracting contributors is our reputation for stale software. It might be worth it for us to consider changes to our approach to releases.

  • Getting Real About the License Complexity of Linux [Ed: Proprietary software licensing is not complex? Ask BSA.]

    Talk about complex and tedious, but necessary. Identifying all copyright holders, licenses and license obligations within Linux is just that. Added to the already complex maze that is Linux is the fact that the accuracy of licensing information is tied to the specific version of the Linux Kernel you’re using, and older versions will have more issues than newer. Files may contain erroneous license data and subsequently make its way into your software inventory and Bill of Materials.

  • Impact of OSS and OSH – a stakeholder survey

    With this survey, the study coordinators are interested in complementing the literature, database and case study driven approach to assess impact of OSS and OSH with input from the respondents of the stakeholder survey. All together, this body of evidence will be used to derive policy recommendations.

  • How Hall County is handling influx of absentee voting, effects of ransomware attack on elections office

    One of the databases the county uses to verify voter signatures on absentee ballots is not working after some county network outages due to a ransomware attack on Oct. 7. Registration Coordinator Kay Wimpye with the county elections office said employees can still verify voter signatures by manually pulling hard copies of voter registration cards, which is more time-consuming. Most voter signatures can be verified using a state database that has been unaffected by the outages, she said.

  • Vastaamo board fires CEO, says he kept data breach secret for year and a half

    On Monday the board said that an internal probe had determined that a second breach had occurred in March 2019. It appears that at that point Tapio was aware of the breaches and of shortcomings in the psychotherapy provider’s data security systems.

IBM/Red Hat Leftovers

  • Secure your Kubernetes secrets with smart cards and libssh

    In computer security, software implementations of cryptographic algorithms are vulnerable to side-channel attacks. This type of attack seeks to glean information from the computer system rather than from the program that it is running. As examples, Spectre and Meltdown are both side-channel attacks that target the microarchitecture of modern processors. Microarchitecture attacks are only a subset of all side-channel attacks. There are many others. An attacker who is able to access unauthorized regions in memory can discover private or sensitive information, including authentication secrets. A question that naturally follows is, “Where can I safely store my secrets?” One way to protect your Kubernetes or Red Hat OpenShift secrets is to store them in a hardware token. A hardware token physically separates your secret key from the host machine and the applications that it is running. You can use secret keys stored on smart cards or cryptographic tokens to authenticate to server-side applications. This article introduces Public Key Cryptography Standard #11 (PKCS #11), which you can use to uniquely identify objects stored in tokens. I show you how to build and use libssh with support for PKCS #11 and how to use curl to store and retrieve tokens through the secure shell (SSH) protocol.

  • IBM Advance Toolchain for Linux on Power 14.0-1 released!

    A new update release for the 14.0 series of the IBM® Advance Toolchain for Linux on Power is now available.

  • China Mobile Communications Corporation Internet, China National Offshore Oil Corporation and GREE Group Named Winners of the Red Hat APAC Innovation Awards 2020 for China

    Red Hat, Inc., the world's leading provider of open source solutions, today announced the winners of the Red Hat APAC Innovation Awards 2020 for China. China Mobile Communications Corporation Internet, China National Offshore Oil Corporation and GREE Group were honored at the Red Hat Forum China 2020 today for their exceptional and innovative use of Red Hat solutions.

Programming Leftovers

  • PyTorch 1.7.0 Now Available - Exxact

    PyTorch is a widely used, open source deep learning platform used for easily writing neural network layers in Python enabling a seamless workflow from research to production. Based on Torch, PyTorch has become a powerful machine learning framework favored by esteemed researchers around the world. The newest stable release of PyTorch, version 1.7.0, has a number of new highlights including  CUDA 11, New APIs for FFTs, Windows support for Distributed training and more.

  • Stefan Scherfke: Raise … from … in Python
  • PyCoder’s Weekly: Issue #444 (Oct. 27, 2020)
  • Program in Arm6 assembly language on a Raspberry Pi |

    Assembly language offers special insights into how machines work and how they can be programmed.

  • How JavaScript became a serious programming language

    JavaScript's humble start began in 1995, when it was created in just 10 days by Brendan Eich, then an employee with Netscape Communications Corporation. JavaScript has come a long way since then, from a tool to make websites pretty to a serious programming language. In its early days, JavaScript was considered a visual tool that made websites a little more fun and attractive. Languages like Jakarta Server Pages (JSP; formerly JavaServer Pages) used to do all the heavy lifting on rendered web pages, and JavaScript was used to create basic interactions, visual enhancements, and animations. For a long time, the demarcations between HTML, CSS, and JavaScript were not clear. Frontend development primarily consists of HTML, CSS, and JavaScript, forming a "layer cake" of standard web technologies.

Making Linux More Like Windows

  • Collabora's Work On Extending The Linux Kernel To Better Support Windows Gaming - Phoronix

    Windows gaming on Linux got some love this week at the Linux Foundation's Open-Source Summit Europe virtual event. In particular, a recap of the work that's been done so far on extending the Linux kernel to better support Wine / Steam Play based support for Windows games running on Linux.  Gabriel Krisman Bertazi as an engineer for consulting firm Collabora talked about their work in recent years on improving the Linux kernel for supporting Valve's needs around running Windows games on Linux with Steam Play. Collabora has been one of Valve's partners for this effort along with CodeWeavers and Valve employing various developers on improving the Linux graphics stack, etc. 

  • Collabora expect their Linux Kernel work for Windows game emulation in Kernel 5.11

    Collabora have been doing presentations during the Open Source Summit, with one particular talk from Gabriel Krisman Bertazi on the "State of Linux Gaming" being quite interesting. While there has been a lot of progress with the Windows compatibility layers Wine and Valve's fork Proton (part of Steam Play), there's still plenty of areas currently lacking and needing work. Collabora is one company extending the Linux Kernel to improve Linux gaming with these compatibility layers, thanks to Valve sponsoring the work. One of the big missing pieces of the pie is supporting the likes of anti-cheat and DRM, with anti-cheat especially causing all sorts of problems entirely breaking lots of Windows games in Wine and Proton. The State of Linux Gaming talk was mostly going over what anyone following would already know, as the event isn't aimed at your typical Linux gaming enthusiast. However, it was still an interesting talk to follow. Thanks to The Linux Foundation, I was able to attend and listen to the talk (the online event requires a ticket purchase) but I've been told by my Collabora contact that they will all eventually be up on their own YouTube Channel which could be as soon as early next week for anyone to be able to view. If you want a brief overview, you can find the slides here from the event schedule. One of the key points that Gabriel Krisman Bertazi went over is their work on system call emulation, which is now required because DRM and anti-cheat tech "are issuing system calls directly from the Windows game code and that bypasses Wine because Wine is not a sandbox" and Wine currently cannot capture those system calls needed which ends up causing games to crash.