Compare commits
27 Commits
Author | SHA1 | Date | |
---|---|---|---|
9fb2a1fb08 | |||
fb049fd85b | |||
6eed462c8f | |||
9b77cec89b | |||
6b82d3eea6 | |||
22539ec3b5 | |||
0d58fef58a | |||
684dd4c2b4 | |||
76b54ee9b9 | |||
ba6f0905fd | |||
df5be6dc3f | |||
1a3609e402 | |||
e7fab62b73 | |||
c44088ecc4 | |||
fe29a9b7b0 | |||
a2b26ffb1a | |||
8ba8ed568e | |||
24036686c4 | |||
73aafe9bc2 | |||
a88dbd2f8c | |||
a5979d7009 | |||
21a3e5016b | |||
c42c0f1297 | |||
07259e74ec | |||
c716fe4bd9 | |||
17f1c0b8c7 | |||
9a6bbee800 |
15
.cirrus.yml
15
.cirrus.yml
@ -1,15 +0,0 @@
|
||||
env:
|
||||
CIRRUS_CLONE_DEPTH: 1
|
||||
|
||||
freebsd_12_task:
|
||||
freebsd_instance:
|
||||
image: freebsd-12-1-release-amd64
|
||||
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 test'
|
@ -6,8 +6,6 @@
|
||||
|
||||
# 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
|
||||
@ -148,21 +146,8 @@ SpacesInSquareBrackets: false
|
||||
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 \([^[:space:]]*for_each[^[:space:]]*\)(.*$, - '\1'," \
|
||||
# | sort | uniq
|
||||
ForEachMacros:
|
||||
- 'for_each_abbrev'
|
||||
- 'for_each_builtin'
|
||||
- 'for_each_string_list_item'
|
||||
- 'for_each_ut'
|
||||
- 'for_each_wanted_builtin'
|
||||
- 'list_for_each'
|
||||
- 'list_for_each_dir'
|
||||
- 'list_for_each_prev'
|
||||
- 'list_for_each_prev_safe'
|
||||
- 'list_for_each_safe'
|
||||
# function calls.
|
||||
ForEachMacros: ['for_each_string_list_item']
|
||||
|
||||
# The maximum number of consecutive empty lines to keep.
|
||||
MaxEmptyLinesToKeep: 1
|
||||
|
@ -1,16 +0,0 @@
|
||||
[*]
|
||||
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}]
|
||||
indent_style = tab
|
||||
tab_width = 8
|
||||
|
||||
[*.py]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[COMMIT_EDITMSG]
|
||||
max_line_length = 72
|
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -5,12 +5,10 @@
|
||||
*.pl eof=lf diff=perl
|
||||
*.pm eol=lf diff=perl
|
||||
*.py eol=lf diff=python
|
||||
*.bat eol=crlf
|
||||
/Documentation/**/*.txt eol=lf
|
||||
/Documentation/git-*.txt eol=lf
|
||||
/command-list.txt eol=lf
|
||||
/GIT-VERSION-GEN eol=lf
|
||||
/mergetools/* eol=lf
|
||||
/t/oid-info/* 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
|
||||
|
2
.github/CONTRIBUTING.md
vendored
2
.github/CONTRIBUTING.md
vendored
@ -5,7 +5,7 @@ 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
|
||||
Nevertheless, you can use [submitGit](http://submitgit.herokuapp.com/) 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)
|
||||
|
4
.github/PULL_REQUEST_TEMPLATE.md
vendored
4
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,7 +1,7 @@
|
||||
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.
|
||||
bug reports. Nevertheless, you can use submitGit to conveniently send your Pull
|
||||
Requests commits to our mailing list.
|
||||
|
||||
Please read the "guidelines for contributing" linked above!
|
||||
|
31
.gitignore
vendored
31
.gitignore
vendored
@ -1,7 +1,3 @@
|
||||
/fuzz-commit-graph
|
||||
/fuzz_corpora
|
||||
/fuzz-pack-headers
|
||||
/fuzz-pack-idx
|
||||
/GIT-BUILD-OPTIONS
|
||||
/GIT-CFLAGS
|
||||
/GIT-LDFLAGS
|
||||
@ -58,7 +54,6 @@
|
||||
/git-difftool
|
||||
/git-difftool--helper
|
||||
/git-describe
|
||||
/git-env--helper
|
||||
/git-fast-export
|
||||
/git-fast-import
|
||||
/git-fetch
|
||||
@ -83,7 +78,6 @@
|
||||
/git-init-db
|
||||
/git-interpret-trailers
|
||||
/git-instaweb
|
||||
/git-legacy-stash
|
||||
/git-log
|
||||
/git-ls-files
|
||||
/git-ls-remote
|
||||
@ -105,9 +99,8 @@
|
||||
/git-mergetool--lib
|
||||
/git-mktag
|
||||
/git-mktree
|
||||
/git-multi-pack-index
|
||||
/git-mv
|
||||
/git-name-rev
|
||||
/git-mv
|
||||
/git-notes
|
||||
/git-p4
|
||||
/git-pack-redundant
|
||||
@ -123,6 +116,10 @@
|
||||
/git-range-diff
|
||||
/git-read-tree
|
||||
/git-rebase
|
||||
/git-rebase--am
|
||||
/git-rebase--helper
|
||||
/git-rebase--interactive
|
||||
/git-rebase--merge
|
||||
/git-rebase--preserve-merges
|
||||
/git-receive-pack
|
||||
/git-reflog
|
||||
@ -133,6 +130,7 @@
|
||||
/git-remote-ftps
|
||||
/git-remote-fd
|
||||
/git-remote-ext
|
||||
/git-remote-testgit
|
||||
/git-remote-testpy
|
||||
/git-remote-testsvn
|
||||
/git-repack
|
||||
@ -140,7 +138,6 @@
|
||||
/git-request-pull
|
||||
/git-rerere
|
||||
/git-reset
|
||||
/git-restore
|
||||
/git-rev-list
|
||||
/git-rev-parse
|
||||
/git-revert
|
||||
@ -158,7 +155,6 @@
|
||||
/git-show-branch
|
||||
/git-show-index
|
||||
/git-show-ref
|
||||
/git-sparse-checkout
|
||||
/git-stage
|
||||
/git-stash
|
||||
/git-status
|
||||
@ -166,7 +162,6 @@
|
||||
/git-submodule
|
||||
/git-submodule--helper
|
||||
/git-svn
|
||||
/git-switch
|
||||
/git-symbolic-ref
|
||||
/git-tag
|
||||
/git-unpack-file
|
||||
@ -217,7 +212,6 @@
|
||||
/tags
|
||||
/TAGS
|
||||
/cscope*
|
||||
*.hcc
|
||||
*.obj
|
||||
*.lib
|
||||
*.res
|
||||
@ -228,14 +222,5 @@
|
||||
*.user
|
||||
*.idb
|
||||
*.pdb
|
||||
*.ilk
|
||||
*.iobj
|
||||
*.ipdb
|
||||
*.dll
|
||||
.vs/
|
||||
Debug/
|
||||
Release/
|
||||
/UpgradeLog*.htm
|
||||
/git.VC.VC.opendb
|
||||
/git.VC.db
|
||||
*.dSYM
|
||||
/Debug/
|
||||
/Release/
|
||||
|
22
.mailmap
22
.mailmap
@ -18,17 +18,13 @@ 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>
|
||||
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>
|
||||
Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com>
|
||||
@ -36,13 +32,10 @@ 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>
|
||||
@ -58,10 +51,7 @@ 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 <dstolee@microsoft.com> <stolee@gmail.com>
|
||||
Derrick Stolee <dstolee@microsoft.com> Derrick Stolee via GitGitGadget <gitgitgadget@gmail.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>
|
||||
Eric Blake <eblake@redhat.com> <ebb9@byu.net>
|
||||
Eric Hanchrow <eric.hanchrow@gmail.com> <offby1@blarg.net>
|
||||
@ -108,9 +98,7 @@ 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>
|
||||
@ -162,7 +150,6 @@ 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>
|
||||
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>
|
||||
@ -170,7 +157,6 @@ 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@grubix.eu> <michaeljgruber+gmane@fastmail.fm>
|
||||
Michael J Gruber <git@grubix.eu> <git@drmicha.warpmail.net>
|
||||
@ -194,11 +180,7 @@ 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>
|
||||
@ -214,12 +196,10 @@ 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 Jones <ramsay@ramsayjones.plus.com> <ramsay@ramsay1.demon.co.uk>
|
||||
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>
|
||||
@ -258,7 +238,6 @@ 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>
|
||||
@ -289,7 +268,6 @@ 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>
|
||||
|
35
.travis.yml
35
.travis.yml
@ -8,23 +8,37 @@ os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
osx_image: xcode10.1
|
||||
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- language-pack-is
|
||||
- git-svn
|
||||
- apache2
|
||||
- gcc-8
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- env: jobname=GIT_TEST_GETTEXT_POISON
|
||||
- env: jobname=GETTEXT_POISON
|
||||
os: linux
|
||||
compiler:
|
||||
addons:
|
||||
before_install:
|
||||
- env: jobname=linux-gcc-4.8
|
||||
- env: jobname=Windows
|
||||
os: linux
|
||||
dist: trusty
|
||||
compiler:
|
||||
addons:
|
||||
before_install:
|
||||
script:
|
||||
- >
|
||||
test "$TRAVIS_REPO_SLUG" != "git/git" ||
|
||||
ci/run-windows-build.sh $TRAVIS_BRANCH $(git rev-parse HEAD)
|
||||
after_failure:
|
||||
- env: jobname=Linux32
|
||||
os: linux
|
||||
compiler:
|
||||
@ -36,11 +50,22 @@ matrix:
|
||||
- env: jobname=StaticAnalysis
|
||||
os: linux
|
||||
compiler:
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- coccinelle
|
||||
before_install:
|
||||
script: ci/run-static-analysis.sh
|
||||
after_failure:
|
||||
- env: jobname=Documentation
|
||||
os: linux
|
||||
compiler:
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- asciidoc
|
||||
- xmlto
|
||||
before_install:
|
||||
script: ci/test-documentation.sh
|
||||
after_failure:
|
||||
|
||||
|
@ -1,93 +0,0 @@
|
||||
# Git Code of Conduct
|
||||
|
||||
This code of conduct outlines our expectations for participants within
|
||||
the Git 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
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to make participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age,
|
||||
body size, disability, ethnicity, sex characteristics, gender identity and
|
||||
expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers 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, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all project spaces, and it also applies
|
||||
when an individual is representing the project or its community in public
|
||||
spaces. Examples of representing a project or community include using an
|
||||
official project e-mail address, posting via an official social media account,
|
||||
or acting as an appointed representative at an online or offline event.
|
||||
Representation of a project may be further defined and clarified by project
|
||||
maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at git@sfconservancy.org. All
|
||||
complaints will be reviewed and investigated and will result in a response
|
||||
that is deemed necessary and appropriate to the circumstances. The project
|
||||
team is obligated to maintain confidentiality with regard to the reporter of
|
||||
an incident. Further details of specific enforcement policies may be posted
|
||||
separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
The project leadership team can be contacted by email as a whole at
|
||||
git@sfconservancy.org, or individually:
|
||||
|
||||
- Ævar Arnfjörð Bjarmason <avarab@gmail.com>
|
||||
- Christian Couder <christian.couder@gmail.com>
|
||||
- Jeff King <peff@peff.net>
|
||||
- Junio C Hamano <gitster@pobox.com>
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
2
Documentation/.gitignore
vendored
2
Documentation/.gitignore
vendored
@ -13,5 +13,3 @@ mergetools-*.txt
|
||||
manpage-base-url.xsl
|
||||
SubmittingPatches.txt
|
||||
tmp-doc-diff/
|
||||
GIT-ASCIIDOCFLAGS
|
||||
/GIT-EXCLUDED-PROGRAMS
|
||||
|
@ -75,7 +75,7 @@ For shell scripts specifically (not exhaustive):
|
||||
|
||||
- If you want to find out if a command is available on the user's
|
||||
$PATH, you should use 'type <command>', instead of 'which <command>'.
|
||||
The output of 'which' is not machine parsable and its exit code
|
||||
The output of 'which' is not machine parseable and its exit code
|
||||
is not reliable across platforms.
|
||||
|
||||
- We use POSIX compliant parameter substitutions and avoid bashisms;
|
||||
@ -118,24 +118,6 @@ For shell scripts specifically (not exhaustive):
|
||||
do this
|
||||
fi
|
||||
|
||||
- If a command sequence joined with && or || or | spans multiple
|
||||
lines, put each command on a separate line and put && and || and |
|
||||
operators at the end of each line, rather than the start. This
|
||||
means you don't need to use \ to join lines, since the above
|
||||
operators imply the sequence isn't finished.
|
||||
|
||||
(incorrect)
|
||||
grep blob verify_pack_result \
|
||||
| awk -f print_1.awk \
|
||||
| sort >actual &&
|
||||
...
|
||||
|
||||
(correct)
|
||||
grep blob verify_pack_result |
|
||||
awk -f print_1.awk |
|
||||
sort >actual &&
|
||||
...
|
||||
|
||||
- We prefer "test" over "[ ... ]".
|
||||
|
||||
- We do not write the noiseword "function" in front of shell
|
||||
@ -195,30 +177,10 @@ For C programs:
|
||||
by e.g. "echo DEVELOPER=1 >>config.mak".
|
||||
|
||||
- We try to support a wide range of C compilers to compile Git with,
|
||||
including old ones. You should not use features from newer C
|
||||
standard, even if your compiler groks them.
|
||||
including old ones. That means that you should not use C99
|
||||
initializers, even if a lot of compilers grok it.
|
||||
|
||||
There are a few exceptions to this guideline:
|
||||
|
||||
. since early 2012 with e1327023ea, we have been using an enum
|
||||
definition whose last element is followed by a comma. This, like
|
||||
an array initializer that ends with a trailing comma, can be used
|
||||
to reduce the patch noise when adding a new identifier at the end.
|
||||
|
||||
. since mid 2017 with cbc0f81d, we have been using designated
|
||||
initializers for struct (e.g. "struct t v = { .val = 'a' };").
|
||||
|
||||
. since mid 2017 with 512f41cf, we have been using designated
|
||||
initializers for array (e.g. "int array[10] = { [5] = 2 }").
|
||||
|
||||
These used to be forbidden, but we have not heard any breakage
|
||||
report, and they are assumed to be safe.
|
||||
|
||||
- Variables have to be declared at the beginning of the block, before
|
||||
the first statement (i.e. -Wdeclaration-after-statement).
|
||||
|
||||
- Declaring a variable in the for loop "for (int i = 0; i < 10; i++)"
|
||||
is still not allowed in this codebase.
|
||||
- Variables have to be declared at the beginning of the block.
|
||||
|
||||
- NULL pointers shall be written as NULL, not as 0.
|
||||
|
||||
@ -432,12 +394,6 @@ For C programs:
|
||||
must be declared with "extern" in header files. However, function
|
||||
declarations should not use "extern", as that is already the default.
|
||||
|
||||
- You can launch gdb around your program using the shorthand GIT_DEBUGGER.
|
||||
Run `GIT_DEBUGGER=1 ./bin-wrappers/git foo` to simply use gdb as is, or
|
||||
run `GIT_DEBUGGER="<debugger> <debugger-args>" ./bin-wrappers/git foo` to
|
||||
use your own debugger and arguments. Example: `GIT_DEBUGGER="ddd --gdb"
|
||||
./bin-wrappers/git log` (See `wrap-for-bin.sh`.)
|
||||
|
||||
For Perl programs:
|
||||
|
||||
- Most of the C guidelines above apply.
|
||||
@ -606,14 +562,11 @@ Writing Documentation:
|
||||
or commands:
|
||||
|
||||
Literal examples (e.g. use of command-line options, command names,
|
||||
branch names, URLs, pathnames (files and directories), configuration and
|
||||
environment variables) must be typeset in monospace (i.e. wrapped with
|
||||
backticks):
|
||||
branch names, configuration and environment variables) must be
|
||||
typeset in monospace (i.e. wrapped with backticks):
|
||||
`--pretty=oneline`
|
||||
`git rev-list`
|
||||
`remote.pushDefault`
|
||||
`http://git.example.com`
|
||||
`.git/config`
|
||||
`GIT_DIR`
|
||||
`HEAD`
|
||||
|
||||
|
@ -7,14 +7,12 @@ ARTICLES =
|
||||
SP_ARTICLES =
|
||||
OBSOLETE_HTML =
|
||||
|
||||
-include GIT-EXCLUDED-PROGRAMS
|
||||
|
||||
MAN1_TXT += $(filter-out \
|
||||
$(patsubst %,%.txt,$(EXCLUDED_PROGRAMS)) \
|
||||
$(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \
|
||||
$(wildcard git-*.txt))
|
||||
MAN1_TXT += git.txt
|
||||
MAN1_TXT += gitk.txt
|
||||
MAN1_TXT += gitremote-helpers.txt
|
||||
MAN1_TXT += gitweb.txt
|
||||
|
||||
MAN5_TXT += gitattributes.txt
|
||||
@ -32,26 +30,20 @@ MAN7_TXT += gitdiffcore.txt
|
||||
MAN7_TXT += giteveryday.txt
|
||||
MAN7_TXT += gitglossary.txt
|
||||
MAN7_TXT += gitnamespaces.txt
|
||||
MAN7_TXT += gitremote-helpers.txt
|
||||
MAN7_TXT += gitrevisions.txt
|
||||
MAN7_TXT += gitsubmodules.txt
|
||||
MAN7_TXT += gittutorial-2.txt
|
||||
MAN7_TXT += gittutorial.txt
|
||||
MAN7_TXT += gitworkflows.txt
|
||||
|
||||
ifdef MAN_FILTER
|
||||
MAN_TXT = $(filter $(MAN_FILTER),$(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT))
|
||||
else
|
||||
MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT)
|
||||
MAN_FILTER = $(MAN_TXT)
|
||||
endif
|
||||
|
||||
MAN_XML = $(patsubst %.txt,%.xml,$(MAN_TXT))
|
||||
MAN_HTML = $(patsubst %.txt,%.html,$(MAN_TXT))
|
||||
GIT_MAN_REF = master
|
||||
|
||||
OBSOLETE_HTML += everyday.html
|
||||
OBSOLETE_HTML += git-remote-helpers.html
|
||||
DOC_HTML = $(MAN_HTML) $(OBSOLETE_HTML)
|
||||
|
||||
ARTICLES += howto-index
|
||||
ARTICLES += git-tools
|
||||
@ -76,14 +68,11 @@ SP_ARTICLES += howto/maintain-git
|
||||
API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technical/api-index.txt, $(wildcard technical/api-*.txt)))
|
||||
SP_ARTICLES += $(API_DOCS)
|
||||
|
||||
TECH_DOCS += MyFirstContribution
|
||||
TECH_DOCS += MyFirstObjectWalk
|
||||
TECH_DOCS += SubmittingPatches
|
||||
TECH_DOCS += technical/hash-function-transition
|
||||
TECH_DOCS += technical/http-protocol
|
||||
TECH_DOCS += technical/index-format
|
||||
TECH_DOCS += technical/long-running-process-protocol
|
||||
TECH_DOCS += technical/multi-pack-index
|
||||
TECH_DOCS += technical/pack-format
|
||||
TECH_DOCS += technical/pack-heuristics
|
||||
TECH_DOCS += technical/pack-protocol
|
||||
@ -99,13 +88,11 @@ TECH_DOCS += technical/trivial-merge
|
||||
SP_ARTICLES += $(TECH_DOCS)
|
||||
SP_ARTICLES += technical/api-index
|
||||
|
||||
ARTICLES_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES))
|
||||
HTML_FILTER ?= $(ARTICLES_HTML) $(OBSOLETE_HTML)
|
||||
DOC_HTML = $(MAN_HTML) $(filter $(HTML_FILTER),$(ARTICLES_HTML) $(OBSOLETE_HTML))
|
||||
DOC_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES))
|
||||
|
||||
DOC_MAN1 = $(patsubst %.txt,%.1,$(filter $(MAN_FILTER),$(MAN1_TXT)))
|
||||
DOC_MAN5 = $(patsubst %.txt,%.5,$(filter $(MAN_FILTER),$(MAN5_TXT)))
|
||||
DOC_MAN7 = $(patsubst %.txt,%.7,$(filter $(MAN_FILTER),$(MAN7_TXT)))
|
||||
DOC_MAN1 = $(patsubst %.txt,%.1,$(MAN1_TXT))
|
||||
DOC_MAN5 = $(patsubst %.txt,%.5,$(MAN5_TXT))
|
||||
DOC_MAN7 = $(patsubst %.txt,%.7,$(MAN7_TXT))
|
||||
|
||||
prefix ?= $(HOME)
|
||||
bindir ?= $(prefix)/bin
|
||||
@ -124,8 +111,7 @@ ASCIIDOC_HTML = xhtml11
|
||||
ASCIIDOC_DOCBOOK = docbook
|
||||
ASCIIDOC_CONF = -f asciidoc.conf
|
||||
ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
|
||||
-amanversion=$(GIT_VERSION) \
|
||||
-amanmanual='Git Manual' -amansource='Git'
|
||||
-agit_version=$(GIT_VERSION)
|
||||
TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
|
||||
TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
|
||||
MANPAGE_XSL = manpage-normal.xsl
|
||||
@ -199,13 +185,11 @@ ifdef USE_ASCIIDOCTOR
|
||||
ASCIIDOC = asciidoctor
|
||||
ASCIIDOC_CONF =
|
||||
ASCIIDOC_HTML = xhtml5
|
||||
ASCIIDOC_DOCBOOK = docbook5
|
||||
ASCIIDOC_DOCBOOK = docbook45
|
||||
ASCIIDOC_EXTRA += -acompat-mode -atabsize=8
|
||||
ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
|
||||
ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
|
||||
DBLATEX_COMMON =
|
||||
XMLTO_EXTRA += --skip-validation
|
||||
XMLTO_EXTRA += -x manpage.xsl
|
||||
endif
|
||||
|
||||
SHELL_PATH ?= $(SHELL)
|
||||
@ -301,7 +285,7 @@ docdep_prereqs = \
|
||||
mergetools-list.made $(mergetools_txt) \
|
||||
cmd-list.made $(cmds_txt)
|
||||
|
||||
doc.dep : $(docdep_prereqs) $(wildcard *.txt) $(wildcard config/*.txt) build-docdep.perl
|
||||
doc.dep : $(docdep_prereqs) $(wildcard *.txt) build-docdep.perl
|
||||
$(QUIET_GEN)$(RM) $@+ $@ && \
|
||||
$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
|
||||
mv $@+ $@
|
||||
@ -339,15 +323,6 @@ mergetools-list.made: ../git-mergetool--lib.sh $(wildcard ../mergetools/*)
|
||||
show_tool_names can_merge "* " || :' >mergetools-merge.txt && \
|
||||
date >$@
|
||||
|
||||
TRACK_ASCIIDOCFLAGS = $(subst ','\'',$(ASCIIDOC_COMMON):$(ASCIIDOC_HTML):$(ASCIIDOC_DOCBOOK))
|
||||
|
||||
GIT-ASCIIDOCFLAGS: FORCE
|
||||
@FLAGS='$(TRACK_ASCIIDOCFLAGS)'; \
|
||||
if test x"$$FLAGS" != x"`cat GIT-ASCIIDOCFLAGS 2>/dev/null`" ; then \
|
||||
echo >&2 " * new asciidoc flags"; \
|
||||
echo "$$FLAGS" >GIT-ASCIIDOCFLAGS; \
|
||||
fi
|
||||
|
||||
clean:
|
||||
$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
|
||||
$(RM) *.texi *.texi+ *.texi++ git.info gitman.info
|
||||
@ -357,14 +332,13 @@ clean:
|
||||
$(RM) SubmittingPatches.txt
|
||||
$(RM) $(cmds_txt) $(mergetools_txt) *.made
|
||||
$(RM) manpage-base-url.xsl
|
||||
$(RM) GIT-ASCIIDOCFLAGS
|
||||
|
||||
$(MAN_HTML): %.html : %.txt asciidoc.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
|
||||
$(MAN_HTML): %.html : %.txt asciidoc.conf
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
$(TXT_TO_HTML) -d manpage -o $@+ $< && \
|
||||
mv $@+ $@
|
||||
|
||||
$(OBSOLETE_HTML): %.html : %.txto asciidoc.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
|
||||
$(OBSOLETE_HTML): %.html : %.txto asciidoc.conf
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
$(TXT_TO_HTML) -o $@+ $< && \
|
||||
mv $@+ $@
|
||||
@ -372,16 +346,16 @@ $(OBSOLETE_HTML): %.html : %.txto asciidoc.conf asciidoctor-extensions.rb GIT-AS
|
||||
manpage-base-url.xsl: manpage-base-url.xsl.in
|
||||
$(QUIET_GEN)sed "s|@@MAN_BASE_URL@@|$(MAN_BASE_URL)|" $< > $@
|
||||
|
||||
%.1 %.5 %.7 : %.xml manpage-base-url.xsl $(wildcard manpage*.xsl)
|
||||
%.1 %.5 %.7 : %.xml manpage-base-url.xsl
|
||||
$(QUIET_XMLTO)$(RM) $@ && \
|
||||
$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<
|
||||
|
||||
%.xml : %.txt asciidoc.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
|
||||
%.xml : %.txt asciidoc.conf
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
$(TXT_TO_XML) -d manpage -o $@+ $< && \
|
||||
mv $@+ $@
|
||||
|
||||
user-manual.xml: user-manual.txt user-manual.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
|
||||
user-manual.xml: user-manual.txt user-manual.conf
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
$(TXT_TO_XML) -d book -o $@+ $< && \
|
||||
mv $@+ $@
|
||||
@ -391,8 +365,7 @@ technical/api-index.txt: technical/api-index-skel.txt \
|
||||
$(QUIET_GEN)cd technical && '$(SHELL_PATH_SQ)' ./api-index.sh
|
||||
|
||||
technical/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
|
||||
$(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : %.txt \
|
||||
asciidoc.conf GIT-ASCIIDOCFLAGS
|
||||
$(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : %.txt asciidoc.conf
|
||||
$(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt
|
||||
|
||||
SubmittingPatches.txt: SubmittingPatches
|
||||
@ -449,7 +422,7 @@ $(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt
|
||||
WEBDOC_DEST = /pub/software/scm/git/docs
|
||||
|
||||
howto/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
|
||||
$(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt GIT-ASCIIDOCFLAGS
|
||||
$(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
sed -e '1,/^$$/d' $< | \
|
||||
$(TXT_TO_HTML) - >$@+ && \
|
||||
@ -483,9 +456,4 @@ print-man1:
|
||||
lint-docs::
|
||||
$(QUIET_LINT)$(PERL_PATH) lint-gitlink.perl
|
||||
|
||||
ifeq ($(wildcard po/Makefile),po/Makefile)
|
||||
doc-l10n install-l10n::
|
||||
$(MAKE) -C po $@
|
||||
endif
|
||||
|
||||
.PHONY: FORCE
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,905 +0,0 @@
|
||||
= My First Object Walk
|
||||
|
||||
== What's an Object Walk?
|
||||
|
||||
The object walk is a key concept in Git - this is the process that underpins
|
||||
operations like object transfer and fsck. Beginning from a given commit, the
|
||||
list of objects is found by walking parent relationships between commits (commit
|
||||
X based on commit W) and containment relationships between objects (tree Y is
|
||||
contained within commit X, and blob Z is located within tree Y, giving our
|
||||
working tree for commit X something like `y/z.txt`).
|
||||
|
||||
A related concept is the revision walk, which is focused on commit objects and
|
||||
their parent relationships and does not delve into other object types. The
|
||||
revision walk is used for operations like `git log`.
|
||||
|
||||
=== Related Reading
|
||||
|
||||
- `Documentation/user-manual.txt` under "Hacking Git" contains some coverage of
|
||||
the revision walker in its various incarnations.
|
||||
- `revision.h`
|
||||
- https://eagain.net/articles/git-for-computer-scientists/[Git for Computer Scientists]
|
||||
gives a good overview of the types of objects in Git and what your object
|
||||
walk is really describing.
|
||||
|
||||
== Setting Up
|
||||
|
||||
Create a new branch from `master`.
|
||||
|
||||
----
|
||||
git checkout -b revwalk origin/master
|
||||
----
|
||||
|
||||
We'll put our fiddling into a new command. For fun, let's name it `git walken`.
|
||||
Open up a new file `builtin/walken.c` and set up the command handler:
|
||||
|
||||
----
|
||||
/*
|
||||
* "git walken"
|
||||
*
|
||||
* Part of the "My First Object Walk" tutorial.
|
||||
*/
|
||||
|
||||
#include "builtin.h"
|
||||
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
trace_printf(_("cmd_walken incoming...\n"));
|
||||
return 0;
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: `trace_printf()` differs from `printf()` in that it can be turned on or
|
||||
off at runtime. For the purposes of this tutorial, we will write `walken` as
|
||||
though it is intended for use as a "plumbing" command: that is, a command which
|
||||
is used primarily in scripts, rather than interactively by humans (a "porcelain"
|
||||
command). So we will send our debug output to `trace_printf()` instead. When
|
||||
running, enable trace output by setting the environment variable `GIT_TRACE`.
|
||||
|
||||
Add usage text and `-h` handling, like all subcommands should consistently do
|
||||
(our test suite will notice and complain if you fail to do so).
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
const char * const walken_usage[] = {
|
||||
N_("git walken"),
|
||||
NULL,
|
||||
}
|
||||
struct option options[] = {
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
argc = parse_options(argc, argv, prefix, options, walken_usage, 0);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Also add the relevant line in `builtin.h` near `cmd_whatchanged()`:
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix);
|
||||
----
|
||||
|
||||
Include the command in `git.c` in `commands[]` near the entry for `whatchanged`,
|
||||
maintaining alphabetical ordering:
|
||||
|
||||
----
|
||||
{ "walken", cmd_walken, RUN_SETUP },
|
||||
----
|
||||
|
||||
Add it to the `Makefile` near the line for `builtin/worktree.o`:
|
||||
|
||||
----
|
||||
BUILTIN_OBJS += builtin/walken.o
|
||||
----
|
||||
|
||||
Build and test out your command, without forgetting to ensure the `DEVELOPER`
|
||||
flag is set, and with `GIT_TRACE` enabled so the debug output can be seen:
|
||||
|
||||
----
|
||||
$ echo DEVELOPER=1 >>config.mak
|
||||
$ make
|
||||
$ GIT_TRACE=1 ./bin-wrappers/git walken
|
||||
----
|
||||
|
||||
NOTE: For a more exhaustive overview of the new command process, take a look at
|
||||
`Documentation/MyFirstContribution.txt`.
|
||||
|
||||
NOTE: A reference implementation can be found at
|
||||
https://github.com/nasamuffin/git/tree/revwalk.
|
||||
|
||||
=== `struct rev_cmdline_info`
|
||||
|
||||
The definition of `struct rev_cmdline_info` can be found in `revision.h`.
|
||||
|
||||
This struct is contained within the `rev_info` struct and is used to reflect
|
||||
parameters provided by the user over the CLI.
|
||||
|
||||
`nr` represents the number of `rev_cmdline_entry` present in the array.
|
||||
|
||||
`alloc` is used by the `ALLOC_GROW` macro. Check `cache.h` - this variable is
|
||||
used to track the allocated size of the list.
|
||||
|
||||
Per entry, we find:
|
||||
|
||||
`item` is the object provided upon which to base the object walk. Items in Git
|
||||
can be blobs, trees, commits, or tags. (See `Documentation/gittutorial-2.txt`.)
|
||||
|
||||
`name` is the object ID (OID) of the object - a hex string you may be familiar
|
||||
with from using Git to organize your source in the past. Check the tutorial
|
||||
mentioned above towards the top for a discussion of where the OID can come
|
||||
from.
|
||||
|
||||
`whence` indicates some information about what to do with the parents of the
|
||||
specified object. We'll explore this flag more later on; take a look at
|
||||
`Documentation/revisions.txt` to get an idea of what could set the `whence`
|
||||
value.
|
||||
|
||||
`flags` are used to hint the beginning of the revision walk and are the first
|
||||
block under the `#include`s in `revision.h`. The most likely ones to be set in
|
||||
the `rev_cmdline_info` are `UNINTERESTING` and `BOTTOM`, but these same flags
|
||||
can be used during the walk, as well.
|
||||
|
||||
=== `struct rev_info`
|
||||
|
||||
This one is quite a bit longer, and many fields are only used during the walk
|
||||
by `revision.c` - not configuration options. Most of the configurable flags in
|
||||
`struct rev_info` have a mirror in `Documentation/rev-list-options.txt`. It's a
|
||||
good idea to take some time and read through that document.
|
||||
|
||||
== Basic Commit Walk
|
||||
|
||||
First, let's see if we can replicate the output of `git log --oneline`. We'll
|
||||
refer back to the implementation frequently to discover norms when performing
|
||||
an object walk of our own.
|
||||
|
||||
To do so, we'll first find all the commits, in order, which preceded the current
|
||||
commit. We'll extract the name and subject of the commit from each.
|
||||
|
||||
Ideally, we will also be able to find out which ones are currently at the tip of
|
||||
various branches.
|
||||
|
||||
=== Setting Up
|
||||
|
||||
Preparing for your object walk has some distinct stages.
|
||||
|
||||
1. Perform default setup for this mode, and others which may be invoked.
|
||||
2. Check configuration files for relevant settings.
|
||||
3. Set up the `rev_info` struct.
|
||||
4. Tweak the initialized `rev_info` to suit the current walk.
|
||||
5. Prepare the `rev_info` for the walk.
|
||||
6. Iterate over the objects, processing each one.
|
||||
|
||||
==== Default Setups
|
||||
|
||||
Before examining configuration files which may modify command behavior, set up
|
||||
default state for switches or options your command may have. If your command
|
||||
utilizes other Git components, ask them to set up their default states as well.
|
||||
For instance, `git log` takes advantage of `grep` and `diff` functionality, so
|
||||
its `init_log_defaults()` sets its own state (`decoration_style`) and asks
|
||||
`grep` and `diff` to initialize themselves by calling each of their
|
||||
initialization functions.
|
||||
|
||||
For our first example within `git walken`, we don't intend to use any other
|
||||
components within Git, and we don't have any configuration to do. However, we
|
||||
may want to add some later, so for now, we can add an empty placeholder. Create
|
||||
a new function in `builtin/walken.c`:
|
||||
|
||||
----
|
||||
static void init_walken_defaults(void)
|
||||
{
|
||||
/*
|
||||
* We don't actually need the same components `git log` does; leave this
|
||||
* empty for now.
|
||||
*/
|
||||
}
|
||||
----
|
||||
|
||||
Make sure to add a line invoking it inside of `cmd_walken()`.
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
init_walken_defaults();
|
||||
}
|
||||
----
|
||||
|
||||
==== Configuring From `.gitconfig`
|
||||
|
||||
Next, we should have a look at any relevant configuration settings (i.e.,
|
||||
settings readable and settable from `git config`). This is done by providing a
|
||||
callback to `git_config()`; within that callback, you can also invoke methods
|
||||
from other components you may need that need to intercept these options. Your
|
||||
callback will be invoked once per each configuration value which Git knows about
|
||||
(global, local, worktree, etc.).
|
||||
|
||||
Similarly to the default values, we don't have anything to do here yet
|
||||
ourselves; however, we should call `git_default_config()` if we aren't calling
|
||||
any other existing config callbacks.
|
||||
|
||||
Add a new function to `builtin/walken.c`:
|
||||
|
||||
----
|
||||
static int git_walken_config(const char *var, const char *value, void *cb)
|
||||
{
|
||||
/*
|
||||
* For now, we don't have any custom configuration, so fall back to
|
||||
* the default config.
|
||||
*/
|
||||
return git_default_config(var, value, cb);
|
||||
}
|
||||
----
|
||||
|
||||
Make sure to invoke `git_config()` with it in your `cmd_walken()`:
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
...
|
||||
|
||||
git_config(git_walken_config, NULL);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
==== Setting Up `rev_info`
|
||||
|
||||
Now that we've gathered external configuration and options, it's time to
|
||||
initialize the `rev_info` object which we will use to perform the walk. This is
|
||||
typically done by calling `repo_init_revisions()` with the repository you intend
|
||||
to target, as well as the `prefix` argument of `cmd_walken` and your `rev_info`
|
||||
struct.
|
||||
|
||||
Add the `struct rev_info` and the `repo_init_revisions()` call:
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
/* This can go wherever you like in your declarations.*/
|
||||
struct rev_info rev;
|
||||
...
|
||||
|
||||
/* This should go after the git_config() call. */
|
||||
repo_init_revisions(the_repository, &rev, prefix);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
==== Tweaking `rev_info` For the Walk
|
||||
|
||||
We're getting close, but we're still not quite ready to go. Now that `rev` is
|
||||
initialized, we can modify it to fit our needs. This is usually done within a
|
||||
helper for clarity, so let's add one:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(struct rev_info *rev)
|
||||
{
|
||||
/*
|
||||
* We want to mimic the appearance of `git log --oneline`, so let's
|
||||
* force oneline format.
|
||||
*/
|
||||
get_commit_format("oneline", rev);
|
||||
|
||||
/* Start our object walk at HEAD. */
|
||||
add_head_to_pending(rev);
|
||||
}
|
||||
----
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
Instead of using the shorthand `add_head_to_pending()`, you could do
|
||||
something like this:
|
||||
----
|
||||
struct setup_revision_opt opt;
|
||||
|
||||
memset(&opt, 0, sizeof(opt));
|
||||
opt.def = "HEAD";
|
||||
opt.revarg_opt = REVARG_COMMITTISH;
|
||||
setup_revisions(argc, argv, rev, &opt);
|
||||
----
|
||||
Using a `setup_revision_opt` gives you finer control over your walk's starting
|
||||
point.
|
||||
====
|
||||
|
||||
Then let's invoke `final_rev_info_setup()` after the call to
|
||||
`repo_init_revisions()`:
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
...
|
||||
|
||||
final_rev_info_setup(&rev);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Later, we may wish to add more arguments to `final_rev_info_setup()`. But for
|
||||
now, this is all we need.
|
||||
|
||||
==== Preparing `rev_info` For the Walk
|
||||
|
||||
Now that `rev` is all initialized and configured, we've got one more setup step
|
||||
before we get rolling. We can do this in a helper, which will both prepare the
|
||||
`rev_info` for the walk, and perform the walk itself. Let's start the helper
|
||||
with the call to `prepare_revision_walk()`, which can return an error without
|
||||
dying on its own:
|
||||
|
||||
----
|
||||
static void walken_commit_walk(struct rev_info *rev)
|
||||
{
|
||||
if (prepare_revision_walk(rev))
|
||||
die(_("revision walk setup failed"));
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: `die()` prints to `stderr` and exits the program. Since it will print to
|
||||
`stderr` it's likely to be seen by a human, so we will localize it.
|
||||
|
||||
==== Performing the Walk!
|
||||
|
||||
Finally! We are ready to begin the walk itself. Now we can see that `rev_info`
|
||||
can also be used as an iterator; we move to the next item in the walk by using
|
||||
`get_revision()` repeatedly. Add the listed variable declarations at the top and
|
||||
the walk loop below the `prepare_revision_walk()` call within your
|
||||
`walken_commit_walk()`:
|
||||
|
||||
----
|
||||
static void walken_commit_walk(struct rev_info *rev)
|
||||
{
|
||||
struct commit *commit;
|
||||
struct strbuf prettybuf = STRBUF_INIT;
|
||||
|
||||
...
|
||||
|
||||
while ((commit = get_revision(rev))) {
|
||||
if (!commit)
|
||||
continue;
|
||||
|
||||
strbuf_reset(&prettybuf);
|
||||
pp_commit_easy(CMIT_FMT_ONELINE, commit, &prettybuf);
|
||||
puts(prettybuf.buf);
|
||||
}
|
||||
strbuf_release(&prettybuf);
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: `puts()` prints a `char*` to `stdout`. Since this is the part of the
|
||||
command we expect to be machine-parsed, we're sending it directly to stdout.
|
||||
|
||||
Give it a shot.
|
||||
|
||||
----
|
||||
$ make
|
||||
$ ./bin-wrappers/git walken
|
||||
----
|
||||
|
||||
You should see all of the subject lines of all the commits in
|
||||
your tree's history, in order, ending with the initial commit, "Initial revision
|
||||
of "git", the information manager from hell". Congratulations! You've written
|
||||
your first revision walk. You can play with printing some additional fields
|
||||
from each commit if you're curious; have a look at the functions available in
|
||||
`commit.h`.
|
||||
|
||||
=== Adding a Filter
|
||||
|
||||
Next, let's try to filter the commits we see based on their author. This is
|
||||
equivalent to running `git log --author=<pattern>`. We can add a filter by
|
||||
modifying `rev_info.grep_filter`, which is a `struct grep_opt`.
|
||||
|
||||
First some setup. Add `init_grep_defaults()` to `init_walken_defaults()` and add
|
||||
`grep_config()` to `git_walken_config()`:
|
||||
|
||||
----
|
||||
static void init_walken_defaults(void)
|
||||
{
|
||||
init_grep_defaults(the_repository);
|
||||
}
|
||||
|
||||
...
|
||||
|
||||
static int git_walken_config(const char *var, const char *value, void *cb)
|
||||
{
|
||||
grep_config(var, value, cb);
|
||||
return git_default_config(var, value, cb);
|
||||
}
|
||||
----
|
||||
|
||||
Next, we can modify the `grep_filter`. This is done with convenience functions
|
||||
found in `grep.h`. For fun, we're filtering to only commits from folks using a
|
||||
`gmail.com` email address - a not-very-precise guess at who may be working on
|
||||
Git as a hobby. Since we're checking the author, which is a specific line in the
|
||||
header, we'll use the `append_header_grep_pattern()` helper. We can use
|
||||
the `enum grep_header_field` to indicate which part of the commit header we want
|
||||
to search.
|
||||
|
||||
In `final_rev_info_setup()`, add your filter line:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv,
|
||||
const char *prefix, struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
append_header_grep_pattern(&rev->grep_filter, GREP_HEADER_AUTHOR,
|
||||
"gmail");
|
||||
compile_grep_patterns(&rev->grep_filter);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
`append_header_grep_pattern()` adds your new "gmail" pattern to `rev_info`, but
|
||||
it won't work unless we compile it with `compile_grep_patterns()`.
|
||||
|
||||
NOTE: If you are using `setup_revisions()` (for example, if you are passing a
|
||||
`setup_revision_opt` instead of using `add_head_to_pending()`), you don't need
|
||||
to call `compile_grep_patterns()` because `setup_revisions()` calls it for you.
|
||||
|
||||
NOTE: We could add the same filter via the `append_grep_pattern()` helper if we
|
||||
wanted to, but `append_header_grep_pattern()` adds the `enum grep_context` and
|
||||
`enum grep_pat_token` for us.
|
||||
|
||||
=== Changing the Order
|
||||
|
||||
There are a few ways that we can change the order of the commits during a
|
||||
revision walk. Firstly, we can use the `enum rev_sort_order` to choose from some
|
||||
typical orderings.
|
||||
|
||||
`topo_order` is the same as `git log --topo-order`: we avoid showing a parent
|
||||
before all of its children have been shown, and we avoid mixing commits which
|
||||
are in different lines of history. (`git help log`'s section on `--topo-order`
|
||||
has a very nice diagram to illustrate this.)
|
||||
|
||||
Let's see what happens when we run with `REV_SORT_BY_COMMIT_DATE` as opposed to
|
||||
`REV_SORT_BY_AUTHOR_DATE`. Add the following:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv,
|
||||
const char *prefix, struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
rev->topo_order = 1;
|
||||
rev->sort_order = REV_SORT_BY_COMMIT_DATE;
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Let's output this into a file so we can easily diff it with the walk sorted by
|
||||
author date.
|
||||
|
||||
----
|
||||
$ make
|
||||
$ ./bin-wrappers/git walken > commit-date.txt
|
||||
----
|
||||
|
||||
Then, let's sort by author date and run it again.
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv,
|
||||
const char *prefix, struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
rev->topo_order = 1;
|
||||
rev->sort_order = REV_SORT_BY_AUTHOR_DATE;
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
----
|
||||
$ make
|
||||
$ ./bin-wrappers/git walken > author-date.txt
|
||||
----
|
||||
|
||||
Finally, compare the two. This is a little less helpful without object names or
|
||||
dates, but hopefully we get the idea.
|
||||
|
||||
----
|
||||
$ diff -u commit-date.txt author-date.txt
|
||||
----
|
||||
|
||||
This display indicates that commits can be reordered after they're written, for
|
||||
example with `git rebase`.
|
||||
|
||||
Let's try one more reordering of commits. `rev_info` exposes a `reverse` flag.
|
||||
Set that flag somewhere inside of `final_rev_info_setup()`:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv, const char *prefix,
|
||||
struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
rev->reverse = 1;
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Run your walk again and note the difference in order. (If you remove the grep
|
||||
pattern, you should see the last commit this call gives you as your current
|
||||
HEAD.)
|
||||
|
||||
== Basic Object Walk
|
||||
|
||||
So far we've been walking only commits. But Git has more types of objects than
|
||||
that! Let's see if we can walk _all_ objects, and find out some information
|
||||
about each one.
|
||||
|
||||
We can base our work on an example. `git pack-objects` prepares all kinds of
|
||||
objects for packing into a bitmap or packfile. The work we are interested in
|
||||
resides in `builtins/pack-objects.c:get_object_list()`; examination of that
|
||||
function shows that the all-object walk is being performed by
|
||||
`traverse_commit_list()` or `traverse_commit_list_filtered()`. Those two
|
||||
functions reside in `list-objects.c`; examining the source shows that, despite
|
||||
the name, these functions traverse all kinds of objects. Let's have a look at
|
||||
the arguments to `traverse_commit_list_filtered()`, which are a superset of the
|
||||
arguments to the unfiltered version.
|
||||
|
||||
- `struct list_objects_filter_options *filter_options`: This is a struct which
|
||||
stores a filter-spec as outlined in `Documentation/rev-list-options.txt`.
|
||||
- `struct rev_info *revs`: This is the `rev_info` used for the walk.
|
||||
- `show_commit_fn show_commit`: A callback which will be used to handle each
|
||||
individual commit object.
|
||||
- `show_object_fn show_object`: A callback which will be used to handle each
|
||||
non-commit object (so each blob, tree, or tag).
|
||||
- `void *show_data`: A context buffer which is passed in turn to `show_commit`
|
||||
and `show_object`.
|
||||
- `struct oidset *omitted`: A linked-list of object IDs which the provided
|
||||
filter caused to be omitted.
|
||||
|
||||
It looks like this `traverse_commit_list_filtered()` uses callbacks we provide
|
||||
instead of needing us to call it repeatedly ourselves. Cool! Let's add the
|
||||
callbacks first.
|
||||
|
||||
For the sake of this tutorial, we'll simply keep track of how many of each kind
|
||||
of object we find. At file scope in `builtin/walken.c` add the following
|
||||
tracking variables:
|
||||
|
||||
----
|
||||
static int commit_count;
|
||||
static int tag_count;
|
||||
static int blob_count;
|
||||
static int tree_count;
|
||||
----
|
||||
|
||||
Commits are handled by a different callback than other objects; let's do that
|
||||
one first:
|
||||
|
||||
----
|
||||
static void walken_show_commit(struct commit *cmt, void *buf)
|
||||
{
|
||||
commit_count++;
|
||||
}
|
||||
----
|
||||
|
||||
The `cmt` argument is fairly self-explanatory. But it's worth mentioning that
|
||||
the `buf` argument is actually the context buffer that we can provide to the
|
||||
traversal calls - `show_data`, which we mentioned a moment ago.
|
||||
|
||||
Since we have the `struct commit` object, we can look at all the same parts that
|
||||
we looked at in our earlier commit-only walk. For the sake of this tutorial,
|
||||
though, we'll just increment the commit counter and move on.
|
||||
|
||||
The callback for non-commits is a little different, as we'll need to check
|
||||
which kind of object we're dealing with:
|
||||
|
||||
----
|
||||
static void walken_show_object(struct object *obj, const char *str, void *buf)
|
||||
{
|
||||
switch (obj->type) {
|
||||
case OBJ_TREE:
|
||||
tree_count++;
|
||||
break;
|
||||
case OBJ_BLOB:
|
||||
blob_count++;
|
||||
break;
|
||||
case OBJ_TAG:
|
||||
tag_count++;
|
||||
break;
|
||||
case OBJ_COMMIT:
|
||||
BUG("unexpected commit object in walken_show_object\n");
|
||||
default:
|
||||
BUG("unexpected object type %s in walken_show_object\n",
|
||||
type_name(obj->type));
|
||||
}
|
||||
}
|
||||
----
|
||||
|
||||
Again, `obj` is fairly self-explanatory, and we can guess that `buf` is the same
|
||||
context pointer that `walken_show_commit()` receives: the `show_data` argument
|
||||
to `traverse_commit_list()` and `traverse_commit_list_filtered()`. Finally,
|
||||
`str` contains the name of the object, which ends up being something like
|
||||
`foo.txt` (blob), `bar/baz` (tree), or `v1.2.3` (tag).
|
||||
|
||||
To help assure us that we aren't double-counting commits, we'll include some
|
||||
complaining if a commit object is routed through our non-commit callback; we'll
|
||||
also complain if we see an invalid object type. Since those two cases should be
|
||||
unreachable, and would only change in the event of a semantic change to the Git
|
||||
codebase, we complain by using `BUG()` - which is a signal to a developer that
|
||||
the change they made caused unintended consequences, and the rest of the
|
||||
codebase needs to be updated to understand that change. `BUG()` is not intended
|
||||
to be seen by the public, so it is not localized.
|
||||
|
||||
Our main object walk implementation is substantially different from our commit
|
||||
walk implementation, so let's make a new function to perform the object walk. We
|
||||
can perform setup which is applicable to all objects here, too, to keep separate
|
||||
from setup which is applicable to commit-only walks.
|
||||
|
||||
We'll start by enabling all types of objects in the `struct rev_info`. We'll
|
||||
also turn on `tree_blobs_in_commit_order`, which means that we will walk a
|
||||
commit's tree and everything it points to immediately after we find each commit,
|
||||
as opposed to waiting for the end and walking through all trees after the commit
|
||||
history has been discovered. With the appropriate settings configured, we are
|
||||
ready to call `prepare_revision_walk()`.
|
||||
|
||||
----
|
||||
static void walken_object_walk(struct rev_info *rev)
|
||||
{
|
||||
rev->tree_objects = 1;
|
||||
rev->blob_objects = 1;
|
||||
rev->tag_objects = 1;
|
||||
rev->tree_blobs_in_commit_order = 1;
|
||||
|
||||
if (prepare_revision_walk(rev))
|
||||
die(_("revision walk setup failed"));
|
||||
|
||||
commit_count = 0;
|
||||
tag_count = 0;
|
||||
blob_count = 0;
|
||||
tree_count = 0;
|
||||
----
|
||||
|
||||
Let's start by calling just the unfiltered walk and reporting our counts.
|
||||
Complete your implementation of `walken_object_walk()`:
|
||||
|
||||
----
|
||||
traverse_commit_list(rev, walken_show_commit, walken_show_object, NULL);
|
||||
|
||||
printf("commits %d\nblobs %d\ntags %d\ntrees %d\n", commit_count,
|
||||
blob_count, tag_count, tree_count);
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: This output is intended to be machine-parsed. Therefore, we are not
|
||||
sending it to `trace_printf()`, and we are not localizing it - we need scripts
|
||||
to be able to count on the formatting to be exactly the way it is shown here.
|
||||
If we were intending this output to be read by humans, we would need to localize
|
||||
it with `_()`.
|
||||
|
||||
Finally, we'll ask `cmd_walken()` to use the object walk instead. Discussing
|
||||
command line options is out of scope for this tutorial, so we'll just hardcode
|
||||
a branch we can change at compile time. Where you call `final_rev_info_setup()`
|
||||
and `walken_commit_walk()`, instead branch like so:
|
||||
|
||||
----
|
||||
if (1) {
|
||||
add_head_to_pending(&rev);
|
||||
walken_object_walk(&rev);
|
||||
} else {
|
||||
final_rev_info_setup(argc, argv, prefix, &rev);
|
||||
walken_commit_walk(&rev);
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: For simplicity, we've avoided all the filters and sorts we applied in
|
||||
`final_rev_info_setup()` and simply added `HEAD` to our pending queue. If you
|
||||
want, you can certainly use the filters we added before by moving
|
||||
`final_rev_info_setup()` out of the conditional and removing the call to
|
||||
`add_head_to_pending()`.
|
||||
|
||||
Now we can try to run our command! It should take noticeably longer than the
|
||||
commit walk, but an examination of the output will give you an idea why. Your
|
||||
output should look similar to this example, but with different counts:
|
||||
|
||||
----
|
||||
Object walk completed. Found 55733 commits, 100274 blobs, 0 tags, and 104210 trees.
|
||||
----
|
||||
|
||||
This makes sense. We have more trees than commits because the Git project has
|
||||
lots of subdirectories which can change, plus at least one tree per commit. We
|
||||
have no tags because we started on a commit (`HEAD`) and while tags can point to
|
||||
commits, commits can't point to tags.
|
||||
|
||||
NOTE: You will have different counts when you run this yourself! The number of
|
||||
objects grows along with the Git project.
|
||||
|
||||
=== Adding a Filter
|
||||
|
||||
There are a handful of filters that we can apply to the object walk laid out in
|
||||
`Documentation/rev-list-options.txt`. These filters are typically useful for
|
||||
operations such as creating packfiles or performing a partial clone. They are
|
||||
defined in `list-objects-filter-options.h`. For the purposes of this tutorial we
|
||||
will use the "tree:1" filter, which causes the walk to omit all trees and blobs
|
||||
which are not directly referenced by commits reachable from the commit in
|
||||
`pending` when the walk begins. (`pending` is the list of objects which need to
|
||||
be traversed during a walk; you can imagine a breadth-first tree traversal to
|
||||
help understand. In our case, that means we omit trees and blobs not directly
|
||||
referenced by `HEAD` or `HEAD`'s history, because we begin the walk with only
|
||||
`HEAD` in the `pending` list.)
|
||||
|
||||
First, we'll need to `#include "list-objects-filter-options.h`" and set up the
|
||||
`struct list_objects_filter_options` at the top of the function.
|
||||
|
||||
----
|
||||
static void walken_object_walk(struct rev_info *rev)
|
||||
{
|
||||
struct list_objects_filter_options filter_options = {};
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
For now, we are not going to track the omitted objects, so we'll replace those
|
||||
parameters with `NULL`. For the sake of simplicity, we'll add a simple
|
||||
build-time branch to use our filter or not. Replace the line calling
|
||||
`traverse_commit_list()` with the following, which will remind us which kind of
|
||||
walk we've just performed:
|
||||
|
||||
----
|
||||
if (0) {
|
||||
/* Unfiltered: */
|
||||
trace_printf(_("Unfiltered object walk.\n"));
|
||||
traverse_commit_list(rev, walken_show_commit,
|
||||
walken_show_object, NULL);
|
||||
} else {
|
||||
trace_printf(
|
||||
_("Filtered object walk with filterspec 'tree:1'.\n"));
|
||||
parse_list_objects_filter(&filter_options, "tree:1");
|
||||
|
||||
traverse_commit_list_filtered(&filter_options, rev,
|
||||
walken_show_commit, walken_show_object, NULL, NULL);
|
||||
}
|
||||
----
|
||||
|
||||
`struct list_objects_filter_options` is usually built directly from a command
|
||||
line argument, so the module provides an easy way to build one from a string.
|
||||
Even though we aren't taking user input right now, we can still build one with
|
||||
a hardcoded string using `parse_list_objects_filter()`.
|
||||
|
||||
With the filter spec "tree:1", we are expecting to see _only_ the root tree for
|
||||
each commit; therefore, the tree object count should be less than or equal to
|
||||
the number of commits. (For an example of why that's true: `git commit --revert`
|
||||
points to the same tree object as its grandparent.)
|
||||
|
||||
=== Counting Omitted Objects
|
||||
|
||||
We also have the capability to enumerate all objects which were omitted by a
|
||||
filter, like with `git log --filter=<spec> --filter-print-omitted`. Asking
|
||||
`traverse_commit_list_filtered()` to populate the `omitted` list means that our
|
||||
object walk does not perform any better than an unfiltered object walk; all
|
||||
reachable objects are walked in order to populate the list.
|
||||
|
||||
First, add the `struct oidset` and related items we will use to iterate it:
|
||||
|
||||
----
|
||||
static void walken_object_walk(
|
||||
...
|
||||
|
||||
struct oidset omitted;
|
||||
struct oidset_iter oit;
|
||||
struct object_id *oid = NULL;
|
||||
int omitted_count = 0;
|
||||
oidset_init(&omitted, 0);
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
Modify the call to `traverse_commit_list_filtered()` to include your `omitted`
|
||||
object:
|
||||
|
||||
----
|
||||
...
|
||||
|
||||
traverse_commit_list_filtered(&filter_options, rev,
|
||||
walken_show_commit, walken_show_object, NULL, &omitted);
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
Then, after your traversal, the `oidset` traversal is pretty straightforward.
|
||||
Count all the objects within and modify the print statement:
|
||||
|
||||
----
|
||||
/* Count the omitted objects. */
|
||||
oidset_iter_init(&omitted, &oit);
|
||||
|
||||
while ((oid = oidset_iter_next(&oit)))
|
||||
omitted_count++;
|
||||
|
||||
printf("commits %d\nblobs %d\ntags %d\ntrees%d\nomitted %d\n",
|
||||
commit_count, blob_count, tag_count, tree_count, omitted_count);
|
||||
----
|
||||
|
||||
By running your walk with and without the filter, you should find that the total
|
||||
object count in each case is identical. You can also time each invocation of
|
||||
the `walken` subcommand, with and without `omitted` being passed in, to confirm
|
||||
to yourself the runtime impact of tracking all omitted objects.
|
||||
|
||||
=== Changing the Order
|
||||
|
||||
Finally, let's demonstrate that you can also reorder walks of all objects, not
|
||||
just walks of commits. First, we'll make our handlers chattier - modify
|
||||
`walken_show_commit()` and `walken_show_object()` to print the object as they
|
||||
go:
|
||||
|
||||
----
|
||||
static void walken_show_commit(struct commit *cmt, void *buf)
|
||||
{
|
||||
trace_printf("commit: %s\n", oid_to_hex(&cmt->object.oid));
|
||||
commit_count++;
|
||||
}
|
||||
|
||||
static void walken_show_object(struct object *obj, const char *str, void *buf)
|
||||
{
|
||||
trace_printf("%s: %s\n", type_name(obj->type), oid_to_hex(&obj->oid));
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: Since we will be examining this output directly as humans, we'll use
|
||||
`trace_printf()` here. Additionally, since this change introduces a significant
|
||||
number of printed lines, using `trace_printf()` will allow us to easily silence
|
||||
those lines without having to recompile.
|
||||
|
||||
(Leave the counter increment logic in place.)
|
||||
|
||||
With only that change, run again (but save yourself some scrollback):
|
||||
|
||||
----
|
||||
$ GIT_TRACE=1 ./bin-wrappers/git walken | head -n 10
|
||||
----
|
||||
|
||||
Take a look at the top commit with `git show` and the object ID you printed; it
|
||||
should be the same as the output of `git show HEAD`.
|
||||
|
||||
Next, let's change a setting on our `struct rev_info` within
|
||||
`walken_object_walk()`. Find where you're changing the other settings on `rev`,
|
||||
such as `rev->tree_objects` and `rev->tree_blobs_in_commit_order`, and add the
|
||||
`reverse` setting at the bottom:
|
||||
|
||||
----
|
||||
...
|
||||
|
||||
rev->tree_objects = 1;
|
||||
rev->blob_objects = 1;
|
||||
rev->tag_objects = 1;
|
||||
rev->tree_blobs_in_commit_order = 1;
|
||||
rev->reverse = 1;
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
Now, run again, but this time, let's grab the last handful of objects instead
|
||||
of the first handful:
|
||||
|
||||
----
|
||||
$ make
|
||||
$ GIT_TRACE=1 ./bin-wrappers git walken | tail -n 10
|
||||
----
|
||||
|
||||
The last commit object given should have the same OID as the one we saw at the
|
||||
top before, and running `git show <oid>` with that OID should give you again
|
||||
the same results as `git show HEAD`. Furthermore, if you run and examine the
|
||||
first ten lines again (with `head` instead of `tail` like we did before applying
|
||||
the `reverse` setting), you should see that now the first commit printed is the
|
||||
initial commit, `e83c5163`.
|
||||
|
||||
== Wrapping Up
|
||||
|
||||
Let's review. In this tutorial, we:
|
||||
|
||||
- Built a commit walk from the ground up
|
||||
- Enabled a grep filter for that commit walk
|
||||
- Changed the sort order of that filtered commit walk
|
||||
- Built an object walk (tags, commits, trees, and blobs) from the ground up
|
||||
- Learned how to add a filter-spec to an object walk
|
||||
- Changed the display order of the filtered object walk
|
@ -251,7 +251,7 @@ Updates in v1.5.0 since v1.4.4 series
|
||||
the repository when that happens.
|
||||
|
||||
|
||||
* Cruft removal
|
||||
* Crufts 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 re-encodes the message to the log output encoding when
|
||||
and reencodes 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
|
||||
|
@ -11,7 +11,7 @@ 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
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -11,7 +11,7 @@ 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
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -11,7 +11,7 @@ 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
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -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 cruft.
|
||||
produce crufts.
|
||||
|
||||
* "git pack-objects --all-progress" is an option to ask progress output
|
||||
from write-object phase _if_ progress output were to be produced, and
|
||||
|
@ -22,7 +22,7 @@ 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
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -64,7 +64,7 @@ users will fare this time.
|
||||
Please refer to:
|
||||
|
||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition process that already took place so far.
|
||||
|
@ -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 its configuration
|
||||
* "gitweb" did not diagnose parsing errors properly while reading tis configuration
|
||||
file.
|
||||
|
||||
And other minor fixes and documentation updates.
|
||||
|
@ -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 overrun the buffer if it is too long.
|
||||
incorrectly and could overun 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.
|
||||
|
@ -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 user
|
||||
progress output while processing objects it received to the puser
|
||||
when run over the smart-http protocol.
|
||||
|
||||
* "git status" honored the ignore=dirty settings in .gitmodules but
|
||||
|
@ -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 smart-HTTP protocol could
|
||||
* "git send-pack" (hence "git push") over smalt-HTTP protocol could
|
||||
deadlock when the client side pack-object died early.
|
||||
|
||||
* Compressed tarball gitweb generates used to be made with the timestamp
|
||||
|
@ -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 user
|
||||
progress output while processing objects it received to the puser
|
||||
when run over the smart-http protocol.
|
||||
|
||||
* When you misspell the command name you give to the "exec" action in
|
||||
|
@ -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 dependent error message to 'echo' and expecting it
|
||||
random, data dependant error message to 'echo' and expecting it
|
||||
to come out literally.
|
||||
|
||||
* Setting the "submodule.<name>.path" variable to the empty
|
||||
|
@ -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 (cf. <51A606A0.5060101@web.de>) so let's try moving it
|
||||
this is fine with Cygwin 1.7 ($gmane/225824) so let's try moving it
|
||||
ahead.
|
||||
|
||||
* The credential helper to talk to keychain on OS X (in contrib/) has
|
||||
|
@ -13,7 +13,7 @@ Git v2.1.3 Release Notes
|
||||
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
|
||||
object recheability bitmap when it needs to split the resulting
|
||||
pack.
|
||||
|
||||
* "gitweb" used deprecated CGI::startfrom, which was removed from
|
||||
|
@ -478,7 +478,7 @@ notes for details).
|
||||
* One part of "git am" had an oddball helper function that called
|
||||
stuff from outside "his" as opposed to calling what we have "ours",
|
||||
which was not gender-neutral and also inconsistent with the rest of
|
||||
the system where outside stuff is usually called "theirs" in
|
||||
the system where outside stuff is usuall called "theirs" in
|
||||
contrast to "ours".
|
||||
|
||||
* "git blame file" allowed the lineage of lines in the uncommitted,
|
||||
|
@ -86,7 +86,7 @@ Fixes since v2.10.1
|
||||
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
|
||||
reopsitory, 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
|
||||
|
@ -104,7 +104,7 @@ Fixes since v2.11
|
||||
"git difftool --dir-diff" from a subdirectory never worked. This
|
||||
has been fixed.
|
||||
|
||||
* "git p4" that tracks multiple p4 paths imported a single changelist
|
||||
* "git p4" that tracks multile 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.
|
||||
|
||||
|
@ -315,7 +315,7 @@ notes for details).
|
||||
"git difftool --dir-diff" from a subdirectory never worked. This
|
||||
has been fixed.
|
||||
|
||||
* "git p4" that tracks multiple p4 paths imported a single changelist
|
||||
* "git p4" that tracks multile 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.
|
||||
|
||||
|
@ -177,7 +177,7 @@ UI, Workflows & Features
|
||||
been changed to enable "--decorate".
|
||||
|
||||
* The output from "git status --short" has been extended to show
|
||||
various kinds of dirtiness in submodules differently; instead of to
|
||||
various kinds of dirtyness in submodules differently; instead of to
|
||||
"M" for modified, 'm' and '?' can be shown to signal changes only
|
||||
to the working tree of the submodule but not the commit that is
|
||||
checked out.
|
||||
|
@ -25,7 +25,7 @@ Fixes since v2.13.2
|
||||
* 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
|
||||
unnecessarilyl 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
|
||||
@ -35,7 +35,7 @@ Fixes since v2.13.2
|
||||
* 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.
|
||||
* An unaligned 32-bit access in pack-bitmap code ahs been corrected.
|
||||
|
||||
* Tighten error checks for invalid "git apply" input.
|
||||
|
||||
|
@ -141,7 +141,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
* Some platforms have ulong that is smaller than time_t, and our
|
||||
historical use of ulong for timestamp would mean they cannot
|
||||
represent some timestamp that the platform allows. Invent a
|
||||
separate and dedicated timestamp_t (so that we can distinguish
|
||||
separate and dedicated timestamp_t (so that we can distingiuish
|
||||
timestamps and a vanilla ulongs, which along is already a good
|
||||
move), and then declare uintmax_t is the type to be used as the
|
||||
timestamp_t.
|
||||
@ -442,7 +442,7 @@ notes for details).
|
||||
* 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
|
||||
unnecessarilyl complex. Attempt to simplify the logic by using the
|
||||
early-config mechanism that does not chdir around.
|
||||
|
||||
* Fix configuration codepath to pay proper attention to commondir
|
||||
|
@ -407,7 +407,7 @@ Fixes since v2.15
|
||||
(merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).
|
||||
|
||||
* Amending commits in git-gui broke the author name that is non-ascii
|
||||
due to incorrect encoding conversion.
|
||||
due to incorrect enconding conversion.
|
||||
|
||||
* Recent update to the submodule configuration code broke "diff-tree"
|
||||
by accidentally stopping to read from the index upfront.
|
||||
|
@ -24,7 +24,7 @@ Fixes since v2.16.2
|
||||
|
||||
* 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.
|
||||
so that it can be more safely sharable.
|
||||
|
||||
* Crash fix for a corner case where an error codepath tried to unlock
|
||||
what it did not acquire lock on.
|
||||
|
@ -216,7 +216,7 @@ Fixes since v2.16
|
||||
|
||||
* 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.
|
||||
so that it can be more safely sharable.
|
||||
(merge 8ba18e6fa4 jt/http-redact-cookies later to maint).
|
||||
|
||||
* Crash fix for a corner case where an error codepath tried to unlock
|
||||
|
16
Documentation/RelNotes/2.17.4.txt
Normal file
16
Documentation/RelNotes/2.17.4.txt
Normal file
@ -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
Documentation/RelNotes/2.17.5.txt
Normal file
22
Documentation/RelNotes/2.17.5.txt
Normal file
@ -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
Documentation/RelNotes/2.17.6.txt
Normal file
16
Documentation/RelNotes/2.17.6.txt
Normal file
@ -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.
|
@ -179,7 +179,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
(merge 00a3da2a13 nd/remove-ignore-env-field later to maint).
|
||||
|
||||
* Code to find the length to uniquely abbreviate object names based
|
||||
on packfile content, which is a relatively recent addition, has been
|
||||
on packfile content, which is a relatively recent addtion, has been
|
||||
optimized to use the same fan-out table.
|
||||
|
||||
* The mechanism to use parse-options API to automate the command line
|
||||
|
5
Documentation/RelNotes/2.18.3.txt
Normal file
5
Documentation/RelNotes/2.18.3.txt
Normal file
@ -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
Documentation/RelNotes/2.18.4.txt
Normal file
5
Documentation/RelNotes/2.18.4.txt
Normal file
@ -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
Documentation/RelNotes/2.18.5.txt
Normal file
6
Documentation/RelNotes/2.18.5.txt
Normal file
@ -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.
|
@ -106,7 +106,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
* The conversion to pass "the_repository" and then "a_repository"
|
||||
throughout the object access API continues.
|
||||
|
||||
* Continuing with the idea to programmatically enumerate various
|
||||
* Continuing with the idea to programatically enumerate various
|
||||
pieces of data required for command line completion, teach the
|
||||
codebase to report the list of configuration variables
|
||||
subcommands care about to help complete them.
|
||||
|
5
Documentation/RelNotes/2.19.4.txt
Normal file
5
Documentation/RelNotes/2.19.4.txt
Normal file
@ -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
Documentation/RelNotes/2.19.5.txt
Normal file
5
Documentation/RelNotes/2.19.5.txt
Normal file
@ -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
Documentation/RelNotes/2.19.6.txt
Normal file
6
Documentation/RelNotes/2.19.6.txt
Normal file
@ -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.
|
@ -1,700 +0,0 @@
|
||||
Git 2.20 Release Notes
|
||||
======================
|
||||
|
||||
Backward Compatibility Notes
|
||||
----------------------------
|
||||
|
||||
* "git branch -l <foo>" used to be a way to ask a reflog to be
|
||||
created while creating a new branch, but that is no longer the
|
||||
case. It is a short-hand for "git branch --list <foo>" now.
|
||||
|
||||
* "git push" into refs/tags/* hierarchy is rejected without getting
|
||||
forced, but "git fetch" (misguidedly) used the "fast forwarding"
|
||||
rule used for the refs/heads/* hierarchy; this has been corrected,
|
||||
which means some fetches of tags that did not fail with older
|
||||
version of Git will fail without "--force" with this version.
|
||||
|
||||
* "git help -a" now gives verbose output (same as "git help -av").
|
||||
Those who want the old output may say "git help --no-verbose -a"..
|
||||
|
||||
* "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
|
||||
reported only the alias expansion of "cpn" in earlier versions of
|
||||
Git. It now runs "git cherry-pick --help" to show the manual page
|
||||
of the command, while sending the alias expansion to the standard
|
||||
error stream.
|
||||
|
||||
* "git send-email" learned to grab address-looking string on any
|
||||
trailer whose name ends with "-by". This is a backward-incompatible
|
||||
change. Adding "--suppress-cc=misc-by" on the command line, or
|
||||
setting sendemail.suppresscc configuration variable to "misc-by",
|
||||
can be used to disable this behaviour.
|
||||
|
||||
|
||||
Updates since v2.19
|
||||
-------------------
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* Running "git clone" against a project that contain two files with
|
||||
pathnames that differ only in cases on a case insensitive
|
||||
filesystem would result in one of the files lost because the
|
||||
underlying filesystem is incapable of holding both at the same
|
||||
time. An attempt is made to detect such a case and warn.
|
||||
|
||||
* "git checkout -b newbranch [HEAD]" should not have to do as much as
|
||||
checking out a commit different from HEAD. An attempt is made to
|
||||
optimize this special case.
|
||||
|
||||
* "git rev-list --stdin </dev/null" used to be an error; it now shows
|
||||
no output without an error. "git rev-list --stdin --default HEAD"
|
||||
still falls back to the given default when nothing is given on the
|
||||
standard input.
|
||||
|
||||
* Lift code from GitHub to restrict delta computation so that an
|
||||
object that exists in one fork is not made into a delta against
|
||||
another object that does not appear in the same forked repository.
|
||||
|
||||
* "git format-patch" learned new "--interdiff" and "--range-diff"
|
||||
options to explain the difference between this version and the
|
||||
previous attempt in the cover letter (or after the three-dashes as
|
||||
a comment).
|
||||
|
||||
* "git mailinfo" used in "git am" learned to make a best-effort
|
||||
recovery of a patch corrupted by MUA that sends text/plain with
|
||||
format=flawed option.
|
||||
(merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
|
||||
|
||||
* The rules used by "git push" and "git fetch" to determine if a ref
|
||||
can or cannot be updated were inconsistent; specifically, fetching
|
||||
to update existing tags were allowed even though tags are supposed
|
||||
to be unmoving anchoring points. "git fetch" was taught to forbid
|
||||
updates to existing tags without the "--force" option.
|
||||
|
||||
* "git multi-pack-index" learned to detect corruption in the .midx
|
||||
file it uses, and this feature has been integrated into "git fsck".
|
||||
|
||||
* Generation of (experimental) commit-graph files have so far been
|
||||
fairly silent, even though it takes noticeable amount of time in a
|
||||
meaningfully large repository. The users will now see progress
|
||||
output.
|
||||
|
||||
* The minimum version of Windows supported by Windows port of Git is
|
||||
now set to Vista.
|
||||
|
||||
* The completion script (in contrib/) learned to complete a handful of
|
||||
options "git stash list" command takes.
|
||||
|
||||
* The completion script (in contrib/) learned that "git fetch
|
||||
--multiple" only takes remote names as arguments and no refspecs.
|
||||
|
||||
* "git status" learns to show progress bar when refreshing the index
|
||||
takes a long time.
|
||||
(merge ae9af12287 nd/status-refresh-progress later to maint).
|
||||
|
||||
* "git help -a" and "git help -av" give different pieces of
|
||||
information, and generally the "verbose" version is more friendly
|
||||
to the new users. "git help -a" by default now uses the more
|
||||
verbose output (with "--no-verbose", you can go back to the
|
||||
original). Also "git help -av" now lists aliases and external
|
||||
commands, which it did not used to.
|
||||
|
||||
* Unlike "grep", "git grep" by default recurses to the whole tree.
|
||||
The command learned "git grep --recursive" option, so that "git
|
||||
grep --no-recursive" can serve as a synonym to setting the
|
||||
max-depth to 0.
|
||||
|
||||
* When pushing into a repository that borrows its objects from an
|
||||
alternate object store, "git receive-pack" that responds to the
|
||||
push request on the other side lists the tips of refs in the
|
||||
alternate to reduce the amount of objects transferred. This
|
||||
sometimes is detrimental when the number of refs in the alternate
|
||||
is absurdly large, in which case the bandwidth saved in potentially
|
||||
fewer objects transferred is wasted in excessively large ref
|
||||
advertisement. The alternate refs that are advertised are now
|
||||
configurable with a pair of configuration variables.
|
||||
|
||||
* "git cmd --help" when "cmd" is aliased used to only say "cmd is
|
||||
aliased to ...". Now it shows that to the standard error stream
|
||||
and runs "git $cmd --help" where $cmd is the first word of the
|
||||
alias expansion.
|
||||
|
||||
* The documentation of "git gc" has been updated to mention that it
|
||||
is no longer limited to "pruning away cruft" but also updates
|
||||
ancillary files like commit-graph as a part of repository
|
||||
optimization.
|
||||
|
||||
* "git p4 unshelve" improvements.
|
||||
|
||||
* The logic to select the default user name and e-mail on Windows has
|
||||
been improved.
|
||||
(merge 501afcb8b0 js/mingw-default-ident later to maint).
|
||||
|
||||
* The "rev-list --filter" feature learned to exclude all trees via
|
||||
"tree:0" filter.
|
||||
|
||||
* "git send-email" learned to grab address-looking string on any
|
||||
trailer whose name ends with "-by"; --suppress-cc=misc-by on the
|
||||
command line, or setting sendemail.suppresscc configuration
|
||||
variable to "misc-by", can be used to disable this behaviour.
|
||||
|
||||
* "git mergetool" learned to take the "--[no-]gui" option, just like
|
||||
"git difftool" does.
|
||||
|
||||
* "git rebase -i" learned a new insn, 'break', that the user can
|
||||
insert in the to-do list. Upon hitting it, the command returns
|
||||
control back to the user.
|
||||
|
||||
* New "--pretty=format:" placeholders %GF and %GP that show the GPG
|
||||
key fingerprints have been invented.
|
||||
|
||||
* On platforms with recent cURL library, http.sslBackend configuration
|
||||
variable can be used to choose a different SSL backend at runtime.
|
||||
The Windows port uses this mechanism to switch between OpenSSL and
|
||||
Secure Channel while talking over the HTTPS protocol.
|
||||
|
||||
* "git send-email" learned to disable SMTP authentication via the
|
||||
"--smtp-auth=none" option, even when the smtp username is given
|
||||
(which turns the authentication on by default).
|
||||
|
||||
* A fourth class of configuration files (in addition to the
|
||||
traditional "system wide", "per user in the $HOME directory" and
|
||||
"per repository in the $GIT_DIR/config") has been introduced so
|
||||
that different worktrees that share the same repository (hence the
|
||||
same $GIT_DIR/config file) can use different customization.
|
||||
|
||||
* A pattern with '**' that does not have a slash on either side used
|
||||
to be an invalid one, but the code now treats such double-asterisks
|
||||
the same way as two normal asterisks that happen to be adjacent to
|
||||
each other.
|
||||
(merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
|
||||
|
||||
* The "--no-patch" option, which can be used to get a high-level
|
||||
overview without the actual line-by-line patch difference shown, of
|
||||
the "range-diff" command was earlier broken, which has been
|
||||
corrected.
|
||||
|
||||
* The recently merged "rebase in C" has an escape hatch to use the
|
||||
scripted version when necessary, but it hasn't been documented,
|
||||
which has been corrected.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Developer builds now use -Wunused-function compilation option.
|
||||
|
||||
* One of our CI tests to run with "unusual/experimental/random"
|
||||
settings now also uses commit-graph and midx.
|
||||
|
||||
* When there are too many packfiles in a repository (which is not
|
||||
recommended), looking up an object in these would require
|
||||
consulting many pack .idx files; a new mechanism to have a single
|
||||
file that consolidates all of these .idx files is introduced.
|
||||
|
||||
* "git submodule update" is getting rewritten piece-by-piece into C.
|
||||
|
||||
* The code for computing history reachability has been shuffled,
|
||||
obtained a bunch of new tests to cover them, and then being
|
||||
improved.
|
||||
|
||||
* The unpack_trees() API used in checking out a branch and merging
|
||||
walks one or more trees along with the index. When the cache-tree
|
||||
in the index tells us that we are walking a tree whose flattened
|
||||
contents is known (i.e. matches a span in the index), as linearly
|
||||
scanning a span in the index is much more efficient than having to
|
||||
open tree objects recursively and listing their entries, the walk
|
||||
can be optimized, which has been done.
|
||||
|
||||
* When creating a thin pack, which allows objects to be made into a
|
||||
delta against another object that is not in the resulting pack but
|
||||
is known to be present on the receiving end, the code learned to
|
||||
take advantage of the reachability bitmap; this allows the server
|
||||
to send a delta against a base beyond the "boundary" commit.
|
||||
|
||||
* spatch transformation to replace boolean uses of !hashcmp() to
|
||||
newly introduced oideq() is added, and applied, to regain
|
||||
performance lost due to support of multiple hash algorithms.
|
||||
|
||||
* Fix a bug in which the same path could be registered under multiple
|
||||
worktree entries if the path was missing (for instance, was removed
|
||||
manually). Also, as a convenience, expand the number of cases in
|
||||
which --force is applicable.
|
||||
|
||||
* Split Documentation/config.txt for easier maintenance.
|
||||
(merge 6014363f0b nd/config-split later to maint).
|
||||
|
||||
* Test helper binaries clean-up.
|
||||
(merge c9a1f4161f nd/test-tool later to maint).
|
||||
|
||||
* Various tests have been updated to make it easier to swap the
|
||||
hash function used for object identification.
|
||||
(merge ae0c89d41b bc/hash-independent-tests later to maint).
|
||||
|
||||
* Update fsck.skipList implementation and documentation.
|
||||
(merge 371a655074 ab/fsck-skiplist later to maint).
|
||||
|
||||
* An alias that expands to another alias has so far been forbidden,
|
||||
but now it is allowed to create such an alias.
|
||||
|
||||
* Various test scripts have been updated for style and also correct
|
||||
handling of exit status of various commands.
|
||||
|
||||
* "gc --auto" ended up calling exit(-1) upon error, which has been
|
||||
corrected to use exit(1). Also the error reporting behaviour when
|
||||
daemonized has been updated to exit with zero status when stopping
|
||||
due to a previously discovered error (which implies there is no
|
||||
point running gc to improve the situation); we used to exit with
|
||||
failure in such a case.
|
||||
|
||||
* Various codepaths in the core-ish part learned to work on an
|
||||
arbitrary in-core index structure, not necessarily the default
|
||||
instance "the_index".
|
||||
(merge b3c7eef9b0 nd/the-index later to maint).
|
||||
|
||||
* Code clean-up in the internal machinery used by "git status" and
|
||||
"git commit --dry-run".
|
||||
(merge 73ba5d78b4 ss/wt-status-committable later to maint).
|
||||
|
||||
* Some environment variables that control the runtime options of Git
|
||||
used during tests are getting renamed for consistency.
|
||||
(merge 4231d1ba99 bp/rename-test-env-var later to maint).
|
||||
|
||||
* A pair of new extensions to the index file have been introduced.
|
||||
They allow the index file to be read in parallel for performance.
|
||||
|
||||
* The oidset API was built on top of the oidmap API which in turn is
|
||||
on the hashmap API. Replace the implementation to build on top of
|
||||
the khash API and gain performance.
|
||||
|
||||
* Over some transports, fetching objects with an exact commit object
|
||||
name can be done without first seeing the ref advertisements. The
|
||||
code has been optimized to exploit this.
|
||||
|
||||
* In a partial clone that will lazily be hydrated from the
|
||||
originating repository, we generally want to avoid "does this
|
||||
object exist (locally)?" on objects that we deliberately omitted
|
||||
when we created the clone. The cache-tree codepath (which is used
|
||||
to write a tree object out of the index) however insisted that the
|
||||
object exists, even for paths that are outside of the partial
|
||||
checkout area. The code has been updated to avoid such a check.
|
||||
|
||||
* To help developers, an EditorConfig file that attempts to follow
|
||||
the project convention has been added.
|
||||
(merge b548d698a0 bc/editorconfig later to maint).
|
||||
|
||||
* The result of coverage test can be combined with "git blame" to
|
||||
check the test coverage of code introduced recently with a new
|
||||
'coverage-diff' tool (in contrib/).
|
||||
(merge 783faedd65 ds/coverage-diff later to maint).
|
||||
|
||||
* An experiment to fuzz test a few areas, hopefully we can gain more
|
||||
coverage to various areas.
|
||||
|
||||
* More codepaths are moving away from hardcoded hash sizes.
|
||||
|
||||
* The way the Windows port figures out the current directory has been
|
||||
improved.
|
||||
|
||||
* The way DLLs are loaded on the Windows port has been improved.
|
||||
|
||||
* Some tests have been reorganized and renamed; "ls t/" now gives a
|
||||
better overview of what is tested for these scripts than before.
|
||||
|
||||
* "git rebase" and "git rebase -i" have been reimplemented in C.
|
||||
|
||||
* Windows port learned to use nano-second resolution file timestamps.
|
||||
|
||||
* The overly large Documentation/config.txt file have been split into
|
||||
million little pieces. This potentially allows each individual piece
|
||||
to be included into the manual page of the command it affects more easily.
|
||||
|
||||
* Replace three string-list instances used as look-up tables in "git
|
||||
fetch" with hashmaps.
|
||||
|
||||
* Unify code to read the author-script used in "git am" and the
|
||||
commands that use the sequencer machinery, e.g. "git rebase -i".
|
||||
|
||||
* In preparation to the day when we can deprecate and remove the
|
||||
"rebase -p", make sure we can skip and later remove tests for
|
||||
it.
|
||||
|
||||
* The history traversal used to implement the tag-following has been
|
||||
optimized by introducing a new helper.
|
||||
|
||||
* The helper function to refresh the cached stat information in the
|
||||
in-core index has learned to perform the lstat() part of the
|
||||
operation in parallel on multi-core platforms.
|
||||
|
||||
* The code to traverse objects for reachability, used to decide what
|
||||
objects are unreferenced and expendable, have been taught to also
|
||||
consider per-worktree refs of other worktrees as starting points to
|
||||
prevent data loss.
|
||||
|
||||
* "git add" needs to internally run "diff-files" equivalent, and the
|
||||
codepath learned the same optimization as "diff-files" has to run
|
||||
lstat(2) in parallel to find which paths have been updated in the
|
||||
working tree.
|
||||
|
||||
* The procedure to install dependencies before testing at Travis CI
|
||||
is getting revamped for both simplicity and flexibility, taking
|
||||
advantage of the recent move to the vm-based environment.
|
||||
|
||||
* The support for format-patch (and send-email) by the command-line
|
||||
completion script (in contrib/) has been simplified a bit.
|
||||
|
||||
* The revision walker machinery learned to take advantage of the
|
||||
commit generation numbers stored in the commit-graph file.
|
||||
|
||||
* The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
|
||||
|
||||
* The way -lcurl library gets linked has been simplified by taking
|
||||
advantage of the fact that we can just ask curl-config command how.
|
||||
|
||||
* Various functions have been audited for "-Wunused-parameter" warnings
|
||||
and bugs in them got fixed.
|
||||
|
||||
* A sanity check for start-up sequence has been added in the config
|
||||
API codepath.
|
||||
|
||||
* The build procedure to link for fuzzing test has been made
|
||||
customizable with a new Makefile variable.
|
||||
|
||||
* The way "git rebase" parses and forwards the command line options
|
||||
meant for underlying "git am" has been revamped, which fixed for
|
||||
options with parameters that were not passed correctly.
|
||||
|
||||
* Our testing framework uses a special i18n "poisoned localization"
|
||||
feature to find messages that ought to stay constant but are
|
||||
incorrectly marked to be translated. This feature has been made
|
||||
into a runtime option (it used to be a compile-time option).
|
||||
|
||||
* "git push" used to check ambiguities between object-names and
|
||||
refnames while processing the list of refs' old and new values,
|
||||
which was unnecessary (as it knew that it is feeding raw object
|
||||
names). This has been optimized out.
|
||||
|
||||
* The xcurl_off_t() helper function is used to cast size_t to
|
||||
curl_off_t, but some compilers gave warnings against the code to
|
||||
ensure the casting is done without wraparound, when size_t is
|
||||
narrower than curl_off_t. This warning has been squelched.
|
||||
|
||||
* Code preparation to replace ulong vars with size_t vars where
|
||||
appropriate continues.
|
||||
|
||||
* The "test installed Git" mode of our test suite has been updated to
|
||||
work better.
|
||||
|
||||
* A coding convention around the Coccinelle semantic patches to have
|
||||
two classes to ease code migration process has been proposed and
|
||||
its support has been added to the Makefile.
|
||||
|
||||
* The "container" mode of TravisCI is going away. Our .travis.yml
|
||||
file is getting prepared for the transition.
|
||||
(merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
|
||||
|
||||
* Our test scripts can now take the '-V' option as a synonym for the
|
||||
'--verbose-log' option.
|
||||
(merge a5f52c6dab sg/test-verbose-log later to maint).
|
||||
|
||||
|
||||
Fixes since v2.19
|
||||
-----------------
|
||||
|
||||
* "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.
|
||||
(merge 66e83d9b41 jk/trailer-fixes later to maint).
|
||||
|
||||
* Malformed or crafted data in packstream can make our code attempt
|
||||
to read or write past the allocated buffer and abort, instead of
|
||||
reporting an error, which has been fixed.
|
||||
|
||||
* "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.
|
||||
(merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
|
||||
|
||||
* 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.
|
||||
(merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
|
||||
|
||||
* Fix for a long-standing bug that leaves the index file corrupt when
|
||||
it shrinks during a partial commit.
|
||||
(merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
|
||||
|
||||
* Further fix for O_APPEND emulation on Windows
|
||||
(merge eeaf7ddac7 js/mingw-o-append later to maint).
|
||||
|
||||
* A corner case bugfix in "git rerere" code.
|
||||
(merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
|
||||
|
||||
* "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.
|
||||
(merge 84d938b732 nd/attr-pathspec-fix later to maint).
|
||||
|
||||
* Recent update broke the reachability algorithm when refs (e.g.
|
||||
tags) that point at objects that are not commit were involved,
|
||||
which has been fixed.
|
||||
|
||||
* "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.
|
||||
(merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
|
||||
|
||||
* The code to backfill objects in lazily cloned repository did not
|
||||
work correctly, which has been corrected.
|
||||
(merge e68302011c jt/lazy-object-fetch-fix later to maint).
|
||||
|
||||
* Update error messages given by "git remote" and make them consistent.
|
||||
(merge 5025425dff ms/remote-error-message-update later to maint).
|
||||
|
||||
* "git update-ref" learned to make both "--no-deref" and "--stdin"
|
||||
work at the same time.
|
||||
(merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
|
||||
|
||||
* Recently added "range-diff" had a corner-case bug to cause it
|
||||
segfault, which has been corrected.
|
||||
(merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
|
||||
|
||||
* 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.
|
||||
(merge 829a321569 ds/commit-graph-with-grafts later to maint).
|
||||
|
||||
* The mailmap file update.
|
||||
(merge 255eb03edf jn/mailmap-update later to maint).
|
||||
|
||||
* 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.
|
||||
(merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
|
||||
|
||||
* "git fetch $repo $object" in a partial clone did not correctly
|
||||
fetch the asked-for object that is referenced by an object in
|
||||
promisor packfile, which has been fixed.
|
||||
|
||||
* A corner-case bugfix.
|
||||
(merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
|
||||
|
||||
* Various fixes to "diff --color-moved-ws".
|
||||
|
||||
* 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.
|
||||
(merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
|
||||
|
||||
* The codepath to support the experimental split-index mode had
|
||||
remaining "racily clean" issues fixed.
|
||||
(merge 4c490f3d32 sg/split-index-racefix later to maint).
|
||||
|
||||
* "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.
|
||||
(merge 04005834ed np/log-graph-octopus-fix later to maint).
|
||||
|
||||
* "git range-diff" did not work well when the compared ranges had
|
||||
changes in submodules and the "--submodule=log" was used.
|
||||
|
||||
* 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.
|
||||
(merge f67b980771 jk/run-command-notdot later to maint).
|
||||
|
||||
* A mutex used in "git pack-objects" were not correctly initialized
|
||||
and this caused "git repack" to dump core on Windows.
|
||||
(merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
|
||||
|
||||
* 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.
|
||||
(merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
|
||||
|
||||
* 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.
|
||||
(merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
|
||||
|
||||
* The logic to determine the archive type "git archive" uses did not
|
||||
correctly kick in for "git archive --remote", 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.
|
||||
(merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
|
||||
|
||||
* Some codepaths failed to form a proper URL when .gitmodules record
|
||||
the URL to a submodule repository as relative to the repository of
|
||||
superproject, which has been corrected.
|
||||
(merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
|
||||
|
||||
* "git fetch" over protocol v2 into a shallow repository failed to
|
||||
fetch full history behind a new tip of history that was diverged
|
||||
before the cut-off point of the history that was previously fetched
|
||||
shallowly.
|
||||
|
||||
* The command line completion machinery (in contrib/) has been
|
||||
updated to allow the completion script to tweak the list of options
|
||||
that are reported by the parse-options machinery correctly.
|
||||
(merge 276b49ff34 nd/completion-negation later to maint).
|
||||
|
||||
* 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.
|
||||
(merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
|
||||
|
||||
* A regression in Git 2.12 era made "git fsck" fall into an infinite
|
||||
loop while processing truncated loose objects.
|
||||
(merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
|
||||
|
||||
* "git ls-remote $there foo" was broken by recent update for the
|
||||
protocol v2 and stopped showing refs that match 'foo' that are not
|
||||
refs/{heads,tags}/foo, which has been fixed.
|
||||
(merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
|
||||
|
||||
* Additional comment on a tricky piece of code to help developers.
|
||||
(merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
|
||||
|
||||
* A couple of tests used to leave the repository in a state that is
|
||||
deliberately corrupt, which have been corrected.
|
||||
(merge aa984dbe5e ab/pack-tests-cleanup later to maint).
|
||||
|
||||
* The submodule support has been updated to read from the blob at
|
||||
HEAD:.gitmodules when the .gitmodules file is missing from the
|
||||
working tree.
|
||||
(merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
|
||||
|
||||
* "git fetch" was a bit loose in parsing responses from the other side
|
||||
when talking over the protocol v2.
|
||||
|
||||
* "git rev-parse --exclude=* --branches --branches" (i.e. first
|
||||
saying "add only things that do not match '*' out of all branches"
|
||||
and then adding all branches, without any exclusion this time)
|
||||
worked as expected, but "--exclude=* --all --all" did not work the
|
||||
same way, which has been fixed.
|
||||
(merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
|
||||
|
||||
* "git send-email --transfer-encoding=..." in recent versions of Git
|
||||
sometimes produced an empty "Content-Transfer-Encoding:" header,
|
||||
which has been corrected.
|
||||
(merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
|
||||
|
||||
* The interface into "xdiff" library used to discover the offset and
|
||||
size of a generated patch hunk by first formatting it into the
|
||||
textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
|
||||
out. A new interface has been introduced to allow callers a more
|
||||
direct access to them.
|
||||
(merge 5eade0746e jk/xdiff-interface later to maint).
|
||||
|
||||
* Pathspec matching against a tree object were buggy when negative
|
||||
pathspec elements were involved, which has been fixed.
|
||||
(merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
|
||||
|
||||
* "git merge" and "git pull" that merges into an unborn branch used
|
||||
to completely ignore "--verify-signatures", which has been
|
||||
corrected.
|
||||
(merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
|
||||
|
||||
* "git rebase --autostash" did not correctly re-attach the HEAD at times.
|
||||
|
||||
* "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
|
||||
quite work, which has been corrected.
|
||||
(merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
|
||||
|
||||
* When editing a patch in a "git add -i" session, a hunk could be
|
||||
made to no-op. The "git apply" program used to reject a patch with
|
||||
such a no-op hunk to catch user mistakes, but it is now updated to
|
||||
explicitly allow a no-op hunk in an edited patch.
|
||||
(merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
|
||||
|
||||
* The URL to an MSDN page in a comment has been updated.
|
||||
(merge 2ef2ae2917 js/mingw-msdn-url later to maint).
|
||||
|
||||
* "git ls-remote --sort=<thing>" can feed an object that is not yet
|
||||
available into the comparison machinery and segfault, which has
|
||||
been corrected to check such a request upfront and reject it.
|
||||
|
||||
* When "git bundle" aborts due to an empty commit ranges
|
||||
(i.e. resulting in an empty pack), it left a file descriptor to an
|
||||
lockfile open, which resulted in leftover lockfile on Windows where
|
||||
you cannot remove a file with an open file descriptor. This has
|
||||
been corrected.
|
||||
(merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
|
||||
|
||||
* "git format-patch --stat=<width>" can be used to specify the width
|
||||
used by the diffstat (shown in the cover letter).
|
||||
(merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).
|
||||
|
||||
* The way .git/index and .git/sharedindex* files were initially
|
||||
created gave these files different perm bits until they were
|
||||
adjusted for shared repository settings. This was made consistent.
|
||||
(merge c9d6c78870 cc/shared-index-permbits later to maint).
|
||||
|
||||
* "git rebase --stat" to transplant a piece of history onto a totally
|
||||
unrelated history were not working before and silently showed wrong
|
||||
result. With the recent reimplementation in C, it started to instead
|
||||
die with an error message, as the original logic was not prepared
|
||||
to cope with this case. This has now been fixed.
|
||||
|
||||
* The advice message to tell the user to migrate an existing graft
|
||||
file to the replace system when a graft file was read was shown
|
||||
even when "git replace --convert-graft-file" command, which is the
|
||||
way the message suggests to use, was running, which made little
|
||||
sense.
|
||||
(merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).
|
||||
|
||||
* "git diff --raw" lost ellipses to adjust the output columns for
|
||||
some time now, but the documentation still showed them.
|
||||
|
||||
* Code cleanup, docfix, build fix, etc.
|
||||
(merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
|
||||
(merge b9b07efdb2 tg/conflict-marker-size later to maint).
|
||||
(merge fa0aeea770 sg/doc-trace-appends later to maint).
|
||||
(merge d64324cb60 tb/void-check-attr later to maint).
|
||||
(merge c3b9bc94b9 en/double-semicolon-fix later to maint).
|
||||
(merge 79336116f5 sg/t3701-tighten-trace later to maint).
|
||||
(merge 801fa63a90 jk/dev-build-format-security later to maint).
|
||||
(merge 0597dd62ba sb/string-list-remove-unused later to maint).
|
||||
(merge db2d36fad8 bw/protocol-v2 later to maint).
|
||||
(merge 456d7cd3a9 sg/split-index-test later to maint).
|
||||
(merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
|
||||
(merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
|
||||
(merge 55f6bce2c9 fe/doc-updates later to maint).
|
||||
(merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
|
||||
(merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
|
||||
(merge 4c399442f7 ma/commit-graph-docs later to maint).
|
||||
(merge fc0503b04e ma/t1400-undebug-test later to maint).
|
||||
(merge e56b53553a nd/packobjectshook-doc-fix later to maint).
|
||||
(merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
|
||||
(merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
|
||||
(merge ad0b8f9575 mw/doc-typofixes later to maint).
|
||||
(merge d9f079ad1a jc/how-to-document-api later to maint).
|
||||
(merge b1492bf315 ma/t7005-bash-workaround later to maint).
|
||||
(merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
|
||||
(merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
|
||||
(merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
|
||||
(merge 61018fe9e0 du/cherry-is-plumbing later to maint).
|
||||
(merge c7e5fe79b9 sb/strbuf-h-update later to maint).
|
||||
(merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
|
||||
(merge 2e3c894f4b tq/branch-style-fix later to maint).
|
||||
(merge c5d844af9c sg/doc-show-branch-typofix later to maint).
|
||||
(merge 081d91618b ah/doc-updates later to maint).
|
||||
(merge b84c783882 jc/cocci-preincr later to maint).
|
||||
(merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
|
||||
(merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
|
||||
(merge 3063477445 tb/char-may-be-unsigned later to maint).
|
||||
(merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
|
||||
(merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
|
||||
(merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
|
||||
(merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
|
||||
(merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
|
||||
(merge d27525e519 ss/msvc-strcasecmp later to maint).
|
@ -1,20 +0,0 @@
|
||||
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.
|
@ -1,18 +0,0 @@
|
||||
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.
|
@ -1,451 +0,0 @@
|
||||
Git 2.21 Release Notes
|
||||
======================
|
||||
|
||||
Backward Compatibility Notes
|
||||
----------------------------
|
||||
|
||||
* Historically, the "-m" (mainline) option can only be used for "git
|
||||
cherry-pick" and "git revert" when working with a merge commit.
|
||||
This version of Git no longer warns or errors out when working with
|
||||
a single-parent commit, as long as the argument to the "-m" option
|
||||
is 1 (i.e. it has only one parent, and the request is to pick or
|
||||
revert relative to that first parent). Scripts that relied on the
|
||||
behaviour may get broken with this change.
|
||||
|
||||
|
||||
Updates since v2.20
|
||||
-------------------
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* The "http.version" configuration variable can be used with recent
|
||||
enough versions of cURL library to force the version of HTTP used
|
||||
to talk when fetching and pushing.
|
||||
|
||||
* Small fixes and features for fast-export and fast-import, mostly on
|
||||
the fast-export side has been made.
|
||||
|
||||
* "git push $there $src:$dst" rejects when $dst is not a fully
|
||||
qualified refname and it is not clear what the end user meant. The
|
||||
codepath has been taught to give a clearer error message, and also
|
||||
guess where the push should go by taking the type of the pushed
|
||||
object into account (e.g. a tag object would want to go under
|
||||
refs/tags/).
|
||||
|
||||
* "git checkout [<tree-ish>] path..." learned to report the number of
|
||||
paths that have been checked out of the index or the tree-ish,
|
||||
which gives it the same degree of noisy-ness as the case in which
|
||||
the command checks out a branch. "git checkout -m <pathspec>" to
|
||||
undo conflict resolution gives a similar message.
|
||||
|
||||
* "git quiltimport" learned "--keep-non-patch" option.
|
||||
|
||||
* "git worktree remove" and "git worktree move" refused to work when
|
||||
there is a submodule involved. This has been loosened to ignore
|
||||
uninitialized submodules.
|
||||
|
||||
* "git cherry-pick -m1" was forbidden when picking a non-merge
|
||||
commit, even though there _is_ parent number 1 for such a commit.
|
||||
This was done to avoid mistakes back when "cherry-pick" was about
|
||||
picking a single commit, but is no longer useful with "cherry-pick"
|
||||
that can pick a range of commits. Now the "-m$num" option is
|
||||
allowed when picking any commit, as long as $num names an existing
|
||||
parent of the commit.
|
||||
|
||||
* Update "git multimail" from the upstream.
|
||||
|
||||
* "git p4" update.
|
||||
|
||||
* The "--format=<placeholder>" option of for-each-ref, branch and tag
|
||||
learned to show a few more traits of objects that can be learned by
|
||||
the object_info API.
|
||||
|
||||
* "git rebase -i" learned to re-execute a command given with 'exec'
|
||||
to run after it failed the last time.
|
||||
|
||||
* "git diff --color-moved-ws" updates.
|
||||
|
||||
* Custom userformat "log --format" learned %S atom that stands for
|
||||
the tip the traversal reached the commit from, i.e. --source.
|
||||
|
||||
* "git instaweb" learned to drive http.server that comes with
|
||||
"batteries included" Python installation (both Python2 & 3).
|
||||
|
||||
* A new encoding UTF-16LE-BOM has been invented to force encoding to
|
||||
UTF-16 with BOM in little endian byte order, which cannot be directly
|
||||
generated by using iconv.
|
||||
|
||||
* A new date format "--date=human" that morphs its output depending
|
||||
on how far the time is from the current time has been introduced.
|
||||
"--date=auto:human" can be used to use this new format (or any
|
||||
existing format) when the output is going to the pager or to the
|
||||
terminal, and otherwise the default format.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Code clean-up with optimization for the codepath that checks
|
||||
(non-)existence of loose objects.
|
||||
|
||||
* More codepaths have become aware of working with in-core repository
|
||||
instances other than the default "the_repository".
|
||||
|
||||
* The "strncat()" function is now among the banned functions.
|
||||
|
||||
* Portability updates for the HPE NonStop platform.
|
||||
|
||||
* Earlier we added "-Wformat-security" to developer builds, assuming
|
||||
that "-Wall" (which includes "-Wformat" which in turn is required
|
||||
to use "-Wformat-security") is always in effect. This is not true
|
||||
when config.mak.autogen is in use, unfortunately. This has been
|
||||
fixed by unconditionally adding "-Wall" to developer builds.
|
||||
|
||||
* The loose object cache used to optimize existence look-up has been
|
||||
updated.
|
||||
|
||||
* Flaky tests can now be repeatedly run under load with the
|
||||
"--stress" option.
|
||||
|
||||
* Documentation/Makefile is getting prepared for manpage
|
||||
localization.
|
||||
|
||||
* "git fetch-pack" now can talk the version 2 protocol.
|
||||
|
||||
* sha-256 hash has been added and plumbed through the code to allow
|
||||
building Git with the "NewHash".
|
||||
|
||||
* Debugging help for http transport.
|
||||
|
||||
* "git fetch --deepen=<more>" has been corrected to work over v2
|
||||
protocol.
|
||||
|
||||
* The code to walk tree objects has been taught that we may be
|
||||
working with object names that are not computed with SHA-1.
|
||||
|
||||
* The in-core repository instances are passed through more codepaths.
|
||||
|
||||
* Update the protocol message specification to allow only the limited
|
||||
use of scaled quantities. This is to ensure potential compatibility
|
||||
issues will not get out of hand.
|
||||
|
||||
* Micro-optimize the code that prepares commit objects to be walked
|
||||
by "git rev-list" when the commit-graph is available.
|
||||
|
||||
* "git fetch" and "git upload-pack" learned to send all exchanges over
|
||||
the sideband channel while talking the v2 protocol.
|
||||
|
||||
* The codepath to write out commit-graph has been optimized by
|
||||
following the usual pattern of visiting objects in in-pack order.
|
||||
|
||||
* The codepath to show progress meter while writing out commit-graph
|
||||
file has been improved.
|
||||
|
||||
* Cocci rules have been updated to encourage use of strbuf_addbuf().
|
||||
|
||||
* "git rebase --merge" has been reimplemented by reusing the internal
|
||||
machinery used for "git rebase -i".
|
||||
|
||||
* More code in "git bisect" has been rewritten in C.
|
||||
|
||||
* Instead of going through "git-rebase--am" scriptlet to use the "am"
|
||||
backend, the built-in version of "git rebase" learned to drive the
|
||||
"am" backend directly.
|
||||
|
||||
* The assumption to work on the single "in-core index" instance has
|
||||
been reduced from the library-ish part of the codebase.
|
||||
|
||||
* The test lint learned to catch non-portable "sed" options.
|
||||
|
||||
* "git pack-objects" learned another algorithm to compute the set of
|
||||
objects to send, that trades the resulting packfile off to save
|
||||
traversal cost to favor small pushes.
|
||||
|
||||
* The travis CI scripts have been corrected to build Git with the
|
||||
compiler(s) of our choice.
|
||||
|
||||
* "git submodule update" learned to abort early when core.worktree
|
||||
for the submodule is not set correctly to prevent spreading damage.
|
||||
|
||||
* Test suite has been adjusted to run on Azure Pipeline.
|
||||
|
||||
* Running "Documentation/doc-diff x" from anywhere other than the
|
||||
top-level of the working tree did not show the usage string
|
||||
correctly, which has been fixed.
|
||||
|
||||
* Use of the sparse tool got easier to customize from the command
|
||||
line to help developers.
|
||||
|
||||
* A new target "coverage-prove" to run the coverage test under
|
||||
"prove" has been added.
|
||||
|
||||
* A flakey "p4" test has been removed.
|
||||
|
||||
* The code and tests assume that the system supplied iconv() would
|
||||
always use BOM in its output when asked to encode to UTF-16 (or
|
||||
UTF-32), but apparently some implementations output big-endian
|
||||
without BOM. A compile-time knob has been added to help such
|
||||
systems (e.g. NonStop) to add BOM to the output to increase
|
||||
portability.
|
||||
|
||||
|
||||
Fixes since v2.20
|
||||
-----------------
|
||||
|
||||
* Updates for corner cases in merge-recursive.
|
||||
(merge cc4cb0902c en/merge-path-collision later to maint).
|
||||
|
||||
* "git checkout frotz" (without any double-dash) avoids ambiguity by
|
||||
making sure 'frotz' cannot be interpreted as a revision and as a
|
||||
path at the same time. This safety has been updated to check also
|
||||
a unique remote-tracking branch 'frotz' in a remote, when dwimming
|
||||
to create a local branch 'frotz' out of a remote-tracking branch
|
||||
'frotz' from a remote.
|
||||
(merge be4908f103 nd/checkout-dwim-fix later to maint).
|
||||
|
||||
* Refspecs configured with "git -c var=val clone" did not propagate
|
||||
to the resulting repository, which has been corrected.
|
||||
(merge 7eae4a3ac4 sg/clone-initial-fetch-configuration later to maint).
|
||||
|
||||
* A properly configured username/email is required under
|
||||
user.useConfigOnly in order to create commits; now "git stash"
|
||||
(even though it creates commit objects to represent stash entries)
|
||||
command is exempt from the requirement.
|
||||
(merge 3bc2111fc2 sd/stash-wo-user-name later to maint).
|
||||
|
||||
* The http-backend CGI process did not correctly clean up the child
|
||||
processes it spawns to run upload-pack etc. when it dies itself,
|
||||
which has been corrected.
|
||||
(merge 02818a98d7 mk/http-backend-kill-children-before-exit later to maint).
|
||||
|
||||
* "git rev-list --exclude-promisor-objects" had to take an object
|
||||
that does not exist locally (and is lazily available) from the
|
||||
command line without barfing, but the code dereferenced NULL.
|
||||
(merge 4cf67869b2 md/list-lazy-objects-fix later to maint).
|
||||
|
||||
* The traversal over tree objects has learned to honor
|
||||
":(attr:label)" pathspec match, which has been implemented only for
|
||||
enumerating paths on the filesystem.
|
||||
(merge 5a0b97b34c nd/attr-pathspec-in-tree-walk later to maint).
|
||||
|
||||
* BSD port updates.
|
||||
(merge 4e3ecbd439 cb/openbsd-allows-reading-directory later to maint).
|
||||
(merge b6bdc2a0f5 cb/t5004-empty-tar-archive-fix later to maint).
|
||||
(merge 82cbc8cde2 cb/test-lint-cp-a later to maint).
|
||||
|
||||
* Lines that begin with a certain keyword that come over the wire, as
|
||||
well as lines that consist only of one of these keywords, ought to
|
||||
be painted in color for easier eyeballing, but the latter was
|
||||
broken ever since the feature was introduced in 2.19, which has
|
||||
been corrected.
|
||||
(merge 1f67290450 hn/highlight-sideband-keywords later to maint).
|
||||
|
||||
* "git log -G<regex>" looked for a hunk in the "git log -p" patch
|
||||
output that contained a string that matches the given pattern.
|
||||
Optimize this code to ignore binary files, which by default will
|
||||
not show any hunk that would match any pattern (unless textconv or
|
||||
the --text option is in effect, that is).
|
||||
(merge e0e7cb8080 tb/log-G-binary later to maint).
|
||||
|
||||
* "git submodule update" ought to use a single job unless asked, but
|
||||
by mistake used multiple jobs, which has been fixed.
|
||||
(merge e3a9d1aca9 sb/submodule-fetchjobs-default-to-one later to maint).
|
||||
|
||||
* "git stripspace" should be usable outside a git repository, but
|
||||
under the "-s" or "-c" mode, it didn't.
|
||||
(merge 957da75802 jn/stripspace-wo-repository later to maint).
|
||||
|
||||
* Some of the documentation pages formatted incorrectly with
|
||||
Asciidoctor, which have been fixed.
|
||||
(merge b62eb1d2f4 ma/asciidoctor later to maint).
|
||||
|
||||
* The core.worktree setting in a submodule repository should not be
|
||||
pointing at a directory when the submodule loses its working tree
|
||||
(e.g. getting deinit'ed), but the code did not properly maintain
|
||||
this invariant.
|
||||
|
||||
* With zsh, "git cmd path<TAB>" was completed to "git cmd path name"
|
||||
when the completed path has a special character like SP in it,
|
||||
without any attempt to keep "path name" a single filename. This
|
||||
has been fixed to complete it to "git cmd path\ name" just like
|
||||
Bash completion does.
|
||||
|
||||
* The test suite tried to see if it is run under bash, but the check
|
||||
itself failed under some other implementations of shell (notably
|
||||
under NetBSD). This has been corrected.
|
||||
(merge 54ea72f09c sg/test-bash-version-fix later to maint).
|
||||
|
||||
* "git gc" and "git repack" did not close the open packfiles that
|
||||
they found unneeded before removing them, which didn't work on a
|
||||
platform incapable of removing an open file. This has been
|
||||
corrected.
|
||||
(merge 5bdece0d70 js/gc-repack-close-before-remove later to maint).
|
||||
|
||||
* The code to drive GIT_EXTERNAL_DIFF command relied on the string
|
||||
returned from getenv() to be non-volatile, which is not true, that
|
||||
has been corrected.
|
||||
(merge 6776a84dae kg/external-diff-save-env later to maint).
|
||||
|
||||
* There were many places the code relied on the string returned from
|
||||
getenv() to be non-volatile, which is not true, that have been
|
||||
corrected.
|
||||
(merge 0da0e9268b jk/save-getenv-result later to maint).
|
||||
|
||||
* The v2 upload-pack protocol implementation failed to honor
|
||||
hidden-ref configuration, which has been corrected.
|
||||
(merge e20b4192a3 jk/proto-v2-hidden-refs-fix later to maint).
|
||||
|
||||
* "git fetch --recurse-submodules" may not fetch the necessary commit
|
||||
that is bound to the superproject, which is getting corrected.
|
||||
(merge be76c21282 sb/submodule-recursive-fetch-gets-the-tip later to maint).
|
||||
|
||||
* "git rebase" internally runs "checkout" to switch between branches,
|
||||
and the command used to call the post-checkout hook, but the
|
||||
reimplementation stopped doing so, which is getting fixed.
|
||||
|
||||
* "git add -e" got confused when the change it wants to let the user
|
||||
edit is smaller than the previous change that was left over in a
|
||||
temporary file.
|
||||
(merge fa6f225e01 js/add-e-clear-patch-before-stating later to maint).
|
||||
|
||||
* "git p4" failed to update a shelved change when there were moved
|
||||
files, which has been corrected.
|
||||
(merge 7a10946ab9 ld/git-p4-shelve-update-fix later to maint).
|
||||
|
||||
* The codepath to read from the commit-graph file attempted to read
|
||||
past the end of it when the file's table-of-contents was corrupt.
|
||||
|
||||
* The compat/obstack code had casts that -Wcast-function-type
|
||||
compilation option found questionable.
|
||||
(merge 764473d257 sg/obstack-cast-function-type-fix later to maint).
|
||||
|
||||
* An obvious typo in an assertion error message has been fixed.
|
||||
(merge 3c27e2e059 cc/test-ref-store-typofix later to maint).
|
||||
|
||||
* In Git for Windows, "git clone \\server\share\path" etc. that uses
|
||||
UNC paths from command line had bad interaction with its shell
|
||||
emulation.
|
||||
|
||||
* "git add --ignore-errors" did not work as advertised and instead
|
||||
worked as an unintended synonym for "git add --renormalize", which
|
||||
has been fixed.
|
||||
(merge e2c2a37545 jk/add-ignore-errors-bit-assignment-fix later to maint).
|
||||
|
||||
* On a case-insensitive filesystem, we failed to compare the part of
|
||||
the path that is above the worktree directory in an absolute
|
||||
pathname, which has been corrected.
|
||||
|
||||
* Asking "git check-attr" about a macro (e.g. "binary") on a specific
|
||||
path did not work correctly, even though "git check-attr -a" listed
|
||||
such a macro correctly. This has been corrected.
|
||||
(merge 7b95849be4 jk/attr-macro-fix later to maint).
|
||||
|
||||
* "git pack-objects" incorrectly used uninitialized mutex, which has
|
||||
been corrected.
|
||||
(merge edb673cf10 ph/pack-objects-mutex-fix later to maint).
|
||||
|
||||
* "git checkout -b <new> [HEAD]" to create a new branch from the
|
||||
current commit and check it out ought to be a no-op in the index
|
||||
and the working tree in normal cases, but there are corner cases
|
||||
that do require updates to the index and the working tree. Running
|
||||
it immediately after "git clone --no-checkout" is one of these
|
||||
cases that an earlier optimization kicked in incorrectly, which has
|
||||
been fixed.
|
||||
(merge 8424bfd45b bp/checkout-new-branch-optim later to maint).
|
||||
|
||||
* "git diff --color-moved --cc --stat -p" did not work well due to
|
||||
funny interaction between a bug in color-moved and the rest, which
|
||||
has been fixed.
|
||||
(merge dac03b5518 jk/diff-cc-stat-fixes later to maint).
|
||||
|
||||
* When GIT_SEQUENCE_EDITOR is set, the command was incorrectly
|
||||
started when modes of "git rebase" that implicitly uses the
|
||||
machinery for the interactive rebase are run, which has been
|
||||
corrected.
|
||||
(merge 891d4a0313 pw/no-editor-in-rebase-i-implicit later to maint).
|
||||
|
||||
* The commit-graph facility did not work when in-core objects that
|
||||
are promoted from unknown type to commit (e.g. a commit that is
|
||||
accessed via a tag that refers to it) were involved, which has been
|
||||
corrected.
|
||||
(merge 4468d4435c sg/object-as-type-commit-graph-fix later to maint).
|
||||
|
||||
* "git fetch" output cleanup.
|
||||
(merge dc40b24df4 nd/fetch-compact-update later to maint).
|
||||
|
||||
* "git cat-file --batch" reported a dangling symbolic link by
|
||||
mistake, when it wanted to report that a given name is ambiguous.
|
||||
|
||||
* Documentation around core.crlf has been updated.
|
||||
(merge c9446f0504 jk/autocrlf-overrides-eol-doc later to maint).
|
||||
|
||||
* The documentation of "git commit-tree" said that the command
|
||||
understands "--gpg-sign" in addition to "-S", but the command line
|
||||
parser did not know about the longhand, which has been corrected.
|
||||
|
||||
* "git rebase -x $cmd" did not reject multi-line command, even though
|
||||
the command is incapable of handling such a command. It now is
|
||||
rejected upfront.
|
||||
(merge c762aada1a pw/rebase-x-sanity-check later to maint).
|
||||
|
||||
* Output from "git help" was not correctly aligned, which has been
|
||||
fixed.
|
||||
(merge 6195a76da4 nd/help-align-command-desc later to maint).
|
||||
|
||||
* The "git submodule summary" subcommand showed shortened commit
|
||||
object names by mechanically truncating them at 7-hexdigit, which
|
||||
has been improved to let "rev-parse --short" scale the length of
|
||||
the abbreviation with the size of the repository.
|
||||
(merge 0586a438f6 sh/submodule-summary-abbrev-fix later to maint).
|
||||
|
||||
* The way the OSX build jobs updates its build environment used the
|
||||
"--quiet" option to "brew update" command, but it wasn't all that
|
||||
quiet to be useful. The use of the option has been replaced with
|
||||
an explicit redirection to the /dev/null (which incidentally would
|
||||
have worked around a breakage by recent updates to homebrew, which
|
||||
has fixed itself already).
|
||||
(merge a1ccaedd62 sg/travis-osx-brew-breakage-workaround later to maint).
|
||||
|
||||
* "git --work-tree=$there --git-dir=$here describe --dirty" did not
|
||||
work correctly as it did not pay attention to the location of the
|
||||
worktree specified by the user by mistake, which has been
|
||||
corrected.
|
||||
(merge c801170b0c ss/describe-dirty-in-the-right-directory later to maint).
|
||||
|
||||
* "git fetch" over protocol v2 that needs to make a second connection
|
||||
to backfill tags did not clear a variable that holds shallow
|
||||
repository information correctly, leading to an access of freed
|
||||
piece of memory.
|
||||
|
||||
* Some errors from the other side coming over smart HTTP transport
|
||||
were not noticed, which has been corrected.
|
||||
|
||||
* Code cleanup, docfix, build fix, etc.
|
||||
(merge 89ba9a79ae hb/t0061-dot-in-path-fix later to maint).
|
||||
(merge d173e799ea sb/diff-color-moved-config-option-fixup later to maint).
|
||||
(merge a8f5a59067 en/directory-renames-nothanks-doc-update later to maint).
|
||||
(merge ec36c42a63 nd/indentation-fix later to maint).
|
||||
(merge f116ee21cd do/gitweb-strict-export-conf-doc later to maint).
|
||||
(merge 112ea42663 fd/gitweb-snapshot-conf-doc-fix later to maint).
|
||||
(merge 1cadad6f65 tb/use-common-win32-pathfuncs-on-cygwin later to maint).
|
||||
(merge 57e9dcaa65 km/rebase-doc-typofix later to maint).
|
||||
(merge b8b4cb27e6 ds/gc-doc-typofix later to maint).
|
||||
(merge 3b3357626e nd/style-opening-brace later to maint).
|
||||
(merge b4583d5595 es/doc-worktree-guessremote-config later to maint).
|
||||
(merge cce99cd8c6 ds/commit-graph-assert-missing-parents later to maint).
|
||||
(merge 0650614982 cy/completion-typofix later to maint).
|
||||
(merge 6881925ef5 rs/sha1-file-close-mapped-file-on-error later to maint).
|
||||
(merge bd8d6f0def en/show-ref-doc-fix later to maint).
|
||||
(merge 1747125e2c cc/partial-clone-doc-typofix later to maint).
|
||||
(merge e01378753d cc/fetch-error-message-fix later to maint).
|
||||
(merge 54e8c11215 jk/remote-insteadof-cleanup later to maint).
|
||||
(merge d609615f48 js/test-git-installed later to maint).
|
||||
(merge ba170517be ja/doc-style-fix later to maint).
|
||||
(merge 86fb1c4e77 km/init-doc-typofix later to maint).
|
||||
(merge 5cfd4a9d10 nd/commit-doc later to maint).
|
||||
(merge 9fce19a431 ab/diff-tree-doc-fix later to maint).
|
||||
(merge 2e285e7803 tz/gpg-test-fix later to maint).
|
||||
(merge 5427de960b kl/pretty-doc-markup-fix later to maint).
|
||||
(merge 3815f64b0d js/mingw-host-cpu later to maint).
|
||||
(merge 5fe81438b5 rj/sequencer-sign-off-header-static later to maint).
|
||||
(merge 18a4f6be6b nd/fileno-may-be-macro later to maint).
|
||||
(merge 99e9ab54ab kd/t0028-octal-del-is-377-not-777 later to maint).
|
@ -1,12 +0,0 @@
|
||||
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.
|
@ -1,597 +0,0 @@
|
||||
Git 2.22 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.21
|
||||
-------------------
|
||||
|
||||
Backward compatibility note
|
||||
|
||||
* The filter specification "--filter=sparse:path=<path>" used to
|
||||
create a lazy/partial clone has been removed. Using a blob that is
|
||||
part of the project as sparse specification is still supported with
|
||||
the "--filter=sparse:oid=<blob>" option.
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* "git checkout --no-overlay" can be used to trigger a new mode of
|
||||
checking out paths out of the tree-ish, that allows paths that
|
||||
match the pathspec that are in the current index and working tree
|
||||
and are not in the tree-ish.
|
||||
|
||||
* The %(trailers) formatter in "git log --format=..." now allows to
|
||||
optionally pick trailers selectively by keyword, show only values,
|
||||
etc.
|
||||
|
||||
* Four new configuration variables {author,committer}.{name,email}
|
||||
have been introduced to override user.{name,email} in more specific
|
||||
cases.
|
||||
|
||||
* Command-line completion (in contrib/) learned to tab-complete the
|
||||
"git submodule absorbgitdirs" subcommand.
|
||||
|
||||
* "git branch" learned a new subcommand "--show-current".
|
||||
|
||||
* Output from "diff --cc" did not show the original paths when the
|
||||
merge involved renames. A new option adds the paths in the
|
||||
original trees to the output.
|
||||
|
||||
* The command line completion (in contrib/) has been taught to
|
||||
complete more subcommand parameters.
|
||||
|
||||
* The final report from "git bisect" used to show the suspected
|
||||
culprit using a raw "diff-tree", with which there is no output for
|
||||
a merge commit. This has been updated to use a more modern and
|
||||
human readable output that still is concise enough.
|
||||
|
||||
* "git rebase --rebase-merges" replaces its old "--preserve-merges"
|
||||
option; the latter is now marked as deprecated.
|
||||
|
||||
* Error message given while cloning with --recurse-submodules has
|
||||
been updated.
|
||||
|
||||
* The completion helper code now pays attention to repository-local
|
||||
configuration (when available), which allows --list-cmds to honour
|
||||
a repository specific setting of completion.commands, for example.
|
||||
|
||||
* "git mergetool" learned to offer Sublime Merge (smerge) as one of
|
||||
its backends.
|
||||
|
||||
* A new hook "post-index-change" is called when the on-disk index
|
||||
file changes, which can help e.g. a virtualized working tree
|
||||
implementation.
|
||||
|
||||
* "git difftool" can now run outside a repository.
|
||||
|
||||
* "git checkout -m <other>" was about carrying the differences
|
||||
between HEAD and the working-tree files forward while checking out
|
||||
another branch, and ignored the differences between HEAD and the
|
||||
index. The command has been taught to abort when the index and the
|
||||
HEAD are different.
|
||||
|
||||
* A progress indicator has been added to the "index-pack" step, which
|
||||
often makes users wait for completion during "git clone".
|
||||
|
||||
* "git submodule" learns "set-branch" subcommand that allows the
|
||||
submodule.*.branch settings to be modified.
|
||||
|
||||
* "git merge-recursive" backend recently learned a new heuristics to
|
||||
infer file movement based on how other files in the same directory
|
||||
moved. As this is inherently less robust heuristics than the one
|
||||
based on the content similarity of the file itself (rather than
|
||||
based on what its neighbours are doing), it sometimes gives an
|
||||
outcome unexpected by the end users. This has been toned down to
|
||||
leave the renamed paths in higher/conflicted stages in the index so
|
||||
that the user can examine and confirm the result.
|
||||
|
||||
* "git tag" learned to give an advice suggesting it might be a
|
||||
mistake when creating an annotated or signed tag that points at
|
||||
another tag.
|
||||
|
||||
* The "git pack-objects" command learned to report the number of
|
||||
objects it packed via the trace2 mechanism.
|
||||
|
||||
* The list of conflicted paths shown in the editor while concluding a
|
||||
conflicted merge was shown above the scissors line when the
|
||||
clean-up mode is set to "scissors", even though it was commented
|
||||
out just like the list of updated paths and other information to
|
||||
help the user explain the merge better.
|
||||
|
||||
* The trace2 tracing facility learned to auto-generate a filename
|
||||
when told to log to a directory.
|
||||
|
||||
* "git clone" learned a new --server-option option when talking over
|
||||
the protocol version 2.
|
||||
|
||||
* The connectivity bitmaps are created by default in bare
|
||||
repositories now; also the pathname hash-cache is created by
|
||||
default to avoid making crappy deltas when repacking.
|
||||
|
||||
* "git branch new A...B" and "git checkout -b new A...B" have been
|
||||
taught that in their contexts, the notation A...B means "the merge
|
||||
base between these two commits", just like "git checkout A...B"
|
||||
detaches HEAD at that commit.
|
||||
|
||||
* Update "git difftool" and "git mergetool" so that the combinations
|
||||
of {diff,merge}.{tool,guitool} configuration variables serve as
|
||||
fallback settings of each other in a sensible order.
|
||||
|
||||
* The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
|
||||
mode; they are now explicitly marked as mutually incompatible.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* The diff machinery, one of the oldest parts of the system, which
|
||||
long predates the parse-options API, uses fairly long and complex
|
||||
handcrafted option parser. This is being rewritten to use the
|
||||
parse-options API.
|
||||
|
||||
* The implementation of pack-redundant has been updated for
|
||||
performance in a repository with many packfiles.
|
||||
|
||||
* A more structured way to obtain execution trace has been added.
|
||||
|
||||
* "git prune" has been taught to take advantage of reachability
|
||||
bitmap when able.
|
||||
|
||||
* The command line parser of "git commit-tree" has been rewritten to
|
||||
use the parse-options API.
|
||||
|
||||
* Suggest GitGitGadget instead of submitGit as a way to submit
|
||||
patches based on GitHub PR to us.
|
||||
|
||||
* The test framework has been updated to help developers by making it
|
||||
easier to run most of the tests under different versions of
|
||||
over-the-wire protocols.
|
||||
|
||||
* Dev support update to make it easier to compare two formatted
|
||||
results from our documentation.
|
||||
|
||||
* The scripted "git rebase" implementation has been retired.
|
||||
|
||||
* "git multi-pack-index verify" did not scale well with the number of
|
||||
packfiles, which is being improved.
|
||||
|
||||
* "git stash" has been rewritten in C.
|
||||
|
||||
* The "check-docs" Makefile target to support developers has been
|
||||
updated.
|
||||
|
||||
* The tests have been updated not to rely on the abbreviated option
|
||||
names the parse-options API offers, to protect us from an
|
||||
abbreviated form of an option that used to be unique within the
|
||||
command getting non-unique when a new option that share the same
|
||||
prefix is added.
|
||||
|
||||
* The scripted version of "git rebase -i" wrote and rewrote the todo
|
||||
list many times during a single step of its operation, and the
|
||||
recent C-rewrite made a faithful conversion of the logic to C. The
|
||||
implementation has been updated to carry necessary information
|
||||
around in-core to avoid rewriting the same file over and over
|
||||
unnecessarily.
|
||||
|
||||
* Test framework update to more robustly clean up leftover files and
|
||||
processes after tests are done.
|
||||
|
||||
* Conversion from unsigned char[20] to struct object_id continues.
|
||||
|
||||
* While running "git diff" in a lazy clone, we can upfront know which
|
||||
missing blobs we will need, instead of waiting for the on-demand
|
||||
machinery to discover them one by one. The code learned to aim to
|
||||
achieve better performance by batching the request for these
|
||||
promised blobs.
|
||||
|
||||
* During an initial "git clone --depth=..." partial clone, it is
|
||||
pointless to spend cycles for a large portion of the connectivity
|
||||
check that enumerates and skips promisor objects (which by
|
||||
definition is all objects fetched from the other side). This has
|
||||
been optimized out.
|
||||
|
||||
* Mechanically and systematically drop "extern" from function
|
||||
declaration.
|
||||
|
||||
* The script to aggregate perf result unconditionally depended on
|
||||
libjson-perl even though it did not have to, which has been
|
||||
corrected.
|
||||
|
||||
* The internal implementation of "git rebase -i" has been updated to
|
||||
avoid forking a separate "rebase--interactive" process.
|
||||
|
||||
* Allow DEP and ASLR for Windows build to for security hardening.
|
||||
|
||||
* Performance test framework has been broken and measured the version
|
||||
of Git that happens to be on $PATH, not the specified one to
|
||||
measure, for a while, which has been corrected.
|
||||
|
||||
* Optionally "make coccicheck" can feed multiple source files to
|
||||
spatch, gaining performance while spending more memory.
|
||||
|
||||
* Attempt to use an abbreviated option in "git clone --recurs" is
|
||||
responded by a request to disambiguate between --recursive and
|
||||
--recurse-submodules, which is bad because these two are synonyms.
|
||||
The parse-options API has been extended to define such synonyms
|
||||
more easily and not produce an unnecessary failure.
|
||||
|
||||
* A pair of private functions in http.c that had names similar to
|
||||
fread/fwrite did not return the number of elements, which was found
|
||||
to be confusing.
|
||||
|
||||
* Update collision-detecting SHA-1 code to build properly on HP-UX.
|
||||
|
||||
|
||||
Fixes since v2.21
|
||||
-----------------
|
||||
|
||||
* "git prune-packed" did not notice and complain against excess
|
||||
arguments given from the command line, which now it does.
|
||||
(merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
|
||||
|
||||
* Split-index fix.
|
||||
(merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
|
||||
|
||||
* "git diff --no-index" may still want to access Git goodies like
|
||||
--ext-diff and --textconv, but so far these have been ignored,
|
||||
which has been corrected.
|
||||
(merge 287ab28bfa jk/diff-no-index-initialize later to maint).
|
||||
|
||||
* Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
|
||||
a bug in the latter (lack of authentication retry) and generally
|
||||
improves the code base.
|
||||
(merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
|
||||
|
||||
* The include file compat/bswap.h has been updated so that it is safe
|
||||
to (accidentally) include it more than once.
|
||||
(merge 33aa579a55 jk/guard-bswap-header later to maint).
|
||||
|
||||
* The set of header files used by "make hdr-check" unconditionally
|
||||
included sha256/gcrypt.h, even when it is not used, causing the
|
||||
make target to fail. We now skip it when GCRYPT_SHA256 is not in
|
||||
use.
|
||||
(merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
|
||||
|
||||
* The Makefile uses 'find' utility to enumerate all the *.h header
|
||||
files, which is expensive on platforms with slow filesystems; it
|
||||
now optionally uses "ls-files" if working within a repository,
|
||||
which is a trick similar to how all sources are enumerated to run
|
||||
ETAGS on.
|
||||
(merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
|
||||
|
||||
* "git rebase" that was reimplemented in C did not set ORIG_HEAD
|
||||
correctly, which has been corrected.
|
||||
(merge cbd29ead92 js/rebase-orig-head-fix later to maint).
|
||||
|
||||
* Dev support.
|
||||
(merge f545737144 js/stress-test-ui-tweak later to maint).
|
||||
|
||||
* CFLAGS now can be tweaked when invoking Make while using
|
||||
DEVELOPER=YesPlease; this did not work well before.
|
||||
(merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
|
||||
|
||||
* "git fsck --connectivity-only" omits computation necessary to sift
|
||||
the objects that are not reachable from any of the refs into
|
||||
unreachable and dangling. This is now enabled when dangling
|
||||
objects are requested (which is done by default, but can be
|
||||
overridden with the "--no-dangling" option).
|
||||
(merge 8d8c2a5aef jk/fsck-doc later to maint).
|
||||
|
||||
* On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
|
||||
the upload-pack that runs on the other end that hangs up after
|
||||
detecting an error could cause "git fetch" to die with a signal,
|
||||
which led to a flaky test. "git fetch" now ignores SIGPIPE during
|
||||
the network portion of its operation (this is not a problem as we
|
||||
check the return status from our write(2)s).
|
||||
(merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
|
||||
|
||||
* A recent update broke "is this object available to us?" check for
|
||||
well-known objects like an empty tree (which should yield "yes",
|
||||
even when there is no on-disk object for an empty tree), which has
|
||||
been corrected.
|
||||
(merge f06ab027ef jk/virtual-objects-do-exist later to maint).
|
||||
|
||||
* The setup code has been cleaned up to avoid leaks around the
|
||||
repository_format structure.
|
||||
(merge e8805af1c3 ma/clear-repository-format later to maint).
|
||||
|
||||
* "git config --type=color ..." is meant to replace "git config --get-color"
|
||||
but there is a slight difference that wasn't documented, which is
|
||||
now fixed.
|
||||
(merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
|
||||
|
||||
* When the "clean" filter can reduce the size of a huge file in the
|
||||
working tree down to a small "token" (a la Git LFS), there is no
|
||||
point in allocating a huge scratch area upfront, but the buffer is
|
||||
sized based on the original file size. The convert mechanism now
|
||||
allocates very minimum and reallocates as it receives the output
|
||||
from the clean filter process.
|
||||
(merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
|
||||
|
||||
* "git rebase" uses the refs/rewritten/ hierarchy to store its
|
||||
intermediate states, which inherently makes the hierarchy per
|
||||
worktree, but it didn't quite work well.
|
||||
(merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
|
||||
|
||||
* "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
|
||||
output as it should. This has been corrected.
|
||||
(merge 05314efaea jk/line-log-with-patch later to maint).
|
||||
|
||||
* "git worktree add" used to do a "find an available name with stat
|
||||
and then mkdir", which is race-prone. This has been fixed by using
|
||||
mkdir and reacting to EEXIST in a loop.
|
||||
(merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
|
||||
|
||||
* Build update for SHA-1 with collision detection.
|
||||
(merge 07a20f569b jk/sha1dc later to maint).
|
||||
|
||||
* Build procedure has been fixed around use of asciidoctor instead of
|
||||
asciidoc.
|
||||
(merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
|
||||
|
||||
* remote-http transport did not anonymize URLs reported in its error
|
||||
messages at places.
|
||||
(merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
|
||||
|
||||
* Error messages given from the http transport have been updated so
|
||||
that they can be localized.
|
||||
(merge ed8b4132c8 js/remote-curl-i18n later to maint).
|
||||
|
||||
* "git init" forgot to read platform-specific repository
|
||||
configuration, which made Windows port to ignore settings of
|
||||
core.hidedotfiles, for example.
|
||||
|
||||
* A corner-case object name ambiguity while the sequencer machinery
|
||||
is working (e.g. "rebase -i -x") has been fixed.
|
||||
|
||||
* "git format-patch" did not diagnose an error while opening the
|
||||
output file for the cover-letter, which has been corrected.
|
||||
(merge 2fe95f494c jc/format-patch-error-check later to maint).
|
||||
|
||||
* "git checkout -f <branch>" while the index has an unmerged path
|
||||
incorrectly left some paths in an unmerged state, which has been
|
||||
corrected.
|
||||
|
||||
* A corner case bug in the refs API has been corrected.
|
||||
(merge d3322eb28b jk/refs-double-abort later to maint).
|
||||
|
||||
* Unicode update.
|
||||
(merge 584b62c37b bb/unicode-12 later to maint).
|
||||
|
||||
* dumb-http walker has been updated to share more error recovery
|
||||
strategy with the normal codepath.
|
||||
|
||||
* A buglet in configuration parser has been fixed.
|
||||
(merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
|
||||
|
||||
* The documentation for "git read-tree --reset -u" has been updated.
|
||||
(merge b5a0bd694c nd/read-tree-reset-doc later to maint).
|
||||
|
||||
* Code clean-up around a much-less-important-than-it-used-to-be
|
||||
update_server_info() function.
|
||||
(merge b3223761c8 jk/server-info-rabbit-hole later to maint).
|
||||
|
||||
* The message given when "git commit -a <paths>" errors out has been
|
||||
updated.
|
||||
(merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
|
||||
|
||||
* "git cherry-pick --options A..B", after giving control back to the
|
||||
user to ask help resolving a conflicted step, did not honor the
|
||||
options it originally received, which has been corrected.
|
||||
|
||||
* Various glitches in "git gc" around reflog handling have been fixed.
|
||||
|
||||
* The code to read from commit-graph file has been cleanup with more
|
||||
careful error checking before using data read from it.
|
||||
|
||||
* Performance fix around "git fetch" that grabs many refs.
|
||||
(merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
|
||||
|
||||
* Protocol v2 support in "git fetch-pack" of shallow clones has been
|
||||
corrected.
|
||||
|
||||
* Performance fix around "git blame", especially in a linear history
|
||||
(which is the norm we should optimize for).
|
||||
(merge f892014943 dk/blame-keep-origin-blob later to maint).
|
||||
|
||||
* Performance fix for "rev-list --parents -- pathspec".
|
||||
(merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
|
||||
|
||||
* Updating the display with progress message has been cleaned up to
|
||||
deal better with overlong messages.
|
||||
(merge 545dc345eb sg/overlong-progress-fix later to maint).
|
||||
|
||||
* "git blame -- path" in a non-bare repository starts blaming from
|
||||
the working tree, and the same command in a bare repository errors
|
||||
out because there is no working tree by definition. The command
|
||||
has been taught to instead start blaming from the commit at HEAD,
|
||||
which is more useful.
|
||||
(merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
|
||||
|
||||
* An underallocation in the code to read the untracked cache
|
||||
extension has been corrected.
|
||||
(merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
|
||||
|
||||
* The code is updated to check the result of memory allocation before
|
||||
it is used in more places, by using xmalloc and/or xcalloc calls.
|
||||
(merge 999b951b28 jk/xmalloc later to maint).
|
||||
|
||||
* The GETTEXT_POISON test option has been quite broken ever since it
|
||||
was made runtime-tunable, which has been fixed.
|
||||
(merge f88b9cb603 jc/gettext-test-fix later to maint).
|
||||
|
||||
* Test fix on APFS that is incapable of store paths in Latin-1.
|
||||
(merge 3889149619 js/iso8895-test-on-apfs later to maint).
|
||||
|
||||
* "git submodule foreach <command> --quiet" did not pass the option
|
||||
down correctly, which has been corrected.
|
||||
(merge a282f5a906 nd/submodule-foreach-quiet later to maint).
|
||||
|
||||
* "git send-email" has been taught to use quoted-printable when the
|
||||
payload contains carriage-return. The use of the mechanism is in
|
||||
line with the design originally added the codepath that chooses QP
|
||||
when the payload has overly long lines.
|
||||
(merge 74d76a1701 bc/send-email-qp-cr later to maint).
|
||||
|
||||
* The recently added feature to add addresses that are on
|
||||
anything-by: trailers in 'git send-email' was found to be way too
|
||||
eager and considered nonsense strings as if they can be legitimate
|
||||
beginning of *-by: trailer. This has been tightened.
|
||||
|
||||
* Builds with gettext broke on recent macOS w/ Homebrew, which
|
||||
seems to have stopped including from /usr/local/include; this
|
||||
has been corrected.
|
||||
(merge 92a1377a2a js/macos-gettext-build later to maint).
|
||||
|
||||
* Running "git add" on a repository created inside the current
|
||||
repository is an explicit indication that the user wants to add it
|
||||
as a submodule, but when the HEAD of the inner repository is on an
|
||||
unborn branch, it cannot be added as a submodule. Worse, the files
|
||||
in its working tree can be added as if they are a part of the outer
|
||||
repository, which is not what the user wants. These problems are
|
||||
being addressed.
|
||||
(merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).
|
||||
|
||||
* "git cherry-pick" run with the "-x" or the "--signoff" option used
|
||||
to (and more importantly, ought to) clean up the commit log message
|
||||
with the --cleanup=space option by default, but this has been
|
||||
broken since late 2017. This has been fixed.
|
||||
|
||||
* When given a tag that points at a commit-ish, "git replace --graft"
|
||||
failed to peel the tag before writing a replace ref, which did not
|
||||
make sense because the old graft mechanism the feature wants to
|
||||
mimic only allowed to replace one commit object with another.
|
||||
This has been fixed.
|
||||
(merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
|
||||
|
||||
* Code tightening against a "wrong" object appearing where an object
|
||||
of a different type is expected, instead of blindly assuming that
|
||||
the connection between objects are correctly made.
|
||||
(merge 97dd512af7 tb/unexpected later to maint).
|
||||
|
||||
* An earlier update for MinGW and Cygwin accidentally broke MSVC build,
|
||||
which has been fixed.
|
||||
(merge 22c3634c0f ss/msvc-path-utils-fix later to maint).
|
||||
|
||||
* %(push:track) token used in the --format option to "git
|
||||
for-each-ref" and friends was not showing the right branch, which
|
||||
has been fixed.
|
||||
(merge c646d0934e dr/ref-filter-push-track-fix later to maint).
|
||||
|
||||
* "make check-docs", "git help -a", etc. did not account for cases
|
||||
where a particular build may deliberately omit some subcommands,
|
||||
which has been corrected.
|
||||
|
||||
* The logic to tell if a Git repository has a working tree protects
|
||||
"git branch -D" from removing the branch that is currently checked
|
||||
out by mistake. The implementation of this logic was broken for
|
||||
repositories with unusual name, which unfortunately is the norm for
|
||||
submodules these days. This has been fixed.
|
||||
(merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).
|
||||
|
||||
* AIX shared the same build issues with other BSDs around fileno(fp),
|
||||
which has been corrected.
|
||||
(merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).
|
||||
|
||||
* The autoconf generated configure script failed to use the right
|
||||
gettext() implementations from -libintl by ignoring useless stub
|
||||
implementations shipped in some C library, which has been
|
||||
corrected.
|
||||
(merge b71e56a683 vk/autoconf-gettext later to maint).
|
||||
|
||||
* Fix index-pack perf test so that the repeated invocations always
|
||||
run in an empty repository, which emulates the initial clone
|
||||
situation better.
|
||||
(merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).
|
||||
|
||||
* A "ls-files" that emulates "find" to enumerate files in the working
|
||||
tree resulted in duplicated Makefile rules that caused the build to
|
||||
issue an unnecessary warning during a trial build after merge
|
||||
conflicts are resolved in working tree *.h files but before the
|
||||
resolved results are added to the index. This has been corrected.
|
||||
|
||||
* "git cherry-pick" (and "revert" that shares the same runtime engine)
|
||||
that deals with multiple commits got confused when the final step
|
||||
gets stopped with a conflict and the user concluded the sequence
|
||||
with "git commit". Attempt to fix it by cleaning up the state
|
||||
files used by these commands in such a situation.
|
||||
(merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).
|
||||
|
||||
* On a filesystem like HFS+, the names of the refs stored as filesystem
|
||||
entities may become different from what the end-user expects, just
|
||||
like files in the working tree get "renamed". Work around the
|
||||
mismatch by paying attention to the core.precomposeUnicode
|
||||
configuration.
|
||||
(merge 8e712ef6fc en/unicode-in-refnames later to maint).
|
||||
|
||||
* The code to generate the multi-pack idx file was not prepared to
|
||||
see too many packfiles and ran out of open file descriptor, which
|
||||
has been corrected.
|
||||
|
||||
* To run tests for Git SVN, our scripts for CI used to install the
|
||||
git-svn package (in the hope that it would bring in the right
|
||||
dependencies). This has been updated to install the more direct
|
||||
dependency, namely, libsvn-perl.
|
||||
(merge db864306cf sg/ci-libsvn-perl later to maint).
|
||||
|
||||
* "git cvsexportcommit" running on msys did not expect cvsnt showed
|
||||
"cvs status" output with CRLF line endings.
|
||||
|
||||
* The fsmonitor interface got out of sync after the in-core index
|
||||
file gets discarded, which has been corrected.
|
||||
(merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).
|
||||
|
||||
* "git status" did not know that the "label" instruction in the
|
||||
todo-list "rebase -i -r" uses should not be shown as a hex object
|
||||
name.
|
||||
|
||||
* A prerequisite check in the test suite to see if a working jgit is
|
||||
available was made more robust.
|
||||
(merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
|
||||
|
||||
* The codepath to parse :<path> that obtains the object name for an
|
||||
indexed object has been made more robust.
|
||||
|
||||
* Code cleanup, docfix, build fix, etc.
|
||||
(merge 11f470aee7 jc/test-yes-doc later to maint).
|
||||
(merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
|
||||
(merge 5c326d1252 jk/unused-params later to maint).
|
||||
(merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
|
||||
(merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
|
||||
(merge 1ede45e44b en/merge-options-doc later to maint).
|
||||
(merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
|
||||
(merge c271dc28fd nd/no-more-check-racy later to maint).
|
||||
(merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
|
||||
(merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
|
||||
(merge 716a5af812 rd/gc-prune-doc-fix later to maint).
|
||||
(merge 50b206371d js/untravis-windows later to maint).
|
||||
(merge dbf47215e3 js/rebase-recreate-merge later to maint).
|
||||
(merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
|
||||
(merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
|
||||
(merge af91b0230c dl/ignore-docs later to maint).
|
||||
(merge 59a06e947b ra/t3600-test-path-funcs later to maint).
|
||||
(merge e041d0781b ar/t4150-remove-cruft later to maint).
|
||||
(merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
|
||||
(merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
|
||||
(merge ed31851fa6 ab/doc-misc-typofixes later to maint).
|
||||
(merge a7256debd4 nd/checkout-m-doc-update later to maint).
|
||||
(merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
|
||||
(merge 0b918b75af sg/t5318-cleanup later to maint).
|
||||
(merge 68ed71b53c cb/doco-mono later to maint).
|
||||
(merge a34dca2451 nd/interpret-trailers-docfix later to maint).
|
||||
(merge cf7b857a77 en/fast-import-parsing-fix later to maint).
|
||||
(merge fe61ccbc35 po/rerere-doc-fmt later to maint).
|
||||
(merge ffea0248bf po/describe-not-necessarily-7 later to maint).
|
||||
(merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
|
||||
(merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
|
||||
(merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
|
||||
(merge d8083e4180 km/t3000-retitle later to maint).
|
||||
(merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
|
||||
(merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
|
||||
(merge 6804ba3a58 cw/diff-highlight later to maint).
|
||||
(merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
|
||||
(merge d9ef573837 jk/apache-lsan later to maint).
|
||||
(merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
|
||||
(merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
|
||||
(merge 397a46db78 js/t5580-unc-alternate-test later to maint).
|
||||
(merge d4907720a2 cm/notes-comment-fix later to maint).
|
||||
(merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
|
||||
(merge 4c785c0edc js/rebase-config-bitfix later to maint).
|
||||
(merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).
|
@ -1,150 +0,0 @@
|
||||
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.
|
@ -1,8 +0,0 @@
|
||||
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.
|
@ -1,348 +0,0 @@
|
||||
Git 2.23 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.22
|
||||
-------------------
|
||||
|
||||
Backward compatibility note
|
||||
|
||||
* The "--base" option of "format-patch" computed the patch-ids for
|
||||
prerequisite patches in an unstable way, which has been updated to
|
||||
compute in a way that is compatible with "git patch-id --stable".
|
||||
|
||||
* The "git log" command by default behaves as if the --mailmap option
|
||||
was given.
|
||||
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* The "git fast-export/import" pair has been taught to handle commits
|
||||
with log messages in encoding other than UTF-8 better.
|
||||
|
||||
* In recent versions of Git, per-worktree refs are exposed in
|
||||
refs/worktrees/<wtname>/ hierarchy, which means that worktree names
|
||||
must be a valid refname component. The code now sanitizes the names
|
||||
given to worktrees, to make sure these refs are well-formed.
|
||||
|
||||
* "git merge" learned "--quit" option that cleans up the in-progress
|
||||
merge while leaving the working tree and the index still in a mess.
|
||||
|
||||
* "git format-patch" learns a configuration to set the default for
|
||||
its --notes=<ref> option.
|
||||
|
||||
* The code to show args with potential typo that cannot be
|
||||
interpreted as a commit-ish has been improved.
|
||||
|
||||
* "git clone --recurse-submodules" learned to set up the submodules
|
||||
to ignore commit object names recorded in the superproject gitlink
|
||||
and instead use the commits that happen to be at the tip of the
|
||||
remote-tracking branches from the get-go, by passing the new
|
||||
"--remote-submodules" option.
|
||||
|
||||
* The pattern "git diff/grep" use to extract funcname and words
|
||||
boundary for Matlab has been extend to cover Octave, which is more
|
||||
or less equivalent.
|
||||
|
||||
* "git help git" was hard to discover (well, at least for some
|
||||
people).
|
||||
|
||||
* The pattern "git diff/grep" use to extract funcname and words
|
||||
boundary for Rust has been added.
|
||||
|
||||
* "git status" can be told a non-standard default value for the
|
||||
"--[no-]ahead-behind" option with a new configuration variable
|
||||
status.aheadBehind.
|
||||
|
||||
* "git fetch" and "git pull" reports when a fetch results in
|
||||
non-fast-forward updates to let the user notice unusual situation.
|
||||
The commands learned "--no-show-forced-updates" option to disable
|
||||
this safety feature.
|
||||
|
||||
* Two new commands "git switch" and "git restore" are introduced to
|
||||
split "checking out a branch to work on advancing its history" and
|
||||
"checking out paths out of the index and/or a tree-ish to work on
|
||||
advancing the current history" out of the single "git checkout"
|
||||
command.
|
||||
|
||||
* "git branch --list" learned to always output the detached HEAD as
|
||||
the first item (when the HEAD is detached, of course), regardless
|
||||
of the locale.
|
||||
|
||||
* The conditional inclusion mechanism learned to base the choice on
|
||||
the branch the HEAD currently is on.
|
||||
|
||||
* "git rev-list --objects" learned the "--no-object-names" option to
|
||||
squelch the path to the object that is used as a grouping hint for
|
||||
pack-objects.
|
||||
|
||||
* A new tag.gpgSign configuration variable turns "git tag -a" into
|
||||
"git tag -s".
|
||||
|
||||
* "git multi-pack-index" learned expire and repack subcommands.
|
||||
|
||||
* "git blame" learned to "ignore" commits in the history, whose
|
||||
effects (as well as their presence) get ignored.
|
||||
|
||||
* "git cherry-pick/revert" learned a new "--skip" action.
|
||||
|
||||
* The tips of refs from the alternate object store can be used as
|
||||
starting point for reachability computation now.
|
||||
|
||||
* Extra blank lines in "git status" output have been reduced.
|
||||
|
||||
* The commits in a repository can be described by multiple
|
||||
commit-graph files now, which allows the commit-graph files to be
|
||||
updated incrementally.
|
||||
|
||||
* "git range-diff" output has been tweaked for easier identification
|
||||
of which part of what file the patch shown is about.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Update supporting parts of "git rebase" to remove code that should
|
||||
no longer be used.
|
||||
|
||||
* Developer support to emulate unsatisfied prerequisites in tests to
|
||||
ensure that the remainder of the tests still succeeds when tests
|
||||
with prerequisites are skipped.
|
||||
|
||||
* "git update-server-info" learned not to rewrite the file with the
|
||||
same contents.
|
||||
|
||||
* The way of specifying the path to find dynamic libraries at runtime
|
||||
has been simplified. The old default to pass -R/path/to/dir has been
|
||||
replaced with the new default to pass -Wl,-rpath,/path/to/dir,
|
||||
which is the more recent GCC uses. Those who need to build with an
|
||||
old GCC can still use "CC_LD_DYNPATH=-R"
|
||||
|
||||
* Prepare use of reachability index in topological walker that works
|
||||
on a range (A..B).
|
||||
|
||||
* A new tutorial targeting specifically aspiring git-core
|
||||
developers has been added.
|
||||
|
||||
* Auto-detect how to tell HP-UX aCC where to use dynamically linked
|
||||
libraries from at runtime.
|
||||
|
||||
* "git mergetool" and its tests now spawn fewer subprocesses.
|
||||
|
||||
* Dev support update to help tracing out tests.
|
||||
|
||||
* Support to build with MSVC has been updated.
|
||||
|
||||
* "git fetch" that grabs from a group of remotes learned to run the
|
||||
auto-gc only once at the very end.
|
||||
|
||||
* A handful of Windows build patches have been upstreamed.
|
||||
|
||||
* The code to read state files used by the sequencer machinery for
|
||||
"git status" has been made more robust against a corrupt or stale
|
||||
state files.
|
||||
|
||||
* "git for-each-ref" with multiple patterns have been optimized.
|
||||
|
||||
* The tree-walk API learned to pass an in-core repository
|
||||
instance throughout more codepaths.
|
||||
|
||||
* When one step in multi step cherry-pick or revert is reset or
|
||||
committed, the command line prompt script failed to notice the
|
||||
current status, which has been improved.
|
||||
|
||||
* Many GIT_TEST_* environment variables control various aspects of
|
||||
how our tests are run, but a few followed "non-empty is true, empty
|
||||
or unset is false" while others followed the usual "there are a few
|
||||
ways to spell true, like yes, on, etc., and also ways to spell
|
||||
false, like no, off, etc." convention.
|
||||
|
||||
* Adjust the dir-iterator API and apply it to the local clone
|
||||
optimization codepath.
|
||||
|
||||
* 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.
|
||||
|
||||
* A test helper has been introduced to optimize preparation of test
|
||||
repositories with many simple commits, and a handful of test
|
||||
scripts have been updated to use it.
|
||||
|
||||
|
||||
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 an unrelated file descriptor getting
|
||||
closed, which has been fixed.
|
||||
|
||||
* A "merge -c" instruction during "git rebase --rebase-merges" should
|
||||
give the user a chance to edit the log message, even when there is
|
||||
otherwise no need to create a new merge and replace the existing
|
||||
one (i.e. fast-forward instead), but did not. Which has been
|
||||
corrected.
|
||||
|
||||
* Code cleanup and futureproof.
|
||||
|
||||
* More parameter validation.
|
||||
|
||||
* "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 branch --list" learned to show branches that are checked out
|
||||
in other worktrees connected to the same repository prefixed with
|
||||
'+', similar to the way the currently checked out branch is shown
|
||||
with '*' in front.
|
||||
(merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).
|
||||
|
||||
* Code restructuring during 2.20 period broke fetching tags via
|
||||
"import" based transports.
|
||||
|
||||
* 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.
|
||||
|
||||
* "git checkout -p" needs to selectively apply a patch in reverse,
|
||||
which did not work well.
|
||||
|
||||
* Code clean-up to avoid signed integer wraparounds during binary search.
|
||||
|
||||
* "git interpret-trailers" always treated '#' as the comment
|
||||
character, regardless of core.commentChar setting, 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 rebase --abort" used to leave refs/rewritten/ when concluding
|
||||
"git rebase -r", which has been corrected.
|
||||
|
||||
* 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.
|
||||
|
||||
* The code to parse scaled numbers out of configuration files has
|
||||
been made more robust and also easier to follow.
|
||||
|
||||
* The codepath to compute delta islands used to spew progress output
|
||||
without giving the callers any way to squelch it, which has been
|
||||
fixed.
|
||||
|
||||
* Protocol capabilities that go over wire should never be translated,
|
||||
but it was incorrectly marked for translation, which has been
|
||||
corrected. The output of protocol capabilities for debugging has
|
||||
been tweaked a bit.
|
||||
|
||||
* Use "Erase in Line" CSI sequence that is already used in the editor
|
||||
support to clear cruft in the progress output.
|
||||
|
||||
* "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.
|
||||
|
||||
* 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.
|
||||
|
||||
* 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.
|
||||
|
||||
* Generation of pack bitmaps are now disabled when .keep files exist,
|
||||
as these are mutually exclusive features.
|
||||
(merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).
|
||||
|
||||
* "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.
|
||||
|
||||
* "git stash --keep-index" did not work correctly on paths that have
|
||||
been removed, which has been fixed.
|
||||
(merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).
|
||||
|
||||
* Window 7 update ;-)
|
||||
|
||||
* A codepath that reads from GPG for signed object verification read
|
||||
past the end of allocated buffer, which has been fixed.
|
||||
|
||||
* "git clean" silently skipped a path when it cannot lstat() it; now
|
||||
it gives a warning.
|
||||
|
||||
* "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.
|
||||
|
||||
* The internal diff machinery can be made to read out of bounds while
|
||||
looking for --function-context line in a corner case, which has been
|
||||
corrected.
|
||||
(merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge fbec05c210 cc/test-oidmap later to maint).
|
||||
(merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
|
||||
(merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
|
||||
(merge d61e6ce1dd sg/fsck-config-in-doc later to maint).
|
@ -1,8 +0,0 @@
|
||||
Git v2.23.1 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.
|
@ -1,398 +0,0 @@
|
||||
Git 2.24 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.23
|
||||
-------------------
|
||||
|
||||
Backward compatibility note
|
||||
|
||||
* "filter-branch" is showing its age and alternatives are available.
|
||||
From this release, we started to discourage its use and hint
|
||||
people about filter-repo.
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* We now have an active interim maintainer for the Git-Gui part of
|
||||
the system. Praise and thank Pratyush Yadav for volunteering.
|
||||
|
||||
* The command line parser learned "--end-of-options" notation; the
|
||||
standard convention for scripters to have hardcoded set of options
|
||||
first on the command line, and force the command to treat end-user
|
||||
input as non-options, has been to use "--" as the delimiter, but
|
||||
that would not work for commands that use "--" as a delimiter
|
||||
between revs and pathspec.
|
||||
|
||||
* A mechanism to affect the default setting for a (related) group of
|
||||
configuration variables is introduced.
|
||||
|
||||
* "git fetch" learned "--set-upstream" option to help those who first
|
||||
clone from their private fork they intend to push to, add the true
|
||||
upstream via "git remote add" and then "git fetch" from it.
|
||||
|
||||
* Device-tree files learned their own userdiff patterns.
|
||||
(merge 3c81760bc6 sb/userdiff-dts later to maint).
|
||||
|
||||
* "git rebase --rebase-merges" learned to drive different merge
|
||||
strategies and pass strategy specific options to them.
|
||||
|
||||
* A new "pre-merge-commit" hook has been introduced.
|
||||
|
||||
* Command line completion updates for "git -c var.name=val" have been
|
||||
added.
|
||||
|
||||
* The lazy clone machinery has been taught that there can be more
|
||||
than one promisor remote and consult them in order when downloading
|
||||
missing objects on demand.
|
||||
|
||||
* The list-objects-filter API (used to create a sparse/lazy clone)
|
||||
learned to take a combined filter specification.
|
||||
|
||||
* The documentation and tests for "git format-patch" have been
|
||||
cleaned up.
|
||||
|
||||
* On Windows, the root level of UNC share is now allowed to be used
|
||||
just like any other directory.
|
||||
|
||||
* The command line completion support (in contrib/) learned about the
|
||||
"--skip" option of "git revert" and "git cherry-pick".
|
||||
|
||||
* "git rebase --keep-base <upstream>" tries to find the original base
|
||||
of the topic being rebased and rebase on top of that same base,
|
||||
which is useful when running the "git rebase -i" (and its limited
|
||||
variant "git rebase -x").
|
||||
|
||||
The command also has learned to fast-forward in more cases where it
|
||||
can instead of replaying to recreate identical commits.
|
||||
|
||||
* A configuration variable tells "git fetch" to write the commit
|
||||
graph after finishing.
|
||||
|
||||
* "git add -i" has been taught to show the total number of hunks and
|
||||
the hunks that has been processed so far when showing prompts.
|
||||
|
||||
* "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
|
||||
submodules, but this did not apply to "git fetch --multiple" that
|
||||
fetches from multiple remote repositories. It now does.
|
||||
|
||||
* The installation instruction for zsh completion script (in
|
||||
contrib/) has been a bit improved.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* The code to write commit-graph over given commit object names has
|
||||
been made a bit more robust.
|
||||
|
||||
* The first line of verbose output from each test piece now carries
|
||||
the test name and number to help scanning with eyeballs.
|
||||
|
||||
* Further clean-up of the initialization code.
|
||||
|
||||
* xmalloc() used to have a mechanism to ditch memory and address
|
||||
space resources as the last resort upon seeing an allocation
|
||||
failure from the underlying malloc(), which made the code complex
|
||||
and thread-unsafe with dubious benefit, as major memory resource
|
||||
users already do limit their uses with various other mechanisms.
|
||||
It has been simplified away.
|
||||
|
||||
* Unnecessary full-tree diff in "git log -L" machinery has been
|
||||
optimized away.
|
||||
|
||||
* The http transport lacked some optimization the native transports
|
||||
learned to avoid unnecessary ref advertisement, which has been
|
||||
corrected.
|
||||
|
||||
* Preparation for SHA-256 upgrade continues in the test department.
|
||||
(merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).
|
||||
|
||||
* The memory ownership model of the "git fast-import" got
|
||||
straightened out.
|
||||
|
||||
* Output from trace2 subsystem is formatted more prettily now.
|
||||
|
||||
* The internal code originally invented for ".gitignore" processing
|
||||
got reshuffled and renamed to make it less tied to "excluding" and
|
||||
stress more that it is about "matching", as it has been reused for
|
||||
things like sparse checkout specification that want to check if a
|
||||
path is "included".
|
||||
|
||||
* "git stash" learned to write refreshed index back to disk.
|
||||
|
||||
* Coccinelle checks are done on more source files than before now.
|
||||
|
||||
* The cache-tree code has been taught to be less aggressive in
|
||||
attempting to see if a tree object it computed already exists in
|
||||
the repository.
|
||||
|
||||
* The code to parse and use the commit-graph file has been made more
|
||||
robust against corrupted input.
|
||||
|
||||
* The hg-to-git script (in contrib/) has been updated to work with
|
||||
Python 3.
|
||||
|
||||
* Update the way build artifacts in t/helper/ directory are ignored.
|
||||
|
||||
* Preparation for SHA-256 upgrade continues.
|
||||
|
||||
* "git log --graph" for an octopus merge is sometimes colored
|
||||
incorrectly, which is demonstrated and documented but not yet
|
||||
fixed.
|
||||
|
||||
* The trace2 output, when sending them to files in a designated
|
||||
directory, can populate the directory with too many files; a
|
||||
mechanism is introduced to set the maximum number of files and
|
||||
discard further logs when the maximum is reached.
|
||||
|
||||
* We have adopted a Code-of-conduct document.
|
||||
(merge 3f9ef874a7 jk/coc later to maint).
|
||||
|
||||
|
||||
Fixes since v2.23
|
||||
-----------------
|
||||
|
||||
* "git grep --recurse-submodules" that looks at the working tree
|
||||
files looked at the contents in the index in submodules, instead of
|
||||
files in the working tree.
|
||||
(merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).
|
||||
|
||||
* Codepaths to walk tree objects have been audited for integer
|
||||
overflows and hardened.
|
||||
(merge 5aa02f9868 jk/tree-walk-overflow later to maint).
|
||||
|
||||
* "git pack-refs" can lose refs that are created while running, which
|
||||
is getting corrected.
|
||||
(merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).
|
||||
|
||||
* "git checkout" and "git restore" to re-populate the index from a
|
||||
tree-ish (typically HEAD) did not work correctly for a path that
|
||||
was removed and then added again with the intent-to-add bit, when
|
||||
the corresponding working tree file was empty. This has been
|
||||
corrected.
|
||||
|
||||
* Compilation fix.
|
||||
(merge 70597e8386 rs/nedalloc-fixlets later to maint).
|
||||
|
||||
* "git gui" learned to call the clean-up procedure before exiting.
|
||||
(merge 0d88f3d2c5 py/git-gui-do-quit later to maint).
|
||||
|
||||
* We promoted the "indent heuristics" that decides where to split
|
||||
diff hunks from experimental to the default a few years ago, but
|
||||
some stale documentation still marked it as experimental, which has
|
||||
been corrected.
|
||||
(merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).
|
||||
|
||||
* Fix a mismerge that happened in 2.22 timeframe.
|
||||
(merge acb7da05ac en/checkout-mismerge-fix later to maint).
|
||||
|
||||
* "git archive" recorded incorrect length in extended pax header in
|
||||
some corner cases, which has been corrected.
|
||||
(merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).
|
||||
|
||||
* On-demand object fetching in lazy clone incorrectly tried to fetch
|
||||
commits from submodule projects, while still working in the
|
||||
superproject, which has been corrected.
|
||||
(merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).
|
||||
|
||||
* Prepare get_short_oid() codepath to be thread-safe.
|
||||
(merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).
|
||||
|
||||
* "for-each-ref" and friends that show refs did not protect themselves
|
||||
against ancient tags that did not record tagger names when asked to
|
||||
show "%(taggername)", which have been corrected.
|
||||
(merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).
|
||||
|
||||
* The "git am" based backend of "git rebase" ignored the result of
|
||||
updating ".gitattributes" done in one step when replaying
|
||||
subsequent steps.
|
||||
(merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).
|
||||
|
||||
* Tell cURL library to use the same malloc() implementation, with the
|
||||
xmalloc() wrapper, as the rest of the system, for consistency.
|
||||
(merge 93b980e58f cb/curl-use-xmalloc later to maint).
|
||||
|
||||
* Build fix to adjust .gitignore to unignore a path that we started to track.
|
||||
(merge aac6ff7b5b js/visual-studio later to maint).
|
||||
|
||||
* A few implementation fixes in the notes API.
|
||||
(merge 60fe477a0b mh/notes-duplicate-entries later to maint).
|
||||
|
||||
* Fix an earlier regression to "git push --all" which should have
|
||||
been forbidden when the target remote repository is set to be a
|
||||
mirror.
|
||||
(merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).
|
||||
|
||||
* Fix an earlier regression in the test suite, which mistakenly
|
||||
stopped running HTTPD tests.
|
||||
(merge 3960290675 sg/git-test-boolean later to maint).
|
||||
|
||||
* "git rebase --autostash <upstream> <branch>", when <branch> is
|
||||
different from the current branch, incorrectly moved the tip of the
|
||||
current branch, which has been corrected.
|
||||
(merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).
|
||||
|
||||
* Update support for Asciidoctor documentation toolchain.
|
||||
(merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).
|
||||
|
||||
* Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
|
||||
no longer works with the older one.
|
||||
(merge f6461b82b9 bc/doc-use-docbook-5 later to maint).
|
||||
|
||||
* The markup used in user-manual has been updated to work better with
|
||||
asciidoctor.
|
||||
(merge c4d2f6143a ma/user-manual-markup-update later to maint).
|
||||
|
||||
* Make sure the grep machinery does not abort when seeing a payload
|
||||
that is not UTF-8 even when JIT is not in use with PCRE1.
|
||||
(merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).
|
||||
|
||||
* The name of the blob object that stores the filter specification
|
||||
for sparse cloning/fetching was interpreted in a wrong place in the
|
||||
code, causing Git to abort.
|
||||
|
||||
* "git log --decorate-refs-exclude=<pattern>" was incorrectly
|
||||
overruled when the "--simplify-by-decoration" option is used, which
|
||||
has been corrected.
|
||||
(merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).
|
||||
|
||||
* The "upload-pack" (the counterpart of "git fetch") needs to disable
|
||||
commit-graph when responding to a shallow clone/fetch request, but
|
||||
the way this was done made Git panic, which has been corrected.
|
||||
|
||||
* The object traversal machinery has been optimized not to load tree
|
||||
objects when we are only interested in commit history.
|
||||
(merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).
|
||||
|
||||
* The object name parser for "Nth parent" syntax has been made more
|
||||
robust against integer overflows.
|
||||
(merge 59fa5f5a25 rs/nth-parent-parse later to maint).
|
||||
|
||||
* The code used in following tags in "git fetch" has been optimized.
|
||||
(merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).
|
||||
|
||||
* Regression fix for progress output.
|
||||
(merge 2bb74b53a4 sg/progress-fix later to maint).
|
||||
|
||||
* A bug in merge-recursive code that triggers when a branch with a
|
||||
symbolic link is merged with a branch that replaces it with a
|
||||
directory has been fixed.
|
||||
(merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).
|
||||
|
||||
* The rename detection logic sorts a list of rename source candidates
|
||||
by similarity to pick the best candidate, which means that a tie
|
||||
between sources with the same similarity is broken by the original
|
||||
location in the original candidate list (which is sorted by path).
|
||||
Force the sorting by similarity done with a stable sort, which is
|
||||
not promised by system supplied qsort(3), to ensure consistent
|
||||
results across platforms.
|
||||
(merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).
|
||||
|
||||
* The code to skip "UTF" and "UTF-" prefix, when computing an advice
|
||||
message, did not work correctly when the prefix was "UTF", which
|
||||
has been fixed.
|
||||
(merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).
|
||||
|
||||
* The author names taken from SVN repositories may have extra leading
|
||||
or trailing whitespaces, which are now munged away.
|
||||
(merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).
|
||||
|
||||
* "git rebase -i" showed a wrong HEAD while "reword" open the editor.
|
||||
(merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).
|
||||
|
||||
* A few simplification and bugfixes to PCRE interface.
|
||||
(merge c581e4a749 ab/pcre-jit-fixes later to maint).
|
||||
|
||||
* PCRE fixes.
|
||||
(merge ff61681b46 cb/pcre1-cleanup later to maint).
|
||||
|
||||
* "git range-diff" segfaulted when diff.noprefix configuration was
|
||||
used, as it blindly expected the patch it internally generates to
|
||||
have the standard a/ and b/ prefixes. The command now forces the
|
||||
internal patch to be built without any prefix, not to be affected
|
||||
by any end-user configuration.
|
||||
(merge 937b76ed49 js/range-diff-noprefix later to maint).
|
||||
|
||||
* "git stash apply" in a subdirectory of a secondary worktree failed
|
||||
to access the worktree correctly, which has been corrected.
|
||||
(merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).
|
||||
|
||||
* The merge-recursive machinery is one of the most complex parts of
|
||||
the system that accumulated cruft over time. This large series
|
||||
cleans up the implementation quite a bit.
|
||||
(merge b657047719 en/merge-recursive-cleanup later to maint).
|
||||
|
||||
* Pretty-printed command line formatter (used in e.g. reporting the
|
||||
command being run by the tracing API) had a bug that lost an
|
||||
argument that is an empty string, which has been corrected.
|
||||
(merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).
|
||||
|
||||
* "git range-diff" failed to handle mode-only change, which has been
|
||||
corrected.
|
||||
(merge 2b6a9b13ca tg/range-diff-output-update later to maint).
|
||||
|
||||
* Dev support update.
|
||||
(merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).
|
||||
|
||||
* "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
|
||||
not "mkdir -p <outdir>", which was corrected.
|
||||
|
||||
* "git stash save" lost local changes to submodules, which has been
|
||||
corrected.
|
||||
(merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).
|
||||
|
||||
* The atomic push over smart HTTP transport did not work, which has
|
||||
been corrected.
|
||||
(merge 6f1194246a bc/smart-http-atomic-push later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge d1387d3895 en/fast-import-merge-doc later to maint).
|
||||
(merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
|
||||
(merge 415b770b88 ds/midx-expire-repack later to maint).
|
||||
(merge 19800bdc3f nd/diff-parseopt later to maint).
|
||||
(merge 58166c2e9d tg/t0021-racefix later to maint).
|
||||
(merge 7027f508c7 dl/compat-cleanup later to maint).
|
||||
(merge e770fbfeff jc/test-cleanup later to maint).
|
||||
(merge 1fd881d404 rs/trace2-dst-warning later to maint).
|
||||
(merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
|
||||
(merge 9784f97321 mh/release-commit-memory-fix later to maint).
|
||||
(merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
|
||||
(merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
|
||||
(merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
|
||||
(merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
|
||||
(merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
|
||||
(merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
|
||||
(merge 47b27c96fa ss/get-time-cleanup later to maint).
|
||||
(merge dd2e50a84e jk/commit-graph-cleanup later to maint).
|
||||
(merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
|
||||
(merge 40e747e89d dl/submodule-set-branch later to maint).
|
||||
(merge 689a146c91 rs/commit-graph-use-list-count later to maint).
|
||||
(merge 0eb7c37a8a js/doc-patch-text later to maint).
|
||||
(merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
|
||||
(merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
|
||||
(merge af78249463 cc/svn-fe-py-shebang later to maint).
|
||||
(merge 7bd97d6dff rs/alias-use-copy-array later to maint).
|
||||
(merge c46ebc2496 sg/travis-help-debug later to maint).
|
||||
(merge 24c681794f ps/my-first-contribution-alphasort later to maint).
|
||||
(merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
|
||||
(merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
|
||||
(merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
|
||||
(merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
|
||||
(merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
|
||||
(merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
|
||||
(merge 53d687bf5f ah/cleanups later to maint).
|
||||
(merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
|
||||
(merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
|
||||
(merge d928a8388a am/t0028-utf16-tests later to maint).
|
||||
(merge b05b40930e dl/t0000-skip-test-test later to maint).
|
||||
(merge 03d3b1297c js/xdiffi-comment-updates later to maint).
|
||||
(merge 57d8f4b4c7 js/doc-stash-save later to maint).
|
||||
(merge 8c1cfd58e3 ta/t1308-typofix later to maint).
|
||||
(merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
|
||||
(merge 68b69211b2 bb/compat-util-comment-fix later to maint).
|
||||
(merge 5cc6a4be11 rs/http-push-simplify later to maint).
|
||||
(merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
|
||||
(merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
|
||||
(merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
|
||||
(merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
|
||||
(merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
|
||||
(merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
|
||||
(merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).
|
@ -1,8 +0,0 @@
|
||||
Git v2.24.1 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.
|
@ -1,370 +0,0 @@
|
||||
Git 2.25 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.24
|
||||
-------------------
|
||||
|
||||
Backward compatibility notes
|
||||
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* A tutorial on object enumeration has been added.
|
||||
|
||||
* The branch description ("git branch --edit-description") has been
|
||||
used to fill the body of the cover letters by the format-patch
|
||||
command; this has been enhanced so that the subject can also be
|
||||
filled.
|
||||
|
||||
* "git rebase --preserve-merges" has been marked as deprecated; this
|
||||
release stops advertising it in the "git rebase -h" output.
|
||||
|
||||
* The code to generate multi-pack index learned to show (or not to
|
||||
show) progress indicators.
|
||||
|
||||
* "git apply --3way" learned to honor merge.conflictStyle
|
||||
configuration variable, like merges would.
|
||||
|
||||
* The custom format for "git log --format=<format>" learned the l/L
|
||||
placeholder that is similar to e/E that fills in the e-mail
|
||||
address, but only the local part on the left side of '@'.
|
||||
|
||||
* Documentation pages for "git shortlog" now list commit limiting
|
||||
options explicitly.
|
||||
|
||||
* The patterns to detect function boundary for Elixir language has
|
||||
been added.
|
||||
|
||||
* The completion script (in contrib/) learned that the "--onto"
|
||||
option of "git rebase" can take its argument as the value of the
|
||||
option.
|
||||
|
||||
* The userdiff machinery has been taught that "async def" is another
|
||||
way to begin a "function" in Python.
|
||||
|
||||
* "git range-diff" learned to take the "--notes=<ref>" and the
|
||||
"--no-notes" options to control the commit notes included in the
|
||||
log message that gets compared.
|
||||
|
||||
* "git rev-parse --show-toplevel" run outside of any working tree did
|
||||
not error out, which has been corrected.
|
||||
|
||||
* A few commands learned to take the pathspec from the standard input
|
||||
or a named file, instead of taking it as the command line
|
||||
arguments, with the "--pathspec-from-file" option.
|
||||
|
||||
* "git submodule" learned a subcommand "set-url".
|
||||
|
||||
* "git log" family learned "--pretty=reference" that gives the name
|
||||
of a commit in the format that is often used to refer to it in log
|
||||
messages.
|
||||
|
||||
* The interaction between "git clone --recurse-submodules" and
|
||||
alternate object store was ill-designed. The documentation and
|
||||
code have been taught to make more clear recommendations when the
|
||||
users see failures.
|
||||
|
||||
* Management of sparsely checked-out working tree has gained a
|
||||
dedicated "sparse-checkout" command.
|
||||
|
||||
* Miscellaneous small UX improvements on "git-p4".
|
||||
|
||||
* "git sparse-checkout list" subcommand learned to give its output in
|
||||
a more concise form when the "cone" mode is in effect.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Debugging support for lazy cloning has been a bit improved.
|
||||
|
||||
* Move the definition of a set of bitmask constants from 0ctal
|
||||
literal to (1U<<count) notation.
|
||||
|
||||
* Test updates to prepare for SHA-2 transition continues.
|
||||
|
||||
* Crufty code and logic accumulated over time around the object
|
||||
parsing and low-level object access used in "git fsck" have been
|
||||
cleaned up.
|
||||
|
||||
* The implementation of "git log --graph" got refactored and then its
|
||||
output got simplified.
|
||||
|
||||
* Follow recent push to move API docs from Documentation/ to header
|
||||
files and update config.h
|
||||
|
||||
* "git bundle" has been taught to use the parse options API. "git
|
||||
bundle verify" learned "--quiet" and "git bundle create" learned
|
||||
options to control the progress output.
|
||||
|
||||
* Handling of commit objects that use non UTF-8 encoding during
|
||||
"rebase -i" has been improved.
|
||||
|
||||
* The beginning of rewriting "git add -i" in C.
|
||||
|
||||
* A label used in the todo list that are generated by "git rebase
|
||||
--rebase-merges" is used as a part of a refname; the logic to come
|
||||
up with the label has been tightened to avoid names that cannot be
|
||||
used as such.
|
||||
|
||||
* The logic to avoid duplicate label names generated by "git rebase
|
||||
--rebase-merges" forgot that the machinery itself uses "onto" as a
|
||||
label name, which must be avoided by auto-generated labels, which
|
||||
has been corrected.
|
||||
|
||||
* We have had compatibility fallback macro definitions for "PRIuMAX",
|
||||
"PRIu32", etc. but did not for "PRIdMAX", while the code used the
|
||||
last one apparently without any hiccup reported recently. The
|
||||
fallback macro definitions for these <inttypes.h> macros that must
|
||||
appear in C99 systems have been removed.
|
||||
|
||||
* Recently we have declared that GIT_TEST_* variables take the
|
||||
usual boolean values (it used to be that some used "non-empty
|
||||
means true" and taking GIT_TEST_VAR=YesPlease as true); make
|
||||
sure we notice and fail when non-bool strings are given to
|
||||
these variables.
|
||||
|
||||
* Users of oneway_merge() (like "reset --hard") learned to take
|
||||
advantage of fsmonitor to avoid unnecessary lstat(2) calls.
|
||||
|
||||
* Performance tweak on "git push" into a repository with many refs
|
||||
that point at objects we have never heard of.
|
||||
|
||||
* PerfTest fix to avoid stale result mixed up with the latest round
|
||||
of test results.
|
||||
|
||||
* Hide lower-level verify_signed-buffer() API as a pure helper to
|
||||
implement the public check_signature() function, in order to
|
||||
encourage new callers to use the correct and more strict
|
||||
validation.
|
||||
|
||||
* Unnecessary reading of state variables back from the disk during
|
||||
sequencer operation has been reduced.
|
||||
|
||||
* The code has been made to avoid gmtime() and localtime() and prefer
|
||||
their reentrant counterparts.
|
||||
|
||||
* In a repository with many packfiles, the cost of the procedure that
|
||||
avoids registering the same packfile twice was unnecessarily high
|
||||
by using an inefficient search algorithm, which has been corrected.
|
||||
|
||||
* Redo "git name-rev" to avoid recursive calls.
|
||||
|
||||
* FreeBSD CI support via Cirrus-CI has been added.
|
||||
|
||||
|
||||
Fixes since v2.24
|
||||
-----------------
|
||||
|
||||
* "rebase -i" ceased to run post-commit hook by mistake in an earlier
|
||||
update, which has been corrected.
|
||||
|
||||
* "git notes copy $original" ought to copy the notes attached to the
|
||||
original object to HEAD, but a mistaken tightening to command line
|
||||
parameter validation made earlier disabled that feature by mistake.
|
||||
|
||||
* When all files from some subdirectory were renamed to the root
|
||||
directory, the directory rename heuristics would fail to detect that
|
||||
as a rename/merge of the subdirectory to the root directory, which has
|
||||
been corrected.
|
||||
|
||||
* Code clean-up and a bugfix in the logic used to tell worktree local
|
||||
and repository global refs apart.
|
||||
(merge f45f88b2e4 sg/dir-trie-fixes later to maint).
|
||||
|
||||
* "git stash save" in a working tree that is sparsely checked out
|
||||
mistakenly removed paths that are outside the area of interest.
|
||||
(merge 4a58c3d7f7 js/update-index-ignore-removal-for-skip-worktree later to maint).
|
||||
|
||||
* "git rev-parse --git-path HEAD.lock" did not give the right path
|
||||
when run in a secondary worktree.
|
||||
(merge 76a53d640f js/git-path-head-dot-lock-fix later to maint).
|
||||
|
||||
* "git merge --no-commit" needs "--no-ff" if you do not want to move
|
||||
HEAD, which has been corrected in the manual page for "git bisect".
|
||||
(merge 8dd327b246 ma/bisect-doc-sample-update later to maint).
|
||||
|
||||
* "git worktree add" internally calls "reset --hard" that should not
|
||||
descend into submodules, even when submodule.recurse configuration
|
||||
is set, but it was affected. This has been corrected.
|
||||
(merge 4782cf2ab6 pb/no-recursive-reset-hard-in-worktree-add later to maint).
|
||||
|
||||
* Messages from die() etc. can be mixed up from multiple processes
|
||||
without even line buffering on Windows, which has been worked
|
||||
around.
|
||||
(merge 116d1fa6c6 js/vreportf-wo-buffering later to maint).
|
||||
|
||||
* HTTP transport had possible allocator/deallocator mismatch, which
|
||||
has been corrected.
|
||||
|
||||
* The watchman integration for fsmonitor was racy, which has been
|
||||
corrected to be more conservative.
|
||||
(merge dd0b61f577 kw/fsmonitor-watchman-fix later to maint).
|
||||
|
||||
* Fetching from multiple remotes into the same repository in parallel
|
||||
had a bad interaction with the recent change to (optionally) update
|
||||
the commit-graph after a fetch job finishes, as these parallel
|
||||
fetches compete with each other. Which has been corrected.
|
||||
|
||||
* Recent update to "git stash pop" made the command empty the index
|
||||
when run with the "--quiet" option, which has been corrected.
|
||||
|
||||
* "git fetch" codepath had a big "do not lazily fetch missing objects
|
||||
when I ask if something exists" switch. This has been corrected by
|
||||
marking the "does this thing exist?" calls with "if not please do not
|
||||
lazily fetch it" flag.
|
||||
|
||||
* Test update to avoid wasted cycles.
|
||||
(merge e0316695ec sg/skip-skipped-prereq later to maint).
|
||||
|
||||
* Error handling after "git push" finishes sending the packdata and
|
||||
waits for the response to the remote side has been improved.
|
||||
(merge ad7a403268 jk/send-pack-remote-failure later to maint).
|
||||
|
||||
* Some codepaths in "gitweb" that forgot to escape URLs generated
|
||||
based on end-user input have been corrected.
|
||||
(merge a376e37b2c jk/gitweb-anti-xss later to maint).
|
||||
|
||||
* CI jobs for macOS has been made less chatty when updating perforce
|
||||
package used during testing.
|
||||
(merge 0dbc4a0edf jc/azure-ci-osx-fix-fix later to maint).
|
||||
|
||||
* "git unpack-objects" used to show progress based only on the number
|
||||
of received and unpacked objects, which stalled when it has to
|
||||
handle an unusually large object. It now shows the throughput as
|
||||
well.
|
||||
(merge bae60ba7e9 sg/unpack-progress-throughput later to maint).
|
||||
|
||||
* The sequencer machinery compared the HEAD and the state it is
|
||||
attempting to commit to decide if the result would be a no-op
|
||||
commit, even when amending a commit, which was incorrect, and
|
||||
has been corrected.
|
||||
|
||||
* The code to parse GPG output used to assume incorrectly that the
|
||||
finterprint for the primary key would always be present for a valid
|
||||
signature, which has been corrected.
|
||||
(merge 67a6ea6300 hi/gpg-optional-pkfp-fix later to maint).
|
||||
|
||||
* "git submodule status" and "git submodule status --cached" show
|
||||
different things, but the documentation did not cover them
|
||||
correctly, which has been corrected.
|
||||
(merge 8d483c8408 mg/doc-submodule-status-cached later to maint).
|
||||
|
||||
* "git reset --patch $object" without any pathspec should allow a
|
||||
tree object to be given, but incorrectly required a committish,
|
||||
which has been corrected.
|
||||
|
||||
* "git submodule status" that is run from a subdirectory of the
|
||||
superproject did not work well, which has been corrected.
|
||||
(merge 1f3aea22c7 mg/submodule-status-from-a-subdirectory later to maint).
|
||||
|
||||
* The revision walking machinery uses resources like per-object flag
|
||||
bits that need to be reset before a new iteration of walking
|
||||
begins, but the resources related to topological walk were not
|
||||
cleared correctly, which has been corrected.
|
||||
(merge 0aa0c2b2ec mh/clear-topo-walk-upon-reset later to maint).
|
||||
|
||||
* TravisCI update.
|
||||
(merge 176441bfb5 sg/osx-force-gcc-9 later to maint).
|
||||
|
||||
* While running "revert" or "cherry-pick --edit" for multiple
|
||||
commits, a recent regression incorrectly detected "nothing to
|
||||
commit, working tree clean", instead of replaying the commits,
|
||||
which has been corrected.
|
||||
(merge befd4f6a81 sg/assume-no-todo-update-in-cherry-pick later to maint).
|
||||
|
||||
* Work around a issue where a FD that is left open when spawning a
|
||||
child process and is kept open in the child can interfere with the
|
||||
operation in the parent process on Windows.
|
||||
|
||||
* One kind of progress messages were always given during commit-graph
|
||||
generation, instead of following the "if it takes more than two
|
||||
seconds, show progress" pattern, which has been corrected.
|
||||
|
||||
* "git rebase" did not work well when format.useAutoBase
|
||||
configuration variable is set, which has been corrected.
|
||||
|
||||
* The "diff" machinery learned not to lose added/removed blank lines
|
||||
in the context when --ignore-blank-lines and --function-context are
|
||||
used at the same time.
|
||||
(merge 0bb313a552 rs/xdiff-ignore-ws-w-func-context later to maint).
|
||||
|
||||
* The test on "fast-import" used to get stuck when "fast-import" died
|
||||
in the middle.
|
||||
(merge 0d9b0d7885 sg/t9300-robustify later to maint).
|
||||
|
||||
* "git format-patch" can take a set of configured format.notes values
|
||||
to specify which notes refs to use in the log message part of the
|
||||
output. The behaviour of this was not consistent with multiple
|
||||
--notes command line options, which has been corrected.
|
||||
(merge e0f9095aaa dl/format-patch-notes-config-fixup later to maint).
|
||||
|
||||
* "git p4" used to ignore lfs.storage configuration variable, which
|
||||
has been corrected.
|
||||
(merge ea94b16fb8 rb/p4-lfs later to maint).
|
||||
|
||||
* Assorted fixes to the directory traversal API.
|
||||
(merge 6836d2fe06 en/fill-directory-fixes later to maint).
|
||||
|
||||
* Forbid pathnames that the platform's filesystem cannot represent on
|
||||
MinGW.
|
||||
(merge 4dc42c6c18 js/mingw-reserved-filenames later to maint).
|
||||
|
||||
* "git rebase --signoff" stopped working when the command was written
|
||||
in C, which has been corrected.
|
||||
(merge 4fe7e43c53 en/rebase-signoff-fix later to maint).
|
||||
|
||||
* An earlier update to Git for Windows declared that a tree object is
|
||||
invalid if it has a path component with backslash in it, which was
|
||||
overly strict, which has been corrected. The only protection the
|
||||
Windows users need is to prevent such path (or any path that their
|
||||
filesystem cannot check out) from entering the index.
|
||||
(merge 224c7d70fa js/mingw-loosen-overstrict-tree-entry-checks later to maint).
|
||||
|
||||
* The code to write split commit-graph file(s) upon fetching computed
|
||||
bogus value for the parameter used in splitting the resulting
|
||||
files, which has been corrected.
|
||||
(merge 63020f175f ds/commit-graph-set-size-mult later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge 80736d7c5e jc/am-show-current-patch-docfix later to maint).
|
||||
(merge 8b656572ca sg/commit-graph-usage-fix later to maint).
|
||||
(merge 6c02042139 mr/clone-dir-exists-to-path-exists later to maint).
|
||||
(merge 44ae131e38 sg/blame-indent-heuristics-is-now-the-default later to maint).
|
||||
(merge 0115e5d929 dl/doc-diff-no-index-implies-exit-code later to maint).
|
||||
(merge 270de6acbe en/t6024-style later to maint).
|
||||
(merge 14c4776d75 ns/test-desc-typofix later to maint).
|
||||
(merge 68d40f30c4 dj/typofix-merge-strat later to maint).
|
||||
(merge f66e0401ab jk/optim-in-pack-idx-conversion later to maint).
|
||||
(merge 169bed7421 rs/parse-options-dup-null-fix later to maint).
|
||||
(merge 51bd6be32d rs/use-copy-array-in-mingw-shell-command-preparation later to maint).
|
||||
(merge b018719927 ma/t7004 later to maint).
|
||||
(merge 932757b0cc ar/install-doc-update-cmds-needing-the-shell later to maint).
|
||||
(merge 46efd28be1 ep/guard-kset-tar-headers later to maint).
|
||||
(merge 9e5afdf997 ec/fetch-mark-common-refs-trace2 later to maint).
|
||||
(merge f0e58b3fe8 pb/submodule-update-fetches later to maint).
|
||||
(merge 2a02262078 dl/t5520-cleanup later to maint).
|
||||
(merge a4fb016ba1 js/pkt-line-h-typofix later to maint).
|
||||
(merge 54a7a64613 rs/simplify-prepare-cmd later to maint).
|
||||
(merge 3eae30e464 jk/lore-is-the-archive later to maint).
|
||||
(merge 14b7664df8 dl/lore-is-the-archive later to maint).
|
||||
(merge 0e40a73a4c po/bundle-doc-clonable later to maint).
|
||||
(merge e714b898c6 as/t7812-missing-redirects-fix later to maint).
|
||||
(merge 528d9e6d01 jk/perf-wo-git-dot-pm later to maint).
|
||||
(merge fc42f20e24 sg/test-squelch-noise-in-commit-bulk later to maint).
|
||||
(merge c64368e3a2 bc/t9001-zsh-in-posix-emulation-mode later to maint).
|
||||
(merge 11de8dd7ef dr/branch-usage-casefix later to maint).
|
||||
(merge e05e8cf074 rs/archive-zip-code-cleanup later to maint).
|
||||
(merge 147ee35558 rs/commit-export-env-simplify later to maint).
|
||||
(merge 4507ecc771 rs/patch-id-use-oid-to-hex later to maint).
|
||||
(merge 51a0a4ed95 mr/bisect-use-after-free later to maint).
|
||||
(merge cc2bd5c45d pb/submodule-doc-xref later to maint).
|
||||
(merge df5be01669 ja/doc-markup-cleanup later to maint).
|
||||
(merge 7c5cea7242 mr/bisect-save-pointer-to-const-string later to maint).
|
||||
(merge 20a67e8ce9 js/use-test-tool-on-path later to maint).
|
||||
(merge 4e61b2214d ew/packfile-syscall-optim later to maint).
|
||||
(merge ace0f86c7f pb/clarify-line-log-doc later to maint).
|
||||
(merge 763a59e71c en/merge-recursive-oid-eq-simplify later to maint).
|
||||
(merge 4e2c4c0d4f do/gitweb-typofix-in-comments later to maint).
|
||||
(merge 421c0ffb02 jb/doc-multi-pack-idx-fix later to maint).
|
||||
(merge f8740c586b pm/am-in-body-header-doc-update later to maint).
|
||||
(merge 5814d44d9b tm/doc-submodule-absorb-fix later to maint).
|
@ -1,55 +0,0 @@
|
||||
Git 2.25.1 Release Notes
|
||||
========================
|
||||
|
||||
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.
|
||||
|
||||
* 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.
|
||||
|
||||
* Complete an update to tutorial that encourages "git switch" over
|
||||
"git checkout" that was done only half-way.
|
||||
|
||||
* 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
|
||||
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.
|
||||
|
||||
* "git fetch --refmap=" option has got a better documentation.
|
||||
|
||||
* 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.
|
||||
|
||||
* "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.
|
||||
|
||||
Also contains various documentation updates, code clean-ups and minor fixups.
|
@ -12,7 +12,7 @@ Fixes since v2.3.2
|
||||
* Description given by "grep -h" for its --exclude-standard option
|
||||
was phrased poorly.
|
||||
|
||||
* Documentation for "git remote add" mentioned "--tags" and
|
||||
* Documentaton for "git remote add" mentioned "--tags" and
|
||||
"--no-tags" and it was not clear that fetch from the remote in
|
||||
the future will use the default behaviour when neither is given
|
||||
to override it.
|
||||
|
@ -4,7 +4,7 @@ Git v2.3.7 Release Notes
|
||||
Fixes since v2.3.6
|
||||
------------------
|
||||
|
||||
* An earlier update to the parser that dissects a URL broke an
|
||||
* An earlier update to the parser that disects a URL broke an
|
||||
address, followed by a colon, followed by an empty string (instead
|
||||
of the port number), e.g. ssh://example.com:/path/to/repo.
|
||||
|
||||
|
@ -66,7 +66,7 @@ Fixes since v2.4.3
|
||||
* Some time ago, "git blame" (incorrectly) lost the convert_to_git()
|
||||
call when synthesizing a fake "tip" commit that represents the
|
||||
state in the working tree, which broke folks who record the history
|
||||
with LF line ending to make their project portable across
|
||||
with LF line ending to make their project portabile across
|
||||
platforms while terminating lines in their working tree files with
|
||||
CRLF for their platform.
|
||||
|
||||
|
@ -172,8 +172,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
incorrect patch text to "git apply". Add tests to demonstrate
|
||||
this.
|
||||
|
||||
I have a slight suspicion that this may be
|
||||
cf. <7vtzf77wjp.fsf@gitster.siamese.dyndns.org> coming back
|
||||
I have a slight suspicion that this may be $gmane/87202 coming back
|
||||
and biting us (I seem to have said "let's run with this and see
|
||||
what happens" back then).
|
||||
|
||||
|
@ -40,7 +40,7 @@ UI, Workflows & Features
|
||||
|
||||
* "git interpret-trailers" can now run outside of a Git repository.
|
||||
|
||||
* "git p4" learned to re-encode the pathname it uses to communicate
|
||||
* "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".
|
||||
|
@ -10,7 +10,7 @@ Fixes since v2.7
|
||||
setting GIT_WORK_TREE environment themselves.
|
||||
|
||||
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
||||
fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
|
||||
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
|
||||
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
||||
array.
|
||||
|
||||
|
@ -20,7 +20,7 @@ Fixes since v2.7.2
|
||||
tests.
|
||||
|
||||
* "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
|
||||
rev, i.e. the object named by the pathname with wildcard
|
||||
rev, i.e. the object named by the the pathname with wildcard
|
||||
characters in a tree object.
|
||||
|
||||
* "git rev-parse --git-common-dir" used in the worktree feature
|
||||
|
@ -189,7 +189,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
* Some calls to strcpy(3) triggers a false warning from static
|
||||
analyzers that are less intelligent than humans, and reducing the
|
||||
number of these false hits helps us notice real issues. A few
|
||||
calls to strcpy(3) in a couple of programs that are already safe
|
||||
calls to strcpy(3) in a couple of protrams that are already safe
|
||||
has been rewritten to avoid false warnings.
|
||||
|
||||
* The "name_path" API was an attempt to reduce the need to construct
|
||||
@ -270,7 +270,7 @@ notes for details).
|
||||
setting GIT_WORK_TREE environment themselves.
|
||||
|
||||
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
||||
fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
|
||||
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
|
||||
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
||||
array.
|
||||
|
||||
|
@ -55,8 +55,8 @@ Fixes since v2.8.2
|
||||
This is necessary to use Git on Windows shared directories, and is
|
||||
already enabled for the MinGW and plain Windows builds. It also
|
||||
has been used in Cygwin packaged versions of Git for quite a while.
|
||||
See https://lore.kernel.org/git/20160419091055.GF2345@dinwoodie.org/
|
||||
and https://lore.kernel.org/git/20150811100527.GW14466@dinwoodie.org/.
|
||||
See http://thread.gmane.org/gmane.comp.version-control.git/291853
|
||||
and http://thread.gmane.org/gmane.comp.version-control.git/275680.
|
||||
|
||||
* "git replace -e" did not honour "core.editor" configuration.
|
||||
|
||||
|
@ -368,7 +368,7 @@ notes for details).
|
||||
This is necessary to use Git on Windows shared directories, and is
|
||||
already enabled for the MinGW and plain Windows builds. It also
|
||||
has been used in Cygwin packaged versions of Git for quite a while.
|
||||
See https://lore.kernel.org/git/20160419091055.GF2345@dinwoodie.org/
|
||||
See http://thread.gmane.org/gmane.comp.version-control.git/291853
|
||||
|
||||
* "merge-octopus" strategy did not ensure that the index is clean
|
||||
when merge begins.
|
||||
|
@ -36,7 +36,7 @@ Fixes since v2.9.2
|
||||
* One part of "git am" had an oddball helper function that called
|
||||
stuff from outside "his" as opposed to calling what we have "ours",
|
||||
which was not gender-neutral and also inconsistent with the rest of
|
||||
the system where outside stuff is usually called "theirs" in
|
||||
the system where outside stuff is usuall called "theirs" in
|
||||
contrast to "ours".
|
||||
|
||||
* The test framework learned a new helper test_match_signal to
|
||||
|
@ -80,9 +80,7 @@ GitHub-Travis CI hints section for details.
|
||||
|
||||
Do not forget to update the documentation to describe the updated
|
||||
behavior and make sure that the resulting documentation set formats
|
||||
well (try the Documentation/doc-diff script).
|
||||
|
||||
We currently have a liberal mixture of US and UK English norms for
|
||||
well. It is currently a liberal mixture of US and UK English norms for
|
||||
spelling and grammar, which is somewhat unfortunate. A huge patch that
|
||||
touches the files all over the place only to correct the inconsistency
|
||||
is not welcome, though. Potential clashes with other changes that can
|
||||
@ -142,25 +140,19 @@ archive, summarize the relevant points of the discussion.
|
||||
|
||||
[[commit-reference]]
|
||||
If you want to reference a previous commit in the history of a stable
|
||||
branch, use the format "abbreviated hash (subject, date)", like this:
|
||||
branch, use the format "abbreviated sha1 (subject, date)",
|
||||
with the subject enclosed in a pair of double-quotes, like this:
|
||||
|
||||
....
|
||||
Commit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)
|
||||
Commit f86a374 ("pack-bitmap.c: fix a memleak", 2015-03-30)
|
||||
noticed that ...
|
||||
....
|
||||
|
||||
The "Copy commit summary" command of gitk can be used to obtain this
|
||||
format (with the subject enclosed in a pair of double-quotes), or this
|
||||
invocation of `git show`:
|
||||
format, or this invocation of `git show`:
|
||||
|
||||
....
|
||||
git show -s --pretty=reference <commit>
|
||||
....
|
||||
|
||||
or, on an older version of Git without support for --pretty=reference:
|
||||
|
||||
....
|
||||
git show -s --date=short --pretty='format:%h (%s, %ad)' <commit>
|
||||
git show -s --date=short --pretty='format:%h ("%s", %ad)' <commit>
|
||||
....
|
||||
|
||||
[[git-tools]]
|
||||
@ -378,15 +370,15 @@ such as "Thanks-to:", "Based-on-patch-by:", or "Mentored-by:".
|
||||
Some parts of the system have dedicated maintainers with their own
|
||||
repositories.
|
||||
|
||||
- `git-gui/` comes from git-gui project, maintained by Pratyush Yadav:
|
||||
- 'git-gui/' comes from git-gui project, maintained by Pat Thoyts:
|
||||
|
||||
https://github.com/prati0100/git-gui.git
|
||||
git://repo.or.cz/git-gui.git
|
||||
|
||||
- `gitk-git/` comes from Paul Mackerras's gitk project:
|
||||
- 'gitk-git/' comes from Paul Mackerras's gitk project:
|
||||
|
||||
git://ozlabs.org/~paulus/gitk
|
||||
|
||||
- `po/` comes from the localization coordinator, Jiang Xin:
|
||||
- 'po/' comes from the localization coordinator, Jiang Xin:
|
||||
|
||||
https://github.com/git-l10n/git-po/
|
||||
|
||||
|
@ -78,9 +78,9 @@ template::[header-declarations]
|
||||
<refmeta>
|
||||
<refentrytitle>{mantitle}</refentrytitle>
|
||||
<manvolnum>{manvolnum}</manvolnum>
|
||||
<refmiscinfo class="source">{mansource}</refmiscinfo>
|
||||
<refmiscinfo class="version">{manversion}</refmiscinfo>
|
||||
<refmiscinfo class="manual">{manmanual}</refmiscinfo>
|
||||
<refmiscinfo class="source">Git</refmiscinfo>
|
||||
<refmiscinfo class="version">{git_version}</refmiscinfo>
|
||||
<refmiscinfo class="manual">Git Manual</refmiscinfo>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>{manname}</refname>
|
||||
|
@ -9,40 +9,20 @@ module Git
|
||||
named :chrome
|
||||
|
||||
def process(parent, target, attrs)
|
||||
prefix = parent.document.attr('git-relative-html-prefix')
|
||||
if parent.document.doctype == 'book'
|
||||
"<ulink url=\"#{prefix}#{target}.html\">" \
|
||||
"#{target}(#{attrs[1]})</ulink>"
|
||||
elsif parent.document.basebackend? 'html'
|
||||
%(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>)
|
||||
if parent.document.basebackend? 'html'
|
||||
prefix = parent.document.attr('git-relative-html-prefix')
|
||||
%(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>\n)
|
||||
elsif parent.document.basebackend? 'docbook'
|
||||
"<citerefentry>\n" \
|
||||
"<refentrytitle>#{target}</refentrytitle>" \
|
||||
"<manvolnum>#{attrs[1]}</manvolnum>\n" \
|
||||
"</citerefentry>"
|
||||
"</citerefentry>\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor
|
||||
def process document, output
|
||||
if document.basebackend? 'docbook'
|
||||
mansource = document.attributes['mansource']
|
||||
manversion = document.attributes['manversion']
|
||||
manmanual = document.attributes['manmanual']
|
||||
new_tags = "" \
|
||||
"<refmiscinfo class=\"source\">#{mansource}</refmiscinfo>\n" \
|
||||
"<refmiscinfo class=\"version\">#{manversion}</refmiscinfo>\n" \
|
||||
"<refmiscinfo class=\"manual\">#{manmanual}</refmiscinfo>\n"
|
||||
output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>")
|
||||
end
|
||||
output
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Asciidoctor::Extensions.register do
|
||||
inline_macro Git::Documentation::LinkGitProcessor, :linkgit
|
||||
postprocessor Git::Documentation::DocumentPostProcessor
|
||||
end
|
||||
|
@ -110,24 +110,5 @@ commit. And the default value is 40. If there are more than one
|
||||
`-C` options given, the <num> argument of the last `-C` will
|
||||
take effect.
|
||||
|
||||
--ignore-rev <rev>::
|
||||
Ignore changes made by the revision when assigning blame, as if the
|
||||
change never happened. Lines that were changed or added by an ignored
|
||||
commit will be blamed on the previous commit that changed that line or
|
||||
nearby lines. This option may be specified multiple times to ignore
|
||||
more than one revision. If the `blame.markIgnoredLines` config option
|
||||
is set, then lines that were changed by an ignored commit and attributed to
|
||||
another commit will be marked with a `?` in the blame output. If the
|
||||
`blame.markUnblamableLines` config option is set, then those lines touched
|
||||
by an ignored commit that we could not attribute to another revision are
|
||||
marked with a '*'.
|
||||
|
||||
--ignore-revs-file <file>::
|
||||
Ignore revisions listed in `file`, which must be in the same format as an
|
||||
`fsck.skipList`. This option may be repeated, and these files will be
|
||||
processed after any files specified with the `blame.ignoreRevsFile` config
|
||||
option. An empty file name, `""`, will clear the list of revs from
|
||||
previously processed files.
|
||||
|
||||
-h::
|
||||
Show help message.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
||||
add.ignoreErrors::
|
||||
add.ignore-errors (deprecated)::
|
||||
Tells 'git add' to continue adding files when some files cannot be
|
||||
added due to indexing errors. Equivalent to the `--ignore-errors`
|
||||
option of linkgit:git-add[1]. `add.ignore-errors` is deprecated,
|
||||
as it does not follow the usual naming convention for configuration
|
||||
variables.
|
||||
|
||||
add.interactive.useBuiltin::
|
||||
[EXPERIMENTAL] Set to `true` to use the experimental built-in
|
||||
implementation of the interactive version of linkgit:git-add[1]
|
||||
instead of the Perl script version. Is `false` by default.
|
@ -1,113 +0,0 @@
|
||||
advice.*::
|
||||
These variables control various optional help messages designed to
|
||||
aid new users. All 'advice.*' variables default to 'true', and you
|
||||
can tell Git that you do not need help by setting these to 'false':
|
||||
+
|
||||
--
|
||||
fetchShowForcedUpdates::
|
||||
Advice shown when linkgit:git-fetch[1] takes a long time
|
||||
to calculate forced updates after ref updates, or to warn
|
||||
that the check is disabled.
|
||||
pushUpdateRejected::
|
||||
Set this variable to 'false' if you want to disable
|
||||
'pushNonFFCurrent',
|
||||
'pushNonFFMatching', 'pushAlreadyExists',
|
||||
'pushFetchFirst', and 'pushNeedsForce'
|
||||
simultaneously.
|
||||
pushNonFFCurrent::
|
||||
Advice shown when linkgit:git-push[1] fails due to a
|
||||
non-fast-forward update to the current branch.
|
||||
pushNonFFMatching::
|
||||
Advice shown when you ran linkgit:git-push[1] and pushed
|
||||
'matching refs' explicitly (i.e. you used ':', or
|
||||
specified a refspec that isn't your current branch) and
|
||||
it resulted in a non-fast-forward error.
|
||||
pushAlreadyExists::
|
||||
Shown when linkgit:git-push[1] rejects an update that
|
||||
does not qualify for fast-forwarding (e.g., a tag.)
|
||||
pushFetchFirst::
|
||||
Shown when linkgit:git-push[1] rejects an update that
|
||||
tries to overwrite a remote ref that points at an
|
||||
object we do not have.
|
||||
pushNeedsForce::
|
||||
Shown when linkgit:git-push[1] rejects an update that
|
||||
tries to overwrite a remote ref that points at an
|
||||
object that is not a commit-ish, or make the remote
|
||||
ref point at an object that is not a commit-ish.
|
||||
pushUnqualifiedRefname::
|
||||
Shown when linkgit:git-push[1] gives up trying to
|
||||
guess based on the source and destination refs what
|
||||
remote ref namespace the source belongs in, but where
|
||||
we can still suggest that the user push to either
|
||||
refs/heads/* or refs/tags/* based on the type of the
|
||||
source object.
|
||||
statusAheadBehind::
|
||||
Shown when linkgit:git-status[1] computes the ahead/behind
|
||||
counts for a local ref compared to its remote tracking ref,
|
||||
and that calculation takes longer than expected. Will not
|
||||
appear if `status.aheadBehind` is false or the option
|
||||
`--no-ahead-behind` is given.
|
||||
statusHints::
|
||||
Show directions on how to proceed from the current
|
||||
state in the output of linkgit:git-status[1], in
|
||||
the template shown when writing commit messages in
|
||||
linkgit:git-commit[1], and in the help message shown
|
||||
by linkgit:git-switch[1] or
|
||||
linkgit:git-checkout[1] when switching branch.
|
||||
statusUoption::
|
||||
Advise to consider using the `-u` option to linkgit:git-status[1]
|
||||
when the command takes more than 2 seconds to enumerate untracked
|
||||
files.
|
||||
commitBeforeMerge::
|
||||
Advice shown when linkgit:git-merge[1] refuses to
|
||||
merge to avoid overwriting local changes.
|
||||
resetQuiet::
|
||||
Advice to consider using the `--quiet` option to linkgit:git-reset[1]
|
||||
when the command takes more than 2 seconds to enumerate unstaged
|
||||
changes after reset.
|
||||
resolveConflict::
|
||||
Advice shown by various commands when conflicts
|
||||
prevent the operation from being performed.
|
||||
sequencerInUse::
|
||||
Advice shown when a sequencer command is already in progress.
|
||||
implicitIdentity::
|
||||
Advice on how to set your identity configuration when
|
||||
your information is guessed from the system username and
|
||||
domain name.
|
||||
detachedHead::
|
||||
Advice shown when you used
|
||||
linkgit:git-switch[1] or linkgit:git-checkout[1]
|
||||
to move to the detach HEAD state, to instruct how to
|
||||
create a local branch after the fact.
|
||||
checkoutAmbiguousRemoteBranchName::
|
||||
Advice shown when the argument to
|
||||
linkgit:git-checkout[1] and linkgit:git-switch[1]
|
||||
ambiguously resolves to a
|
||||
remote tracking branch on more than one remote in
|
||||
situations where an unambiguous argument would have
|
||||
otherwise caused a remote-tracking branch to be
|
||||
checked out. See the `checkout.defaultRemote`
|
||||
configuration variable for how to set a given remote
|
||||
to used by default in some situations where this
|
||||
advice would be printed.
|
||||
amWorkDir::
|
||||
Advice that shows the location of the patch file when
|
||||
linkgit:git-am[1] fails to apply it.
|
||||
rmHints::
|
||||
In case of failure in the output of linkgit:git-rm[1],
|
||||
show directions on how to proceed from the current state.
|
||||
addEmbeddedRepo::
|
||||
Advice on what to do when you've accidentally added one
|
||||
git repo inside of another.
|
||||
ignoredHook::
|
||||
Advice shown if a hook is ignored because the hook is not
|
||||
set as executable.
|
||||
waitingForEditor::
|
||||
Print a message to the terminal whenever Git is waiting for
|
||||
editor input from the user.
|
||||
nestedTag::
|
||||
Advice shown if a user attempts to recursively tag a tag object.
|
||||
submoduleAlternateErrorStrategyDie::
|
||||
Advice shown when a submodule.alternateErrorStrategy option
|
||||
configured to "die" causes a fatal error.
|
||||
--
|
@ -1,28 +0,0 @@
|
||||
alias.*::
|
||||
Command aliases for the linkgit:git[1] command wrapper - e.g.
|
||||
after defining `alias.last = cat-file commit HEAD`, the invocation
|
||||
`git last` is equivalent to `git cat-file commit HEAD`. To avoid
|
||||
confusion and troubles with script usage, aliases that
|
||||
hide existing Git commands are ignored. Arguments are split by
|
||||
spaces, the usual shell quoting and escaping is supported.
|
||||
A quote pair or a backslash can be used to quote them.
|
||||
+
|
||||
Note that the first word of an alias does not necessarily have to be a
|
||||
command. It can be a command-line option that will be passed into the
|
||||
invocation of `git`. In particular, this is useful when used with `-c`
|
||||
to pass in one-time configurations or `-p` to force pagination. For example,
|
||||
`loud-rebase = -c commit.verbose=true rebase` can be defined such that
|
||||
running `git loud-rebase` would be equivalent to
|
||||
`git -c commit.verbose=true rebase`. Also, `ps = -p status` would be a
|
||||
helpful alias since `git ps` would paginate the output of `git status`
|
||||
where the original command does not.
|
||||
+
|
||||
If the alias expansion is prefixed with an exclamation point,
|
||||
it will be treated as a shell command. For example, defining
|
||||
`alias.new = !gitk --all --not ORIG_HEAD`, the invocation
|
||||
`git new` is equivalent to running the shell command
|
||||
`gitk --all --not ORIG_HEAD`. Note that shell commands will be
|
||||
executed from the top-level directory of a repository, which may
|
||||
not necessarily be the current directory.
|
||||
`GIT_PREFIX` is set as returned by running `git rev-parse --show-prefix`
|
||||
from the original current directory. See linkgit:git-rev-parse[1].
|
@ -1,14 +0,0 @@
|
||||
am.keepcr::
|
||||
If true, git-am will call git-mailsplit for patches in mbox format
|
||||
with parameter `--keep-cr`. In this case git-mailsplit will
|
||||
not remove `\r` from lines ending with `\r\n`. Can be overridden
|
||||
by giving `--no-keep-cr` from the command line.
|
||||
See linkgit:git-am[1], linkgit:git-mailsplit[1].
|
||||
|
||||
am.threeWay::
|
||||
By default, `git am` will fail if the patch does not apply cleanly. When
|
||||
set to true, this setting tells `git am` to fall back on 3-way merge if
|
||||
the patch records the identity of blobs it is supposed to apply to and
|
||||
we have those blobs available locally (equivalent to giving the `--3way`
|
||||
option from the command line). Defaults to `false`.
|
||||
See linkgit:git-am[1].
|
@ -1,11 +0,0 @@
|
||||
apply.ignoreWhitespace::
|
||||
When set to 'change', tells 'git apply' to ignore changes in
|
||||
whitespace, in the same way as the `--ignore-space-change`
|
||||
option.
|
||||
When set to one of: no, none, never, false tells 'git apply' to
|
||||
respect all whitespace differences.
|
||||
See linkgit:git-apply[1].
|
||||
|
||||
apply.whitespace::
|
||||
Tells 'git apply' how to handle whitespaces, in the same way
|
||||
as the `--whitespace` option. See linkgit:git-apply[1].
|
@ -1,37 +0,0 @@
|
||||
blame.blankBoundary::
|
||||
Show blank commit object name for boundary commits in
|
||||
linkgit:git-blame[1]. This option defaults to false.
|
||||
|
||||
blame.coloring::
|
||||
This determines the coloring scheme to be applied to blame
|
||||
output. It can be 'repeatedLines', 'highlightRecent',
|
||||
or 'none' which is the default.
|
||||
|
||||
blame.date::
|
||||
Specifies the format used to output dates in linkgit:git-blame[1].
|
||||
If unset the iso format is used. For supported values,
|
||||
see the discussion of the `--date` option at linkgit:git-log[1].
|
||||
|
||||
blame.showEmail::
|
||||
Show the author email instead of author name in linkgit:git-blame[1].
|
||||
This option defaults to false.
|
||||
|
||||
blame.showRoot::
|
||||
Do not treat root commits as boundaries in linkgit:git-blame[1].
|
||||
This option defaults to false.
|
||||
|
||||
blame.ignoreRevsFile::
|
||||
Ignore revisions listed in the file, one unabbreviated object name per
|
||||
line, in linkgit:git-blame[1]. Whitespace and comments beginning with
|
||||
`#` are ignored. This option may be repeated multiple times. Empty
|
||||
file names will reset the list of ignored revisions. This option will
|
||||
be handled before the command line option `--ignore-revs-file`.
|
||||
|
||||
blame.markUnblamables::
|
||||
Mark lines that were changed by an ignored revision that we could not
|
||||
attribute to another commit with a '*' in the output of
|
||||
linkgit:git-blame[1].
|
||||
|
||||
blame.markIgnoredLines::
|
||||
Mark lines that were changed by an ignored revision that we attributed to
|
||||
another commit with a '?' in the output of linkgit:git-blame[1].
|
@ -1,102 +0,0 @@
|
||||
branch.autoSetupMerge::
|
||||
Tells 'git branch', 'git switch' and 'git checkout' to set up new branches
|
||||
so that linkgit:git-pull[1] will appropriately merge from the
|
||||
starting point branch. Note that even if this option is not set,
|
||||
this behavior can be chosen per-branch using the `--track`
|
||||
and `--no-track` options. The valid settings are: `false` -- no
|
||||
automatic setup is done; `true` -- automatic setup is done when the
|
||||
starting point is a remote-tracking branch; `always` --
|
||||
automatic setup is done when the starting point is either a
|
||||
local branch or remote-tracking
|
||||
branch. This option defaults to true.
|
||||
|
||||
branch.autoSetupRebase::
|
||||
When a new branch is created with 'git branch', 'git switch' or 'git checkout'
|
||||
that tracks another branch, this variable tells Git to set
|
||||
up pull to rebase instead of merge (see "branch.<name>.rebase").
|
||||
When `never`, rebase is never automatically set to true.
|
||||
When `local`, rebase is set to true for tracked branches of
|
||||
other local branches.
|
||||
When `remote`, rebase is set to true for tracked branches of
|
||||
remote-tracking branches.
|
||||
When `always`, rebase will be set to true for all tracking
|
||||
branches.
|
||||
See "branch.autoSetupMerge" for details on how to set up a
|
||||
branch to track another branch.
|
||||
This option defaults to never.
|
||||
|
||||
branch.sort::
|
||||
This variable controls the sort ordering of branches when displayed by
|
||||
linkgit:git-branch[1]. Without the "--sort=<value>" option provided, the
|
||||
value of this variable will be used as the default.
|
||||
See linkgit:git-for-each-ref[1] field names for valid values.
|
||||
|
||||
branch.<name>.remote::
|
||||
When on branch <name>, it tells 'git fetch' and 'git push'
|
||||
which remote to fetch from/push to. The remote to push to
|
||||
may be overridden with `remote.pushDefault` (for all branches).
|
||||
The remote to push to, for the current branch, may be further
|
||||
overridden by `branch.<name>.pushRemote`. If no remote is
|
||||
configured, or if you are not on any branch, it defaults to
|
||||
`origin` for fetching and `remote.pushDefault` for pushing.
|
||||
Additionally, `.` (a period) is the current local repository
|
||||
(a dot-repository), see `branch.<name>.merge`'s final note below.
|
||||
|
||||
branch.<name>.pushRemote::
|
||||
When on branch <name>, it overrides `branch.<name>.remote` for
|
||||
pushing. It also overrides `remote.pushDefault` for pushing
|
||||
from branch <name>. When you pull from one place (e.g. your
|
||||
upstream) and push to another place (e.g. your own publishing
|
||||
repository), you would want to set `remote.pushDefault` to
|
||||
specify the remote to push to for all branches, and use this
|
||||
option to override it for a specific branch.
|
||||
|
||||
branch.<name>.merge::
|
||||
Defines, together with branch.<name>.remote, the upstream branch
|
||||
for the given branch. It tells 'git fetch'/'git pull'/'git rebase' which
|
||||
branch to merge and can also affect 'git push' (see push.default).
|
||||
When in branch <name>, it tells 'git fetch' the default
|
||||
refspec to be marked for merging in FETCH_HEAD. The value is
|
||||
handled like the remote part of a refspec, and must match a
|
||||
ref which is fetched from the remote given by
|
||||
"branch.<name>.remote".
|
||||
The merge information is used by 'git pull' (which at first calls
|
||||
'git fetch') to lookup the default branch for merging. Without
|
||||
this option, 'git pull' defaults to merge the first refspec fetched.
|
||||
Specify multiple values to get an octopus merge.
|
||||
If you wish to setup 'git pull' so that it merges into <name> from
|
||||
another branch in the local repository, you can point
|
||||
branch.<name>.merge to the desired branch, and use the relative path
|
||||
setting `.` (a period) for branch.<name>.remote.
|
||||
|
||||
branch.<name>.mergeOptions::
|
||||
Sets default options for merging into branch <name>. The syntax and
|
||||
supported options are the same as those of linkgit:git-merge[1], but
|
||||
option values containing whitespace characters are currently not
|
||||
supported.
|
||||
|
||||
branch.<name>.rebase::
|
||||
When true, rebase the branch <name> on top of the fetched branch,
|
||||
instead of merging the default branch from the default remote when
|
||||
"git pull" is run. See "pull.rebase" for doing this in a non
|
||||
branch-specific manner.
|
||||
+
|
||||
When `merges`, pass the `--rebase-merges` option to 'git rebase'
|
||||
so that the local merge commits are included in the rebase (see
|
||||
linkgit:git-rebase[1] for details).
|
||||
+
|
||||
When `preserve` (deprecated in favor of `merges`), also pass
|
||||
`--preserve-merges` along to 'git rebase' so that locally committed merge
|
||||
commits will not be flattened by running 'git pull'.
|
||||
+
|
||||
When the value is `interactive`, the rebase is run in interactive mode.
|
||||
+
|
||||
*NOTE*: this is a possibly dangerous operation; do *not* use
|
||||
it unless you understand the implications (see linkgit:git-rebase[1]
|
||||
for details).
|
||||
|
||||
branch.<name>.description::
|
||||
Branch description, can be edited with
|
||||
`git branch --edit-description`. Branch description is
|
||||
automatically added in the format-patch cover letter or
|
||||
request-pull summary.
|
@ -1,9 +0,0 @@
|
||||
browser.<tool>.cmd::
|
||||
Specify the command to invoke the specified browser. The
|
||||
specified command is evaluated in shell with the URLs passed
|
||||
as arguments. (See linkgit:git-web{litdd}browse[1].)
|
||||
|
||||
browser.<tool>.path::
|
||||
Override the path for the given tool that may be used to
|
||||
browse HTML help (see `-w` option in linkgit:git-help[1]) or a
|
||||
working repository in gitweb (see linkgit:git-instaweb[1]).
|
@ -1,18 +0,0 @@
|
||||
checkout.defaultRemote::
|
||||
When you run 'git checkout <something>'
|
||||
or 'git switch <something>' and only have one
|
||||
remote, it may implicitly fall back on checking out and
|
||||
tracking e.g. 'origin/<something>'. This stops working as soon
|
||||
as you have more than one remote with a '<something>'
|
||||
reference. This setting allows for setting the name of a
|
||||
preferred remote that should always win when it comes to
|
||||
disambiguation. The typical use-case is to set this to
|
||||
`origin`.
|
||||
+
|
||||
Currently this is used by linkgit:git-switch[1] and
|
||||
linkgit:git-checkout[1] when 'git checkout <something>'
|
||||
or 'git switch <something>'
|
||||
will checkout the '<something>' branch on another remote,
|
||||
and by linkgit:git-worktree[1] when 'git worktree add' refers to a
|
||||
remote branch. This setting might be used for other checkout-like
|
||||
commands or functionality in the future.
|
@ -1,3 +0,0 @@
|
||||
clean.requireForce::
|
||||
A boolean to make git-clean do nothing unless given -f,
|
||||
-i or -n. Defaults to true.
|
@ -1,201 +0,0 @@
|
||||
color.advice::
|
||||
A boolean to enable/disable color in hints (e.g. when a push
|
||||
failed, see `advice.*` for a list). May be set to `always`,
|
||||
`false` (or `never`) or `auto` (or `true`), in which case colors
|
||||
are used only when the error output goes to a terminal. If
|
||||
unset, then the value of `color.ui` is used (`auto` by default).
|
||||
|
||||
color.advice.hint::
|
||||
Use customized color for hints.
|
||||
|
||||
color.blame.highlightRecent::
|
||||
This can be used to color the metadata of a blame line depending
|
||||
on age of the line.
|
||||
+
|
||||
This setting should be set to a comma-separated list of color and date settings,
|
||||
starting and ending with a color, the dates should be set from oldest to newest.
|
||||
The metadata will be colored given the colors if the line was introduced
|
||||
before the given timestamp, overwriting older timestamped colors.
|
||||
+
|
||||
Instead of an absolute timestamp relative timestamps work as well, e.g.
|
||||
2.weeks.ago is valid to address anything older than 2 weeks.
|
||||
+
|
||||
It defaults to 'blue,12 month ago,white,1 month ago,red', which colors
|
||||
everything older than one year blue, recent changes between one month and
|
||||
one year old are kept white, and lines introduced within the last month are
|
||||
colored red.
|
||||
|
||||
color.blame.repeatedLines::
|
||||
Use the customized color for the part of git-blame output that
|
||||
is repeated meta information per line (such as commit id,
|
||||
author name, date and timezone). Defaults to cyan.
|
||||
|
||||
color.branch::
|
||||
A boolean to enable/disable color in the output of
|
||||
linkgit:git-branch[1]. May be set to `always`,
|
||||
`false` (or `never`) or `auto` (or `true`), in which case colors are used
|
||||
only when the output is to a terminal. If unset, then the
|
||||
value of `color.ui` is used (`auto` by default).
|
||||
|
||||
color.branch.<slot>::
|
||||
Use customized color for branch coloration. `<slot>` is one of
|
||||
`current` (the current branch), `local` (a local branch),
|
||||
`remote` (a remote-tracking branch in refs/remotes/),
|
||||
`upstream` (upstream tracking branch), `plain` (other
|
||||
refs).
|
||||
|
||||
color.diff::
|
||||
Whether to use ANSI escape sequences to add color to patches.
|
||||
If this is set to `always`, linkgit:git-diff[1],
|
||||
linkgit:git-log[1], and linkgit:git-show[1] will use color
|
||||
for all patches. If it is set to `true` or `auto`, those
|
||||
commands will only use color when output is to the terminal.
|
||||
If unset, then the value of `color.ui` is used (`auto` by
|
||||
default).
|
||||
+
|
||||
This does not affect linkgit:git-format-patch[1] or the
|
||||
'git-diff-{asterisk}' plumbing commands. Can be overridden on the
|
||||
command line with the `--color[=<when>]` option.
|
||||
|
||||
color.diff.<slot>::
|
||||
Use customized color for diff colorization. `<slot>` specifies
|
||||
which part of the patch to use the specified color, and is one
|
||||
of `context` (context text - `plain` is a historical synonym),
|
||||
`meta` (metainformation), `frag`
|
||||
(hunk header), 'func' (function in hunk header), `old` (removed lines),
|
||||
`new` (added lines), `commit` (commit headers), `whitespace`
|
||||
(highlighting whitespace errors), `oldMoved` (deleted lines),
|
||||
`newMoved` (added lines), `oldMovedDimmed`, `oldMovedAlternative`,
|
||||
`oldMovedAlternativeDimmed`, `newMovedDimmed`, `newMovedAlternative`
|
||||
`newMovedAlternativeDimmed` (See the '<mode>'
|
||||
setting of '--color-moved' in linkgit:git-diff[1] for details),
|
||||
`contextDimmed`, `oldDimmed`, `newDimmed`, `contextBold`,
|
||||
`oldBold`, and `newBold` (see linkgit:git-range-diff[1] for details).
|
||||
|
||||
color.decorate.<slot>::
|
||||
Use customized color for 'git log --decorate' output. `<slot>` is one
|
||||
of `branch`, `remoteBranch`, `tag`, `stash` or `HEAD` for local
|
||||
branches, remote-tracking branches, tags, stash and HEAD, respectively
|
||||
and `grafted` for grafted commits.
|
||||
|
||||
color.grep::
|
||||
When set to `always`, always highlight matches. When `false` (or
|
||||
`never`), never. When set to `true` or `auto`, use color only
|
||||
when the output is written to the terminal. If unset, then the
|
||||
value of `color.ui` is used (`auto` by default).
|
||||
|
||||
color.grep.<slot>::
|
||||
Use customized color for grep colorization. `<slot>` specifies which
|
||||
part of the line to use the specified color, and is one of
|
||||
+
|
||||
--
|
||||
`context`;;
|
||||
non-matching text in context lines (when using `-A`, `-B`, or `-C`)
|
||||
`filename`;;
|
||||
filename prefix (when not using `-h`)
|
||||
`function`;;
|
||||
function name lines (when using `-p`)
|
||||
`lineNumber`;;
|
||||
line number prefix (when using `-n`)
|
||||
`column`;;
|
||||
column number prefix (when using `--column`)
|
||||
`match`;;
|
||||
matching text (same as setting `matchContext` and `matchSelected`)
|
||||
`matchContext`;;
|
||||
matching text in context lines
|
||||
`matchSelected`;;
|
||||
matching text in selected lines
|
||||
`selected`;;
|
||||
non-matching text in selected lines
|
||||
`separator`;;
|
||||
separators between fields on a line (`:`, `-`, and `=`)
|
||||
and between hunks (`--`)
|
||||
--
|
||||
|
||||
color.interactive::
|
||||
When set to `always`, always use colors for interactive prompts
|
||||
and displays (such as those used by "git-add --interactive" and
|
||||
"git-clean --interactive"). When false (or `never`), never.
|
||||
When set to `true` or `auto`, use colors only when the output is
|
||||
to the terminal. If unset, then the value of `color.ui` is
|
||||
used (`auto` by default).
|
||||
|
||||
color.interactive.<slot>::
|
||||
Use customized color for 'git add --interactive' and 'git clean
|
||||
--interactive' output. `<slot>` may be `prompt`, `header`, `help`
|
||||
or `error`, for four distinct types of normal output from
|
||||
interactive commands.
|
||||
|
||||
color.pager::
|
||||
A boolean to enable/disable colored output when the pager is in
|
||||
use (default is true).
|
||||
|
||||
color.push::
|
||||
A boolean to enable/disable color in push errors. May be set to
|
||||
`always`, `false` (or `never`) or `auto` (or `true`), in which
|
||||
case colors are used only when the error output goes to a terminal.
|
||||
If unset, then the value of `color.ui` is used (`auto` by default).
|
||||
|
||||
color.push.error::
|
||||
Use customized color for push errors.
|
||||
|
||||
color.remote::
|
||||
If set, keywords at the start of the line are highlighted. The
|
||||
keywords are "error", "warning", "hint" and "success", and are
|
||||
matched case-insensitively. May be set to `always`, `false` (or
|
||||
`never`) or `auto` (or `true`). If unset, then the value of
|
||||
`color.ui` is used (`auto` by default).
|
||||
|
||||
color.remote.<slot>::
|
||||
Use customized color for each remote keyword. `<slot>` may be
|
||||
`hint`, `warning`, `success` or `error` which match the
|
||||
corresponding keyword.
|
||||
|
||||
color.showBranch::
|
||||
A boolean to enable/disable color in the output of
|
||||
linkgit:git-show-branch[1]. May be set to `always`,
|
||||
`false` (or `never`) or `auto` (or `true`), in which case colors are used
|
||||
only when the output is to a terminal. If unset, then the
|
||||
value of `color.ui` is used (`auto` by default).
|
||||
|
||||
color.status::
|
||||
A boolean to enable/disable color in the output of
|
||||
linkgit:git-status[1]. May be set to `always`,
|
||||
`false` (or `never`) or `auto` (or `true`), in which case colors are used
|
||||
only when the output is to a terminal. If unset, then the
|
||||
value of `color.ui` is used (`auto` by default).
|
||||
|
||||
color.status.<slot>::
|
||||
Use customized color for status colorization. `<slot>` is
|
||||
one of `header` (the header text of the status message),
|
||||
`added` or `updated` (files which are added but not committed),
|
||||
`changed` (files which are changed but not added in the index),
|
||||
`untracked` (files which are not tracked by Git),
|
||||
`branch` (the current branch),
|
||||
`nobranch` (the color the 'no branch' warning is shown in, defaulting
|
||||
to red),
|
||||
`localBranch` or `remoteBranch` (the local and remote branch names,
|
||||
respectively, when branch and tracking information is displayed in the
|
||||
status short-format), or
|
||||
`unmerged` (files which have unmerged changes).
|
||||
|
||||
color.transport::
|
||||
A boolean to enable/disable color when pushes are rejected. May be
|
||||
set to `always`, `false` (or `never`) or `auto` (or `true`), in which
|
||||
case colors are used only when the error output goes to a terminal.
|
||||
If unset, then the value of `color.ui` is used (`auto` by default).
|
||||
|
||||
color.transport.rejected::
|
||||
Use customized color when a push was rejected.
|
||||
|
||||
color.ui::
|
||||
This variable determines the default value for variables such
|
||||
as `color.diff` and `color.grep` that control the use of color
|
||||
per command family. Its scope will expand as more commands learn
|
||||
configuration to set a default for the `--color` option. Set it
|
||||
to `false` or `never` if you prefer Git commands not to use
|
||||
color unless enabled explicitly with some other configuration
|
||||
or the `--color` option. Set it to `always` if you want all
|
||||
output not intended for machine consumption to use color, to
|
||||
`true` or `auto` (this is the default since Git 1.8.4) if you
|
||||
want such output to use color when written to the terminal.
|
@ -1,55 +0,0 @@
|
||||
column.ui::
|
||||
Specify whether supported commands should output in columns.
|
||||
This variable consists of a list of tokens separated by spaces
|
||||
or commas:
|
||||
+
|
||||
These options control when the feature should be enabled
|
||||
(defaults to 'never'):
|
||||
+
|
||||
--
|
||||
`always`;;
|
||||
always show in columns
|
||||
`never`;;
|
||||
never show in columns
|
||||
`auto`;;
|
||||
show in columns if the output is to the terminal
|
||||
--
|
||||
+
|
||||
These options control layout (defaults to 'column'). Setting any
|
||||
of these implies 'always' if none of 'always', 'never', or 'auto' are
|
||||
specified.
|
||||
+
|
||||
--
|
||||
`column`;;
|
||||
fill columns before rows
|
||||
`row`;;
|
||||
fill rows before columns
|
||||
`plain`;;
|
||||
show in one column
|
||||
--
|
||||
+
|
||||
Finally, these options can be combined with a layout option (defaults
|
||||
to 'nodense'):
|
||||
+
|
||||
--
|
||||
`dense`;;
|
||||
make unequal size columns to utilize more space
|
||||
`nodense`;;
|
||||
make equal size columns
|
||||
--
|
||||
|
||||
column.branch::
|
||||
Specify whether to output branch listing in `git branch` in columns.
|
||||
See `column.ui` for details.
|
||||
|
||||
column.clean::
|
||||
Specify the layout when list items in `git clean -i`, which always
|
||||
shows files and directories in columns. See `column.ui` for details.
|
||||
|
||||
column.status::
|
||||
Specify whether to output untracked files in `git status` in columns.
|
||||
See `column.ui` for details.
|
||||
|
||||
column.tag::
|
||||
Specify whether to output tag listing in `git tag` in columns.
|
||||
See `column.ui` for details.
|
@ -1,29 +0,0 @@
|
||||
commit.cleanup::
|
||||
This setting overrides the default of the `--cleanup` option in
|
||||
`git commit`. See linkgit:git-commit[1] for details. Changing the
|
||||
default can be useful when you always want to keep lines that begin
|
||||
with comment character `#` in your log message, in which case you
|
||||
would do `git config commit.cleanup whitespace` (note that you will
|
||||
have to remove the help lines that begin with `#` in the commit log
|
||||
template yourself, if you do this).
|
||||
|
||||
commit.gpgSign::
|
||||
|
||||
A boolean to specify whether all commits should be GPG signed.
|
||||
Use of this option when doing operations such as rebase can
|
||||
result in a large number of commits being signed. It may be
|
||||
convenient to use an agent to avoid typing your GPG passphrase
|
||||
several times.
|
||||
|
||||
commit.status::
|
||||
A boolean to enable/disable inclusion of status information in the
|
||||
commit message template when using an editor to prepare the commit
|
||||
message. Defaults to true.
|
||||
|
||||
commit.template::
|
||||
Specify the pathname of a file to use as the template for
|
||||
new commit messages.
|
||||
|
||||
commit.verbose::
|
||||
A boolean or int to specify the level of verbose with `git commit`.
|
||||
See linkgit:git-commit[1].
|
@ -1,7 +0,0 @@
|
||||
completion.commands::
|
||||
This is only used by git-completion.bash to add or remove
|
||||
commands from the list of completed commands. Normally only
|
||||
porcelain commands and a few select others are completed. You
|
||||
can add more commands, separated by space, in this
|
||||
variable. Prefixing the command with '-' will remove it from
|
||||
the existing list.
|
@ -1,617 +0,0 @@
|
||||
core.fileMode::
|
||||
Tells Git if the executable bit of files in the working tree
|
||||
is to be honored.
|
||||
+
|
||||
Some filesystems lose the executable bit when a file that is
|
||||
marked as executable is checked out, or checks out a
|
||||
non-executable file with executable bit on.
|
||||
linkgit:git-clone[1] or linkgit:git-init[1] probe the filesystem
|
||||
to see if it handles the executable bit correctly
|
||||
and this variable is automatically set as necessary.
|
||||
+
|
||||
A repository, however, may be on a filesystem that handles
|
||||
the filemode correctly, and this variable is set to 'true'
|
||||
when created, but later may be made accessible from another
|
||||
environment that loses the filemode (e.g. exporting ext4 via
|
||||
CIFS mount, visiting a Cygwin created repository with
|
||||
Git for Windows or Eclipse).
|
||||
In such a case it may be necessary to set this variable to 'false'.
|
||||
See linkgit:git-update-index[1].
|
||||
+
|
||||
The default is true (when core.filemode is not specified in the config file).
|
||||
|
||||
core.hideDotFiles::
|
||||
(Windows-only) If true, mark newly-created directories and files whose
|
||||
name starts with a dot as hidden. If 'dotGitOnly', only the `.git/`
|
||||
directory is hidden, but no other files starting with a dot. The
|
||||
default mode is 'dotGitOnly'.
|
||||
|
||||
core.ignoreCase::
|
||||
Internal variable which enables various workarounds to enable
|
||||
Git to work better on filesystems that are not case sensitive,
|
||||
like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing
|
||||
finds "makefile" when Git expects "Makefile", Git will assume
|
||||
it is really the same file, and continue to remember it as
|
||||
"Makefile".
|
||||
+
|
||||
The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
|
||||
will probe and set core.ignoreCase true if appropriate when the repository
|
||||
is created.
|
||||
+
|
||||
Git relies on the proper configuration of this variable for your operating
|
||||
and file system. Modifying this value may result in unexpected behavior.
|
||||
|
||||
core.precomposeUnicode::
|
||||
This option is only used by Mac OS implementation of Git.
|
||||
When core.precomposeUnicode=true, Git reverts the unicode decomposition
|
||||
of filenames done by Mac OS. This is useful when sharing a repository
|
||||
between Mac OS and Linux or Windows.
|
||||
(Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7).
|
||||
When false, file names are handled fully transparent by Git,
|
||||
which is backward compatible with older versions of Git.
|
||||
|
||||
core.protectHFS::
|
||||
If set to true, do not allow checkout of paths that would
|
||||
be considered equivalent to `.git` on an HFS+ filesystem.
|
||||
Defaults to `true` on Mac OS, and `false` elsewhere.
|
||||
|
||||
core.protectNTFS::
|
||||
If set to true, do not allow checkout of paths that would
|
||||
cause problems with the NTFS filesystem, e.g. conflict with
|
||||
8.3 "short" names.
|
||||
Defaults to `true` on Windows, and `false` elsewhere.
|
||||
|
||||
core.fsmonitor::
|
||||
If set, the value of this variable is used as a command which
|
||||
will identify all files that may have changed since the
|
||||
requested date/time. This information is used to speed up git by
|
||||
avoiding unnecessary processing of files that have not changed.
|
||||
See the "fsmonitor-watchman" section of linkgit:githooks[5].
|
||||
|
||||
core.trustctime::
|
||||
If false, the ctime differences between the index and the
|
||||
working tree are ignored; useful when the inode change time
|
||||
is regularly modified by something outside Git (file system
|
||||
crawlers and some backup systems).
|
||||
See linkgit:git-update-index[1]. True by default.
|
||||
|
||||
core.splitIndex::
|
||||
If true, the split-index feature of the index will be used.
|
||||
See linkgit:git-update-index[1]. False by default.
|
||||
|
||||
core.untrackedCache::
|
||||
Determines what to do about the untracked cache feature of the
|
||||
index. It will be kept, if this variable is unset or set to
|
||||
`keep`. It will automatically be added if set to `true`. And
|
||||
it will automatically be removed, if set to `false`. Before
|
||||
setting it to `true`, you should check that mtime is working
|
||||
properly on your system.
|
||||
See linkgit:git-update-index[1]. `keep` by default, unless
|
||||
`feature.manyFiles` is enabled which sets this setting to
|
||||
`true` by default.
|
||||
|
||||
core.checkStat::
|
||||
When missing or is set to `default`, many fields in the stat
|
||||
structure are checked to detect if a file has been modified
|
||||
since Git looked at it. When this configuration variable is
|
||||
set to `minimal`, sub-second part of mtime and ctime, the
|
||||
uid and gid of the owner of the file, the inode number (and
|
||||
the device number, if Git was compiled to use it), are
|
||||
excluded from the check among these fields, leaving only the
|
||||
whole-second part of mtime (and ctime, if `core.trustCtime`
|
||||
is set) and the filesize to be checked.
|
||||
+
|
||||
There are implementations of Git that do not leave usable values in
|
||||
some fields (e.g. JGit); by excluding these fields from the
|
||||
comparison, the `minimal` mode may help interoperability when the
|
||||
same repository is used by these other systems at the same time.
|
||||
|
||||
core.quotePath::
|
||||
Commands that output paths (e.g. 'ls-files', 'diff'), will
|
||||
quote "unusual" characters in the pathname by enclosing the
|
||||
pathname in double-quotes and escaping those characters with
|
||||
backslashes in the same way C escapes control characters (e.g.
|
||||
`\t` for TAB, `\n` for LF, `\\` for backslash) or bytes with
|
||||
values larger than 0x80 (e.g. octal `\302\265` for "micro" in
|
||||
UTF-8). If this variable is set to false, bytes higher than
|
||||
0x80 are not considered "unusual" any more. Double-quotes,
|
||||
backslash and control characters are always escaped regardless
|
||||
of the setting of this variable. A simple space character is
|
||||
not considered "unusual". Many commands can output pathnames
|
||||
completely verbatim using the `-z` option. The default value
|
||||
is true.
|
||||
|
||||
core.eol::
|
||||
Sets the line ending type to use in the working directory for
|
||||
files that are marked as text (either by having the `text`
|
||||
attribute set, or by having `text=auto` and Git auto-detecting
|
||||
the contents as text).
|
||||
Alternatives are 'lf', 'crlf' and 'native', which uses the platform's
|
||||
native line ending. The default value is `native`. See
|
||||
linkgit:gitattributes[5] for more information on end-of-line
|
||||
conversion. Note that this value is ignored if `core.autocrlf`
|
||||
is set to `true` or `input`.
|
||||
|
||||
core.safecrlf::
|
||||
If true, makes Git check if converting `CRLF` is reversible when
|
||||
end-of-line conversion is active. Git will verify if a command
|
||||
modifies a file in the work tree either directly or indirectly.
|
||||
For example, committing a file followed by checking out the
|
||||
same file should yield the original file in the work tree. If
|
||||
this is not the case for the current setting of
|
||||
`core.autocrlf`, Git will reject the file. The variable can
|
||||
be set to "warn", in which case Git will only warn about an
|
||||
irreversible conversion but continue the operation.
|
||||
+
|
||||
CRLF conversion bears a slight chance of corrupting data.
|
||||
When it is enabled, Git will convert CRLF to LF during commit and LF to
|
||||
CRLF during checkout. A file that contains a mixture of LF and
|
||||
CRLF before the commit cannot be recreated by Git. For text
|
||||
files this is the right thing to do: it corrects line endings
|
||||
such that we have only LF line endings in the repository.
|
||||
But for binary files that are accidentally classified as text the
|
||||
conversion can corrupt data.
|
||||
+
|
||||
If you recognize such corruption early you can easily fix it by
|
||||
setting the conversion type explicitly in .gitattributes. Right
|
||||
after committing you still have the original file in your work
|
||||
tree and this file is not yet corrupted. You can explicitly tell
|
||||
Git that this file is binary and Git will handle the file
|
||||
appropriately.
|
||||
+
|
||||
Unfortunately, the desired effect of cleaning up text files with
|
||||
mixed line endings and the undesired effect of corrupting binary
|
||||
files cannot be distinguished. In both cases CRLFs are removed
|
||||
in an irreversible way. For text files this is the right thing
|
||||
to do because CRLFs are line endings, while for binary files
|
||||
converting CRLFs corrupts data.
|
||||
+
|
||||
Note, this safety check does not mean that a checkout will generate a
|
||||
file identical to the original file for a different setting of
|
||||
`core.eol` and `core.autocrlf`, but only for the current one. For
|
||||
example, a text file with `LF` would be accepted with `core.eol=lf`
|
||||
and could later be checked out with `core.eol=crlf`, in which case the
|
||||
resulting file would contain `CRLF`, although the original file
|
||||
contained `LF`. However, in both work trees the line endings would be
|
||||
consistent, that is either all `LF` or all `CRLF`, but never mixed. A
|
||||
file with mixed line endings would be reported by the `core.safecrlf`
|
||||
mechanism.
|
||||
|
||||
core.autocrlf::
|
||||
Setting this variable to "true" is the same as setting
|
||||
the `text` attribute to "auto" on all files and core.eol to "crlf".
|
||||
Set to true if you want to have `CRLF` line endings in your
|
||||
working directory and the repository has LF line endings.
|
||||
This variable can be set to 'input',
|
||||
in which case no output conversion is performed.
|
||||
|
||||
core.checkRoundtripEncoding::
|
||||
A comma and/or whitespace separated list of encodings that Git
|
||||
performs UTF-8 round trip checks on if they are used in an
|
||||
`working-tree-encoding` attribute (see linkgit:gitattributes[5]).
|
||||
The default value is `SHIFT-JIS`.
|
||||
|
||||
core.symlinks::
|
||||
If false, symbolic links are checked out as small plain files that
|
||||
contain the link text. linkgit:git-update-index[1] and
|
||||
linkgit:git-add[1] will not change the recorded type to regular
|
||||
file. Useful on filesystems like FAT that do not support
|
||||
symbolic links.
|
||||
+
|
||||
The default is true, except linkgit:git-clone[1] or linkgit:git-init[1]
|
||||
will probe and set core.symlinks false if appropriate when the repository
|
||||
is created.
|
||||
|
||||
core.gitProxy::
|
||||
A "proxy command" to execute (as 'command host port') instead
|
||||
of establishing direct connection to the remote server when
|
||||
using the Git protocol for fetching. If the variable value is
|
||||
in the "COMMAND for DOMAIN" format, the command is applied only
|
||||
on hostnames ending with the specified domain string. This variable
|
||||
may be set multiple times and is matched in the given order;
|
||||
the first match wins.
|
||||
+
|
||||
Can be overridden by the `GIT_PROXY_COMMAND` environment variable
|
||||
(which always applies universally, without the special "for"
|
||||
handling).
|
||||
+
|
||||
The special string `none` can be used as the proxy command to
|
||||
specify that no proxy be used for a given domain pattern.
|
||||
This is useful for excluding servers inside a firewall from
|
||||
proxy use, while defaulting to a common proxy for external domains.
|
||||
|
||||
core.sshCommand::
|
||||
If this variable is set, `git fetch` and `git push` will
|
||||
use the specified command instead of `ssh` when they need to
|
||||
connect to a remote system. The command is in the same form as
|
||||
the `GIT_SSH_COMMAND` environment variable and is overridden
|
||||
when the environment variable is set.
|
||||
|
||||
core.ignoreStat::
|
||||
If true, Git will avoid using lstat() calls to detect if files have
|
||||
changed by setting the "assume-unchanged" bit for those tracked files
|
||||
which it has updated identically in both the index and working tree.
|
||||
+
|
||||
When files are modified outside of Git, the user will need to stage
|
||||
the modified files explicitly (e.g. see 'Examples' section in
|
||||
linkgit:git-update-index[1]).
|
||||
Git will not normally detect changes to those files.
|
||||
+
|
||||
This is useful on systems where lstat() calls are very slow, such as
|
||||
CIFS/Microsoft Windows.
|
||||
+
|
||||
False by default.
|
||||
|
||||
core.preferSymlinkRefs::
|
||||
Instead of the default "symref" format for HEAD
|
||||
and other symbolic reference files, use symbolic links.
|
||||
This is sometimes needed to work with old scripts that
|
||||
expect HEAD to be a symbolic link.
|
||||
|
||||
core.alternateRefsCommand::
|
||||
When advertising tips of available history from an alternate, use the shell to
|
||||
execute the specified command instead of linkgit:git-for-each-ref[1]. The
|
||||
first argument is the absolute path of the alternate. Output must contain one
|
||||
hex object id per line (i.e., the same as produced by `git for-each-ref
|
||||
--format='%(objectname)'`).
|
||||
+
|
||||
Note that you cannot generally put `git for-each-ref` directly into the config
|
||||
value, as it does not take a repository path as an argument (but you can wrap
|
||||
the command above in a shell script).
|
||||
|
||||
core.alternateRefsPrefixes::
|
||||
When listing references from an alternate, list only references that begin
|
||||
with the given prefix. Prefixes match as if they were given as arguments to
|
||||
linkgit:git-for-each-ref[1]. To list multiple prefixes, separate them with
|
||||
whitespace. If `core.alternateRefsCommand` is set, setting
|
||||
`core.alternateRefsPrefixes` has no effect.
|
||||
|
||||
core.bare::
|
||||
If true this repository is assumed to be 'bare' and has no
|
||||
working directory associated with it. If this is the case a
|
||||
number of commands that require a working directory will be
|
||||
disabled, such as linkgit:git-add[1] or linkgit:git-merge[1].
|
||||
+
|
||||
This setting is automatically guessed by linkgit:git-clone[1] or
|
||||
linkgit:git-init[1] when the repository was created. By default a
|
||||
repository that ends in "/.git" is assumed to be not bare (bare =
|
||||
false), while all other repositories are assumed to be bare (bare
|
||||
= true).
|
||||
|
||||
core.worktree::
|
||||
Set the path to the root of the working tree.
|
||||
If `GIT_COMMON_DIR` environment variable is set, core.worktree
|
||||
is ignored and not used for determining the root of working tree.
|
||||
This can be overridden by the `GIT_WORK_TREE` environment
|
||||
variable and the `--work-tree` command-line option.
|
||||
The value can be an absolute path or relative to the path to
|
||||
the .git directory, which is either specified by --git-dir
|
||||
or GIT_DIR, or automatically discovered.
|
||||
If --git-dir or GIT_DIR is specified but none of
|
||||
--work-tree, GIT_WORK_TREE and core.worktree is specified,
|
||||
the current working directory is regarded as the top level
|
||||
of your working tree.
|
||||
+
|
||||
Note that this variable is honored even when set in a configuration
|
||||
file in a ".git" subdirectory of a directory and its value differs
|
||||
from the latter directory (e.g. "/path/to/.git/config" has
|
||||
core.worktree set to "/different/path"), which is most likely a
|
||||
misconfiguration. Running Git commands in the "/path/to" directory will
|
||||
still use "/different/path" as the root of the work tree and can cause
|
||||
confusion unless you know what you are doing (e.g. you are creating a
|
||||
read-only snapshot of the same index to a location different from the
|
||||
repository's usual working tree).
|
||||
|
||||
core.logAllRefUpdates::
|
||||
Enable the reflog. Updates to a ref <ref> is logged to the file
|
||||
"`$GIT_DIR/logs/<ref>`", by appending the new and old
|
||||
SHA-1, the date/time and the reason of the update, but
|
||||
only when the file exists. If this configuration
|
||||
variable is set to `true`, missing "`$GIT_DIR/logs/<ref>`"
|
||||
file is automatically created for branch heads (i.e. under
|
||||
`refs/heads/`), remote refs (i.e. under `refs/remotes/`),
|
||||
note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`.
|
||||
If it is set to `always`, then a missing reflog is automatically
|
||||
created for any ref under `refs/`.
|
||||
+
|
||||
This information can be used to determine what commit
|
||||
was the tip of a branch "2 days ago".
|
||||
+
|
||||
This value is true by default in a repository that has
|
||||
a working directory associated with it, and false by
|
||||
default in a bare repository.
|
||||
|
||||
core.repositoryFormatVersion::
|
||||
Internal variable identifying the repository format and layout
|
||||
version.
|
||||
|
||||
core.sharedRepository::
|
||||
When 'group' (or 'true'), the repository is made shareable between
|
||||
several users in a group (making sure all the files and objects are
|
||||
group-writable). When 'all' (or 'world' or 'everybody'), the
|
||||
repository will be readable by all users, additionally to being
|
||||
group-shareable. When 'umask' (or 'false'), Git will use permissions
|
||||
reported by umask(2). When '0xxx', where '0xxx' is an octal number,
|
||||
files in the repository will have this mode value. '0xxx' will override
|
||||
user's umask value (whereas the other options will only override
|
||||
requested parts of the user's umask value). Examples: '0660' will make
|
||||
the repo read/write-able for the owner and group, but inaccessible to
|
||||
others (equivalent to 'group' unless umask is e.g. '0022'). '0640' is a
|
||||
repository that is group-readable but not group-writable.
|
||||
See linkgit:git-init[1]. False by default.
|
||||
|
||||
core.warnAmbiguousRefs::
|
||||
If true, Git will warn you if the ref name you passed it is ambiguous
|
||||
and might match multiple refs in the repository. True by default.
|
||||
|
||||
core.compression::
|
||||
An integer -1..9, indicating a default compression level.
|
||||
-1 is the zlib default. 0 means no compression,
|
||||
and 1..9 are various speed/size tradeoffs, 9 being slowest.
|
||||
If set, this provides a default to other compression variables,
|
||||
such as `core.looseCompression` and `pack.compression`.
|
||||
|
||||
core.looseCompression::
|
||||
An integer -1..9, indicating the compression level for objects that
|
||||
are not in a pack file. -1 is the zlib default. 0 means no
|
||||
compression, and 1..9 are various speed/size tradeoffs, 9 being
|
||||
slowest. If not set, defaults to core.compression. If that is
|
||||
not set, defaults to 1 (best speed).
|
||||
|
||||
core.packedGitWindowSize::
|
||||
Number of bytes of a pack file to map into memory in a
|
||||
single mapping operation. Larger window sizes may allow
|
||||
your system to process a smaller number of large pack files
|
||||
more quickly. Smaller window sizes will negatively affect
|
||||
performance due to increased calls to the operating system's
|
||||
memory manager, but may improve performance when accessing
|
||||
a large number of large pack files.
|
||||
+
|
||||
Default is 1 MiB if NO_MMAP was set at compile time, otherwise 32
|
||||
MiB on 32 bit platforms and 1 GiB on 64 bit platforms. This should
|
||||
be reasonable for all users/operating systems. You probably do
|
||||
not need to adjust this value.
|
||||
+
|
||||
Common unit suffixes of 'k', 'm', or 'g' are supported.
|
||||
|
||||
core.packedGitLimit::
|
||||
Maximum number of bytes to map simultaneously into memory
|
||||
from pack files. If Git needs to access more than this many
|
||||
bytes at once to complete an operation it will unmap existing
|
||||
regions to reclaim virtual address space within the process.
|
||||
+
|
||||
Default is 256 MiB on 32 bit platforms and 32 TiB (effectively
|
||||
unlimited) on 64 bit platforms.
|
||||
This should be reasonable for all users/operating systems, except on
|
||||
the largest projects. You probably do not need to adjust this value.
|
||||
+
|
||||
Common unit suffixes of 'k', 'm', or 'g' are supported.
|
||||
|
||||
core.deltaBaseCacheLimit::
|
||||
Maximum number of bytes to reserve for caching base objects
|
||||
that may be referenced by multiple deltified objects. By storing the
|
||||
entire decompressed base objects in a cache Git is able
|
||||
to avoid unpacking and decompressing frequently used base
|
||||
objects multiple times.
|
||||
+
|
||||
Default is 96 MiB on all platforms. This should be reasonable
|
||||
for all users/operating systems, except on the largest projects.
|
||||
You probably do not need to adjust this value.
|
||||
+
|
||||
Common unit suffixes of 'k', 'm', or 'g' are supported.
|
||||
|
||||
core.bigFileThreshold::
|
||||
Files larger than this size are stored deflated, without
|
||||
attempting delta compression. Storing large files without
|
||||
delta compression avoids excessive memory usage, at the
|
||||
slight expense of increased disk usage. Additionally files
|
||||
larger than this size are always treated as binary.
|
||||
+
|
||||
Default is 512 MiB on all platforms. This should be reasonable
|
||||
for most projects as source code and other text files can still
|
||||
be delta compressed, but larger binary media files won't be.
|
||||
+
|
||||
Common unit suffixes of 'k', 'm', or 'g' are supported.
|
||||
|
||||
core.excludesFile::
|
||||
Specifies the pathname to the file that contains patterns to
|
||||
describe paths that are not meant to be tracked, in addition
|
||||
to `.gitignore` (per-directory) and `.git/info/exclude`.
|
||||
Defaults to `$XDG_CONFIG_HOME/git/ignore`.
|
||||
If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/ignore`
|
||||
is used instead. See linkgit:gitignore[5].
|
||||
|
||||
core.askPass::
|
||||
Some commands (e.g. svn and http interfaces) that interactively
|
||||
ask for a password can be told to use an external program given
|
||||
via the value of this variable. Can be overridden by the `GIT_ASKPASS`
|
||||
environment variable. If not set, fall back to the value of the
|
||||
`SSH_ASKPASS` environment variable or, failing that, a simple password
|
||||
prompt. The external program shall be given a suitable prompt as
|
||||
command-line argument and write the password on its STDOUT.
|
||||
|
||||
core.attributesFile::
|
||||
In addition to `.gitattributes` (per-directory) and
|
||||
`.git/info/attributes`, Git looks into this file for attributes
|
||||
(see linkgit:gitattributes[5]). Path expansions are made the same
|
||||
way as for `core.excludesFile`. Its default value is
|
||||
`$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not
|
||||
set or empty, `$HOME/.config/git/attributes` is used instead.
|
||||
|
||||
core.hooksPath::
|
||||
By default Git will look for your hooks in the
|
||||
`$GIT_DIR/hooks` directory. Set this to different path,
|
||||
e.g. `/etc/git/hooks`, and Git will try to find your hooks in
|
||||
that directory, e.g. `/etc/git/hooks/pre-receive` instead of
|
||||
in `$GIT_DIR/hooks/pre-receive`.
|
||||
+
|
||||
The path can be either absolute or relative. A relative path is
|
||||
taken as relative to the directory where the hooks are run (see
|
||||
the "DESCRIPTION" section of linkgit:githooks[5]).
|
||||
+
|
||||
This configuration variable is useful in cases where you'd like to
|
||||
centrally configure your Git hooks instead of configuring them on a
|
||||
per-repository basis, or as a more flexible and centralized
|
||||
alternative to having an `init.templateDir` where you've changed
|
||||
default hooks.
|
||||
|
||||
core.editor::
|
||||
Commands such as `commit` and `tag` that let you edit
|
||||
messages by launching an editor use the value of this
|
||||
variable when it is set, and the environment variable
|
||||
`GIT_EDITOR` is not set. See linkgit:git-var[1].
|
||||
|
||||
core.commentChar::
|
||||
Commands such as `commit` and `tag` that let you edit
|
||||
messages consider a line that begins with this character
|
||||
commented, and removes them after the editor returns
|
||||
(default '#').
|
||||
+
|
||||
If set to "auto", `git-commit` would select a character that is not
|
||||
the beginning character of any line in existing commit messages.
|
||||
|
||||
core.filesRefLockTimeout::
|
||||
The length of time, in milliseconds, to retry when trying to
|
||||
lock an individual reference. Value 0 means not to retry at
|
||||
all; -1 means to try indefinitely. Default is 100 (i.e.,
|
||||
retry for 100ms).
|
||||
|
||||
core.packedRefsTimeout::
|
||||
The length of time, in milliseconds, to retry when trying to
|
||||
lock the `packed-refs` file. Value 0 means not to retry at
|
||||
all; -1 means to try indefinitely. Default is 1000 (i.e.,
|
||||
retry for 1 second).
|
||||
|
||||
core.pager::
|
||||
Text viewer for use by Git commands (e.g., 'less'). The value
|
||||
is meant to be interpreted by the shell. The order of preference
|
||||
is the `$GIT_PAGER` environment variable, then `core.pager`
|
||||
configuration, then `$PAGER`, and then the default chosen at
|
||||
compile time (usually 'less').
|
||||
+
|
||||
When the `LESS` environment variable is unset, Git sets it to `FRX`
|
||||
(if `LESS` environment variable is set, Git does not change it at
|
||||
all). If you want to selectively override Git's default setting
|
||||
for `LESS`, you can set `core.pager` to e.g. `less -S`. This will
|
||||
be passed to the shell by Git, which will translate the final
|
||||
command to `LESS=FRX less -S`. The environment does not set the
|
||||
`S` option but the command line does, instructing less to truncate
|
||||
long lines. Similarly, setting `core.pager` to `less -+F` will
|
||||
deactivate the `F` option specified by the environment from the
|
||||
command-line, deactivating the "quit if one screen" behavior of
|
||||
`less`. One can specifically activate some flags for particular
|
||||
commands: for example, setting `pager.blame` to `less -S` enables
|
||||
line truncation only for `git blame`.
|
||||
+
|
||||
Likewise, when the `LV` environment variable is unset, Git sets it
|
||||
to `-c`. You can override this setting by exporting `LV` with
|
||||
another value or setting `core.pager` to `lv +c`.
|
||||
|
||||
core.whitespace::
|
||||
A comma separated list of common whitespace problems to
|
||||
notice. 'git diff' will use `color.diff.whitespace` to
|
||||
highlight them, and 'git apply --whitespace=error' will
|
||||
consider them as errors. You can prefix `-` to disable
|
||||
any of them (e.g. `-trailing-space`):
|
||||
+
|
||||
* `blank-at-eol` treats trailing whitespaces at the end of the line
|
||||
as an error (enabled by default).
|
||||
* `space-before-tab` treats a space character that appears immediately
|
||||
before a tab character in the initial indent part of the line as an
|
||||
error (enabled by default).
|
||||
* `indent-with-non-tab` treats a line that is indented with space
|
||||
characters instead of the equivalent tabs as an error (not enabled by
|
||||
default).
|
||||
* `tab-in-indent` treats a tab character in the initial indent part of
|
||||
the line as an error (not enabled by default).
|
||||
* `blank-at-eof` treats blank lines added at the end of file as an error
|
||||
(enabled by default).
|
||||
* `trailing-space` is a short-hand to cover both `blank-at-eol` and
|
||||
`blank-at-eof`.
|
||||
* `cr-at-eol` treats a carriage-return at the end of line as
|
||||
part of the line terminator, i.e. with it, `trailing-space`
|
||||
does not trigger if the character before such a carriage-return
|
||||
is not a whitespace (not enabled by default).
|
||||
* `tabwidth=<n>` tells how many character positions a tab occupies; this
|
||||
is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
|
||||
errors. The default tab width is 8. Allowed values are 1 to 63.
|
||||
|
||||
core.fsyncObjectFiles::
|
||||
This boolean will enable 'fsync()' when writing object files.
|
||||
+
|
||||
This is a total waste of time and effort on a filesystem that orders
|
||||
data writes properly, but can be useful for filesystems that do not use
|
||||
journalling (traditional UNIX filesystems) or that only journal metadata
|
||||
and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback").
|
||||
|
||||
core.preloadIndex::
|
||||
Enable parallel index preload for operations like 'git diff'
|
||||
+
|
||||
This can speed up operations like 'git diff' and 'git status' especially
|
||||
on filesystems like NFS that have weak caching semantics and thus
|
||||
relatively high IO latencies. When enabled, Git will do the
|
||||
index comparison to the filesystem data in parallel, allowing
|
||||
overlapping IO's. Defaults to true.
|
||||
|
||||
core.unsetenvvars::
|
||||
Windows-only: comma-separated list of environment variables'
|
||||
names that need to be unset before spawning any other process.
|
||||
Defaults to `PERL5LIB` to account for the fact that Git for
|
||||
Windows insists on using its own Perl interpreter.
|
||||
|
||||
core.restrictinheritedhandles::
|
||||
Windows-only: override whether spawned processes inherit only standard
|
||||
file handles (`stdin`, `stdout` and `stderr`) or all handles. Can be
|
||||
`auto`, `true` or `false`. Defaults to `auto`, which means `true` on
|
||||
Windows 7 and later, and `false` on older Windows versions.
|
||||
|
||||
core.createObject::
|
||||
You can set this to 'link', in which case a hardlink followed by
|
||||
a delete of the source are used to make sure that object creation
|
||||
will not overwrite existing objects.
|
||||
+
|
||||
On some file system/operating system combinations, this is unreliable.
|
||||
Set this config setting to 'rename' there; However, This will remove the
|
||||
check that makes sure that existing object files will not get overwritten.
|
||||
|
||||
core.notesRef::
|
||||
When showing commit messages, also show notes which are stored in
|
||||
the given ref. The ref must be fully qualified. If the given
|
||||
ref does not exist, it is not an error but means that no
|
||||
notes should be printed.
|
||||
+
|
||||
This setting defaults to "refs/notes/commits", and it can be overridden by
|
||||
the `GIT_NOTES_REF` environment variable. See linkgit:git-notes[1].
|
||||
|
||||
core.commitGraph::
|
||||
If true, then git will read the commit-graph file (if it exists)
|
||||
to parse the graph structure of commits. Defaults to true. See
|
||||
linkgit:git-commit-graph[1] for more information.
|
||||
|
||||
core.useReplaceRefs::
|
||||
If set to `false`, behave as if the `--no-replace-objects`
|
||||
option was given on the command line. See linkgit:git[1] and
|
||||
linkgit:git-replace[1] for more information.
|
||||
|
||||
core.multiPackIndex::
|
||||
Use the multi-pack-index file to track multiple packfiles using a
|
||||
single index. See link:technical/multi-pack-index.html[the
|
||||
multi-pack-index design document].
|
||||
|
||||
core.sparseCheckout::
|
||||
Enable "sparse checkout" feature. See linkgit:git-sparse-checkout[1]
|
||||
for more information.
|
||||
|
||||
core.sparseCheckoutCone::
|
||||
Enables the "cone mode" of the sparse checkout feature. When the
|
||||
sparse-checkout file contains a limited set of patterns, then this
|
||||
mode provides significant performance advantages. See
|
||||
linkgit:git-sparse-checkout[1] for more information.
|
||||
|
||||
core.abbrev::
|
||||
Set the length object names are abbreviated to. If
|
||||
unspecified or set to "auto", an appropriate value is
|
||||
computed based on the approximate number of packed objects
|
||||
in your repository, which hopefully is enough for
|
||||
abbreviated object names to stay unique for some time.
|
||||
The minimum length is 4.
|
@ -1,26 +0,0 @@
|
||||
credential.helper::
|
||||
Specify an external helper to be called when a username or
|
||||
password credential is needed; the helper may consult external
|
||||
storage to avoid prompting the user for the credentials. Note
|
||||
that multiple helpers may be defined. See linkgit:gitcredentials[7]
|
||||
for details.
|
||||
|
||||
credential.useHttpPath::
|
||||
When acquiring credentials, consider the "path" component of an http
|
||||
or https URL to be important. Defaults to false. See
|
||||
linkgit:gitcredentials[7] for more information.
|
||||
|
||||
credential.username::
|
||||
If no username is set for a network authentication, use this username
|
||||
by default. See credential.<context>.* below, and
|
||||
linkgit:gitcredentials[7].
|
||||
|
||||
credential.<url>.*::
|
||||
Any of the credential.* options above can be applied selectively to
|
||||
some credentials. For example "credential.https://example.com.username"
|
||||
would set the default username only for https connections to
|
||||
example.com. See linkgit:gitcredentials[7] for details on how URLs are
|
||||
matched.
|
||||
|
||||
credentialCache.ignoreSIGHUP::
|
||||
Tell git-credential-cache--daemon to ignore SIGHUP, instead of quitting.
|
@ -1,14 +0,0 @@
|
||||
difftool.<tool>.path::
|
||||
Override the path for the given tool. This is useful in case
|
||||
your tool is not in the PATH.
|
||||
|
||||
difftool.<tool>.cmd::
|
||||
Specify the command to invoke the specified diff tool.
|
||||
The specified command is evaluated in shell with the following
|
||||
variables available: 'LOCAL' is set to the name of the temporary
|
||||
file containing the contents of the diff pre-image and 'REMOTE'
|
||||
is set to the name of the temporary file containing the contents
|
||||
of the diff post-image.
|
||||
|
||||
difftool.prompt::
|
||||
Prompt before each invocation of the diff tool.
|
@ -1,8 +0,0 @@
|
||||
fastimport.unpackLimit::
|
||||
If the number of objects imported by linkgit:git-fast-import[1]
|
||||
is below this limit, then the objects will be unpacked into
|
||||
loose object files. However if the number of imported objects
|
||||
equals or exceeds this limit then the pack will be stored as a
|
||||
pack. Storing the pack from a fast-import can make the import
|
||||
operation complete faster, especially on slow filesystems. If
|
||||
not set, the value of `transfer.unpackLimit` is used instead.
|
@ -1,37 +0,0 @@
|
||||
feature.*::
|
||||
The config settings that start with `feature.` modify the defaults of
|
||||
a group of other config settings. These groups are created by the Git
|
||||
developer community as recommended defaults and are subject to change.
|
||||
In particular, new config options may be added with different defaults.
|
||||
|
||||
feature.experimental::
|
||||
Enable config options that are new to Git, and are being considered for
|
||||
future defaults. Config settings included here may be added or removed
|
||||
with each release, including minor version updates. These settings may
|
||||
have unintended interactions since they are so new. Please enable this
|
||||
setting if you are interested in providing feedback on experimental
|
||||
features. The new default values are:
|
||||
+
|
||||
* `pack.useSparse=true` uses a new algorithm when constructing a pack-file
|
||||
which can improve `git push` performance in repos with many files.
|
||||
+
|
||||
* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
|
||||
skipping more commits at a time, reducing the number of round trips.
|
||||
+
|
||||
* `fetch.writeCommitGraph=true` writes a commit-graph after every `git fetch`
|
||||
command that downloads a pack-file from a remote. Using the `--split` option,
|
||||
most executions will create a very small commit-graph file on top of the
|
||||
existing commit-graph file(s). Occasionally, these files will merge and the
|
||||
write may take longer. Having an updated commit-graph file helps performance
|
||||
of many Git commands, including `git merge-base`, `git push -f`, and
|
||||
`git log --graph`.
|
||||
|
||||
feature.manyFiles::
|
||||
Enable config options that optimize for repos with many files in the
|
||||
working directory. With many files, commands such as `git status` and
|
||||
`git checkout` may be slow and these new defaults improve performance:
|
||||
+
|
||||
* `index.version=4` enables path-prefix compression in the index.
|
||||
+
|
||||
* `core.untrackedCache=true` enables the untracked cache. This setting assumes
|
||||
that mtime is working on your machine.
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user