Git 2.7 released with numerous updates

Git 2.7 recently released, is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.

git ubuntu

Git 2.7 changelog

UI, Workflows & Features

  • The appearance of “gitk”, particularly on high DPI monitors, have been improved. “gitk” also comes with an undated translation for Swedish and Japanese.
  • “git remote” learned “get-url” subcommand to show the URL for a given remote name used for fetching and pushing.
  • There was no way to defeat a configured rebase.autostash variable from the command line, as “git rebase –no-autostash” was missing.
  • “git log –date=local” used to only show the normal (default) format in the local timezone. The command learned to take ‘local’ as an instruction to use the local timezone with other formats,
  • The refs used during a “git bisect” session is now per-worktree so that independent bisect sessions can be done in different worktrees created with “git worktree add”.
  • Users who are too busy to type three extra keystrokes to ask for “git stash show -p” can now set stash.showPatch configuration variable to true to always see the actual patch, not just the list of paths affected with feel for the extent of damage via diffstat.
  • “quiltimport” allows to specify the series file by honoring the $QUILT_SERIES environment and also –series command line option.
  • The use of ‘good/bad’ in “git bisect” made it confusing to use when hunting for a state change that is not a regression (e.g. bugfix). The command learned ‘old/new’ and then allows the end user to say e.g. “bisect start –term-old=fast –term-new=slow” to find a performance regression.
  • “git interpret-trailers” can now run outside of a Git repository.
  • “git p4” learned to reencode the pathname it uses to communicate with the p4 depot with a new option.
  • Give progress meter to “git filter-branch”.
  • Allow a later “!/abc/def” to override an earlier “/abc” that appears in the same .gitignore file to make it easier to express “everything in /abc directory is ignored, except for …”.
  • Teach “git p4” to send large blobs outside the repository by talking to Git LFS.
  • Prepare for Git on-disk repository representation to undergo backward incompatible changes by introducing a new repository format version “1”, with an extension mechanism.
  • “git worktree” learned a “list” subcommand.
  • “git clone –dissociate” learned that it can be used even when “–reference” was not used at the same time.
  • “git blame” learnt to take “–first-parent” and “–reverse” at the same time when it makes sense.
  • “git checkout” did not follow the usual “–[no-]progress” convention and implemented only “–quiet” that is essentially a superset of “–no-progress”. Extend the command to support the usual “–[no-]progress”.
  • The semantics of transfer.hideRefs configuration variable have been extended to work better with the ref “namespace” feature that lets you throw unrelated bunches of repositories in a single physical repository and virtually serve them as separate ones.
  • send-email config variables whose values are pathnames now go through the ~username/ expansion.
  • bash completion learnt to TAB-complete recipient addresses given to send-email.
  • The credential-cache daemon can be told to ignore SIGHUP to work around issue when running Git from inside emacs.
  • “git push” learned new configuration for doing “–recurse-submodules” on each push.
  • “format-patch” has learned a new option to zero-out the commit object name on the mbox “From ” line.

Performance, Internal Implementation, Development Support etc.

  • The infrastructure to rewrite “git submodule” in C is being built incrementally. Let’s polish these early parts well enough and make them graduate to ‘next’ and ‘master’, so that the more involved follow-up can start cooking on a solid ground.
  • Some features from “git tag -l” and “git branch -l” have been made available to “git for-each-ref” so that eventually the unified implementation can be shared across all three. The version merged to the ‘master’ branch earlier had a performance regression in “tag –contains”, which has since been corrected.
  • Because “test_when_finished” in our test framework queues the clean-up tasks to be done in a shell variable, it should not be used inside a subshell. Add a mechanism to allow ‘bash’ to catch such uses, and fix the ones that were found.
  • The debugging infrastructure for pkt-line based communication has been improved to mark the side-band communication specifically.
  • Update “git branch” that list existing branches, using the ref-filter API that is shared with “git tag” and “git for-each-ref”.
  • The test for various line-ending conversions has been enhanced.
  • A few test scripts around “git p4” have been improved for portability.
  • Many allocations that is manually counted (correctly) that are followed by strcpy/sprintf have been replaced with a less error prone constructs such as xstrfmt.
  • The internal stripspace() function has been moved to where it logically belongs to, i.e. strbuf API, and the command line parser of “git stripspace” has been updated to use the parse_options API.
  • “git am” used to spawn “git mailinfo” via run_command() API once per each patch, but learned to make a direct call to mailinfo() instead.
  • The implementation of “git mailinfo” was refactored so that a mailinfo() function can be directly called from inside a process.
  • With a “debug” helper, debugging of a single “git” invocation in our test scripts has become a lot easier.
  • The “configure” script did not test for -lpthread correctly, which upset some linkers.
  • Cross completed task off of subtree project’s todo list.
  • Test cleanups for the subtree project.
  • Clean up style in an ancient test t9300.
  • Work around some test flakiness with p4d.
  • Fsck did not correctly detect a NUL-truncated header in a tag.
  • Use a safer behavior when we hit errors verifying remote certificates.
  • Speed up filter-branch for cases where we only care about rewriting commits, not tree data.
  • The parse-options API has been updated to make “-h” command line option work more consistently in all commands.
  • “git svn rebase/mkdirs” got optimized by keeping track of empty directories better.
  • Fix some racy client/server tests by treating SIGPIPE the same as a normal non-zero exit.
  • The necessary infrastructure to build topics using the free Travis CI has been added. Developers forking from this topic (and enabling Travis) can do their own builds, and we can turn on auto-builds for git/git (including build-status for pull requests that people open).
  • The write(2) emulation for Windows learned to set errno to EPIPE when necessary.
  • Also contains various documentation updates and code clean-ups.

Install GIT 2.7 on Ubuntu Linux OS

sudo apt-add-repository ppa:pdoes/ppa

sudo apt-get update

sudo apt-get install git
comments powered by Disqus