Compare commits

..

32 Commits

Author SHA1 Message Date
3b82744481 Git 2.11.3
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-30 15:02:37 -07:00
05bb78abc1 Merge tag 'v2.10.4' into maint-2.11
Git 2.10.4
2017-07-30 15:01:31 -07:00
0bfff8146f Git 2.10.4
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-30 15:00:04 -07:00
d78f06a1b7 Merge tag 'v2.9.5' into maint-2.10
Git 2.9.5
2017-07-30 14:57:33 -07:00
4d4165b80d Git 2.9.5
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-30 14:53:25 -07:00
af0178aec7 Merge tag 'v2.8.6' into maint-2.9
Git 2.8.6
2017-07-30 14:52:14 -07:00
8d7f72f176 Git 2.8.6
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-30 14:49:08 -07:00
7720c33f63 Merge tag 'v2.7.6' into maint-2.8
Git 2.7.6
2017-07-30 14:46:43 -07:00
5e0649dc65 Git 2.7.6
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-30 14:45:13 -07:00
a4f234bf9b Merge branch 'jk/ssh-funny-url' into maint-2.7 2017-07-28 16:11:54 -07:00
aeeb2d4968 connect: reject paths that look like command line options
If we get a repo path like "-repo.git", we may try to invoke
"git-upload-pack -repo.git". This is going to fail, since
upload-pack will interpret it as a set of bogus options. But
let's reject this before we even run the sub-program, since
we would not want to allow any mischief with repo names that
actually are real command-line options.

You can still ask for such a path via git-daemon, but there's no
security problem there, because git-daemon enters the repo itself
and then passes "."  on the command line.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-28 15:54:55 -07:00
3be4cf09cd connect: reject dashed arguments for proxy commands
If you have a GIT_PROXY_COMMAND configured, we will run it
with the host/port on the command-line. If a URL contains a
mischievous host like "--foo", we don't know how the proxy
command may handle it. It's likely to break, but it may also
do something dangerous and unwanted (technically it could
even do something useful, but that seems unlikely).

We should err on the side of caution and reject this before
we even run the command.

The hostname check matches the one we do in a similar
circumstance for ssh. The port check is not present for ssh,
but there it's not necessary because the syntax is "-p
<port>", and there's no ambiguity on the parsing side.

It's not clear whether you can actually get a negative port
to the proxy here or not. Doing:

  git fetch git://remote:-1234/repo.git

keeps the "-1234" as part of the hostname, with the default
port of 9418. But it's a good idea to keep this check close
to the point of running the command to make it clear that
there's no way to circumvent it (and at worst it serves as a
belt-and-suspenders check).

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-28 15:52:18 -07:00
2491f77b90 connect: factor out "looks like command line option" check
We reject hostnames that start with a dash because they may
be confused for command-line options. Let's factor out that
notion into a helper function, as we'll use it in more
places. And while it's simple now, it's not clear if some
systems might need more complex logic to handle all cases.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-28 15:51:56 -07:00
2d90add5ad t5813: add test for hostname starting with dash
Per the explanation in the previous patch, this should be
(and is) rejected.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-28 15:51:29 -07:00
820d7650cc connect: reject ssh hostname that begins with a dash
When commands like "git fetch" talk with ssh://$rest_of_URL/, the
code splits $rest_of_URL into components like host, port, etc., and
then spawns the underlying "ssh" program by formulating argv[] array
that has:

 - the path to ssh command taken from GIT_SSH_COMMAND, etc.

 - dashed options like '-batch' (for Tortoise), '-p <port>' as
   needed.

 - ssh_host, which is supposed to be the hostname parsed out of
   $rest_of_URL.

 - then the command to be run on the other side, e.g. git
   upload-pack.

If the ssh_host ends up getting '-<anything>', the argv[] that is
used to spawn the command becomes something like:

    { "ssh", "-p", "22", "-<anything>", "command", "to", "run", NULL }

which obviously is bogus, but depending on the actual value of
"<anything>", will make "ssh" parse and use it as an option.

Prevent this by forbidding ssh_host that begins with a "-".

Noticed-by: Joern Schneeweisz of Recurity Labs
Reported-by: Brian at GitLab
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-07-28 15:51:14 -07:00
773e3a2e02 Git 2.11.2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 13:29:43 +09:00
a849d36cf2 Merge branch 'maint-2.10' into maint-2.11 2017-05-05 13:26:31 +09:00
840ed14198 Git 2.10.3
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 13:24:10 +09:00
fc92b0878c Merge branch 'maint-2.9' into maint-2.10 2017-05-05 13:21:52 +09:00
d61226c111 Git 2.9.4
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 13:19:10 +09:00
c93ab42b74 Merge branch 'maint-2.8' into maint-2.9 2017-05-05 13:13:48 +09:00
cd08873275 Git 2.8.5
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 13:08:54 +09:00
a8d93d19a2 Merge branch 'maint-2.7' into maint-2.8 2017-05-05 13:05:03 +09:00
c8dd1e3bb1 Git 2.7.5
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 13:03:40 +09:00
dc58c8554a Merge branch 'maint-2.6' into maint-2.7 2017-05-05 12:59:16 +09:00
70fcaef90b Git 2.6.7
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 12:56:19 +09:00
ab37a18b60 Merge branch 'maint-2.5' into maint-2.6 2017-05-05 12:52:26 +09:00
ac33201285 Git 2.5.6
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 12:50:38 +09:00
531788af95 Merge branch 'maint-2.4' into maint-2.5 2017-05-05 12:46:53 +09:00
4000b40209 Git 2.4.12
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 12:43:16 +09:00
5a4ffdf587 Merge branch 'jk/shell-no-repository-that-begins-with-dash' into maint-2.4
* jk/shell-no-repository-that-begins-with-dash:
  shell: disallow repo names beginning with dash
2017-05-05 12:17:55 +09:00
3ec804490a shell: disallow repo names beginning with dash
When a remote server uses git-shell, the client side will
connect to it like:

  ssh server "git-upload-pack 'foo.git'"

and we literally exec ("git-upload-pack", "foo.git"). In
early versions of upload-pack and receive-pack, we took a
repository argument and nothing else. But over time they
learned to accept dashed options. If the user passes a
repository name that starts with a dash, the results are
confusing at best (we complain of a bogus option instead of
a non-existent repository) and malicious at worst (the user
can start an interactive pager via "--help").

We could pass "--" to the sub-process to make sure the
user's argument is interpreted as a branch name. I.e.:

  git-upload-pack -- -foo.git

But adding "--" automatically would make us inconsistent
with a normal shell (i.e., when git-shell is not in use),
where "-foo.git" would still be an error. For that case, the
client would have to specify the "--", but they can't do so
reliably, as existing versions of git-shell do not allow
more than a single argument.

The simplest thing is to simply disallow "-" at the start of
the repo name argument. This hasn't worked either with or
without git-shell since version 1.0.0, and nobody has
complained.

Note that this patch just applies to do_generic_cmd(), which
runs upload-pack, receive-pack, and upload-archive. There
are two other types of commands that git-shell runs:

  - do_cvs_cmd(), but this already restricts the argument to
    be the literal string "server"

  - admin-provided commands in the git-shell-commands
    directory. We'll pass along arbitrary arguments there,
    so these commands could have similar problems. But these
    commands might actually understand dashed arguments, so
    we cannot just block them here. It's up to the writer of
    the commands to make sure they are safe. With great
    power comes great responsibility.

Reported-by: Timo Schmid <tschmid@ernw.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-05-05 12:07:27 +09:00
534 changed files with 26632 additions and 59913 deletions

2
.gitignore vendored
View File

@ -114,11 +114,11 @@
/git-read-tree
/git-rebase
/git-rebase--am
/git-rebase--helper
/git-rebase--interactive
/git-rebase--merge
/git-receive-pack
/git-reflog
/git-relink
/git-remote
/git-remote-http
/git-remote-https

View File

@ -151,8 +151,7 @@ Matthias Kestenholz <matthias@spinlock.ch> <mk@spinlock.ch>
Matthias Urlichs <matthias@urlichs.de> <smurf@kiste.(none)>
Matthias Urlichs <matthias@urlichs.de> <smurf@smurf.noris.de>
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>
Michael J Gruber <git@drmicha.warpmail.net> <michaeljgruber+gmane@fastmail.fm>
Michael S. Tsirkin <mst@kernel.org> <mst@redhat.com>
Michael S. Tsirkin <mst@kernel.org> <mst@mellanox.co.il>
Michael S. Tsirkin <mst@kernel.org> <mst@dev.mellanox.co.il>
@ -178,7 +177,6 @@ Paolo Bonzini <bonzini@gnu.org> <paolo.bonzini@lu.unisi.ch>
Pascal Obry <pascal@obry.net> <pascal.obry@gmail.com>
Pascal Obry <pascal@obry.net> <pascal.obry@wanadoo.fr>
Pat Notz <patnotz@gmail.com> <pknotz@sandia.gov>
Patrick Steinhardt <ps@pks.im> <patrick.steinhardt@elego.de>
Paul Mackerras <paulus@samba.org> <paulus@dorrigo.(none)>
Paul Mackerras <paulus@samba.org> <paulus@pogo.(none)>
Peter Baumann <waste.manager@gmx.de> <Peter.B.Baumann@stud.informatik.uni-erlangen.de>
@ -194,8 +192,6 @@ 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>
René Scharfe <l.s.r@web.de> <rene.scharfe@lsrfire.ath.cx>
Richard Hansen <rhansen@rhansen.org> <hansenr@google.com>
Richard Hansen <rhansen@rhansen.org> <rhansen@bbn.com>
Robert Fitzsimons <robfitz@273k.net>
Robert Shearman <robertshearman@gmail.com> <rob@codeweavers.com>
Robert Zeh <robert.a.zeh@gmail.com>
@ -227,7 +223,6 @@ Steven Walter <stevenrwalter@gmail.com> <swalter@lexmark.com>
Steven Walter <stevenrwalter@gmail.com> <swalter@lpdev.prtdev.lexmark.com>
Sven Verdoolaege <skimo@kotnet.org> <Sven.Verdoolaege@cs.kuleuven.ac.be>
Sven Verdoolaege <skimo@kotnet.org> <skimo@liacs.nl>
SZEDER Gábor <szeder.dev@gmail.com> <szeder@ira.uka.de>
Tay Ray Chuan <rctay89@gmail.com>
Ted Percival <ted@midg3t.net> <ted.percival@quest.com>
Theodore Ts'o <tytso@mit.edu>

View File

@ -39,38 +39,6 @@ env:
matrix:
include:
- env: Windows
os: linux
compiler:
addons:
before_install:
before_script:
script:
- >
test "$TRAVIS_REPO_SLUG" != "git/git" ||
ci/run-windows-build.sh $TRAVIS_BRANCH $(git rev-parse HEAD)
after_failure:
- env: Linux32
os: linux
services:
- docker
before_install:
- docker pull daald/ubuntu32:xenial
before_script:
script:
- >
docker run
--interactive
--env DEFAULT_TEST_TARGET
--env GIT_PROVE_OPTS
--env GIT_TEST_OPTS
--env GIT_TEST_CLONE_2GB
--volume "${PWD}:/usr/src/git"
daald/ubuntu32:xenial
/usr/src/git/ci/run-linux32-build.sh $(id -u $USER)
# Use the following command to debug the docker build locally:
# $ docker run -itv "${PWD}:/usr/src/git" --entrypoint /bin/bash daald/ubuntu32:xenial
# root@container:/# /usr/src/git/ci/run-linux32-build.sh
- env: Documentation
os: linux
compiler: clang

View File

@ -120,7 +120,6 @@ INSTALL_INFO = install-info
DOCBOOK2X_TEXI = docbook2x-texi
DBLATEX = dblatex
ASCIIDOC_DBLATEX_DIR = /etc/asciidoc/dblatex
DBLATEX_COMMON = -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty
ifndef PERL_PATH
PERL_PATH = /usr/bin/perl
endif
@ -174,16 +173,6 @@ ifdef GNU_ROFF
XMLTO_EXTRA += -m manpage-quote-apos.xsl
endif
ifdef USE_ASCIIDOCTOR
ASCIIDOC = asciidoctor
ASCIIDOC_CONF =
ASCIIDOC_HTML = xhtml5
ASCIIDOC_DOCBOOK = docbook45
ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
DBLATEX_COMMON =
endif
SHELL_PATH ?= $(SHELL)
# Shell quote;
SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
@ -348,7 +337,7 @@ manpage-base-url.xsl: manpage-base-url.xsl.in
user-manual.xml: user-manual.txt user-manual.conf
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
$(TXT_TO_XML) -d book -o $@+ $< && \
$(TXT_TO_XML) -d article -o $@+ $< && \
mv $@+ $@
technical/api-index.txt: technical/api-index-skel.txt \
@ -379,14 +368,13 @@ user-manual.texi: user-manual.xml
user-manual.pdf: user-manual.xml
$(QUIET_DBLATEX)$(RM) $@+ $@ && \
$(DBLATEX) -o $@+ $(DBLATEX_COMMON) $< && \
$(DBLATEX) -o $@+ -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty $< && \
mv $@+ $@
gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl
gitman.texi: $(MAN_XML) cat-texi.perl
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml)+ texi.xsl $(xml) && \
$(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml)+ && \
rm $(xml)+ &&) true) > $@++ && \
($(foreach xml,$(MAN_XML),$(DOCBOOK2X_TEXI) --encoding=UTF-8 \
--to-stdout $(xml) &&) true) > $@++ && \
$(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \
rm $@++ && \
mv $@+ $@

View File

@ -45,4 +45,11 @@ Fixes since v2.10.2
* Improve the rule to convert "unsigned char [20]" into "struct
object_id *" in contrib/coccinelle/
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").
Also contains minor documentation updates and code clean-ups.

View File

@ -0,0 +1,4 @@
Git v2.10.4 Release Notes
=========================
This release forward-ports the fix for "ssh://..." URL from Git v2.7.6

View File

@ -0,0 +1,12 @@
Git v2.11.2 Release Notes
=========================
Fixes since v2.11.1
-------------------
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").

View File

@ -0,0 +1,4 @@
Git v2.11.3 Release Notes
=========================
This release forward-ports the fix for "ssh://..." URL from Git v2.7.6

View File

@ -1,500 +0,0 @@
Git 2.12 Release Notes
======================
Backward compatibility notes.
* Use of an empty string that is used for 'everything matches' is
still warned and Git asks users to use a more explicit '.' for that
instead. The hope is that existing users will not mind this
change, and eventually the warning can be turned into a hard error,
upgrading the deprecation into removal of this (mis)feature. That
is not scheduled to happen in the upcoming release (yet).
* The historical argument order "git merge <msg> HEAD <commit>..."
has been deprecated for quite some time, and will be removed in a
future release.
* An ancient script "git relink" has been removed.
Updates since v2.11
-------------------
UI, Workflows & Features
* Various updates to "git p4".
* "git p4" didn't interact with the internal of .git directory
correctly in the modern "git-worktree"-enabled world.
* "git branch --list" and friends learned "--ignore-case" option to
optionally sort branches and tags case insensitively.
* In addition to %(subject), %(body), "log --pretty=format:..."
learned a new placeholder %(trailers).
* "git rebase" learned "--quit" option, which allows a user to
remove the metadata left by an earlier "git rebase" that was
manually aborted without using "git rebase --abort".
* "git clone --reference $there --recurse-submodules $super" has been
taught to guess repositories usable as references for submodules of
$super that are embedded in $there while making a clone of the
superproject borrow objects from $there; extend the mechanism to
also allow submodules of these submodules to borrow repositories
embedded in these clones of the submodules embedded in the clone of
the superproject.
* Porcelain scripts written in Perl are getting internationalized.
* "git merge --continue" has been added as a synonym to "git commit"
to conclude a merge that has stopped due to conflicts.
* Finer-grained control of what protocols are allowed for transports
during clone/fetch/push have been enabled via a new configuration
mechanism.
* "git shortlog" learned "--committer" option to group commits by
committer, instead of author.
* GitLFS integration with "git p4" has been updated.
* The isatty() emulation for Windows has been updated to eradicate
the previous hack that depended on internals of (older) MSVC
runtime.
* Some platforms no longer understand "latin-1" that is still seen in
the wild in e-mail headers; replace them with "iso-8859-1" that is
more widely known when conversion fails from/to it.
* "git grep" has been taught to optionally recurse into submodules.
* "git rm" used to refuse to remove a submodule when it has its own
git repository embedded in its working tree. It learned to move
the repository away to $GIT_DIR/modules/ of the superproject
instead, and allow the submodule to be deleted (as long as there
will be no loss of local modifications, that is).
* A recent updates to "git p4" was not usable for older p4 but it
could be made to work with minimum changes. Do so.
* "git diff" learned diff.interHunkContext configuration variable
that gives the default value for its --inter-hunk-context option.
* The prereleaseSuffix feature of version comparison that is used in
"git tag -l" did not correctly when two or more prereleases for the
same release were present (e.g. when 2.0, 2.0-beta1, and 2.0-beta2
are there and the code needs to compare 2.0-beta1 and 2.0-beta2).
* "git submodule push" learned "--recurse-submodules=only option to
push submodules out without pushing the top-level superproject.
* "git tag" and "git verify-tag" learned to put GPG verification
status in their "--format=<placeholders>" output format.
* An ancient repository conversion tool left in contrib/ has been
removed.
* "git show-ref HEAD" used with "--verify" because the user is not
interested in seeing refs/remotes/origin/HEAD, and used with
"--head" because the user does not want HEAD to be filtered out,
i.e. "git show-ref --head --verify HEAD", did not work as expected.
* "git submodule add" used to be confused and refused to add a
locally created repository; users can now use "--force" option
to add them.
(merge 619acfc78c sb/submodule-add-force later to maint).
* Some people feel the default set of colors used by "git log --graph"
rather limiting. A mechanism to customize the set of colors has
been introduced.
* "git read-tree" and its underlying unpack_trees() machinery learned
to report problematic paths prefixed with the --super-prefix option.
* When a submodule "A", which has another submodule "B" nested within
it, is "absorbed" into the top-level superproject, the inner
submodule "B" used to be left in a strange state. The logic to
adjust the .git pointers in these submodules has been corrected.
* The user can specify a custom update method that is run when
"submodule update" updates an already checked out submodule. This
was ignored when checking the submodule out for the first time and
we instead always just checked out the commit that is bound to the
path in the superproject's index.
* The command line completion (in contrib/) learned that
"git diff --submodule=" can take "diff" as a recently added option.
* The "core.logAllRefUpdates" that used to be boolean has been
enhanced to take 'always' as well, to record ref updates to refs
other than the ones that are expected to be updated (i.e. branches,
remote-tracking branches and notes).
* Comes with more command line completion (in contrib/) for recently
introduced options.
Performance, Internal Implementation, Development Support etc.
* Commands that operate on a log message and add lines to the trailer
blocks, such as "format-patch -s", "cherry-pick (-x|-s)", and
"commit -s", have been taught to use the logic of and share the
code with "git interpret-trailer".
* The default Travis-CI configuration specifies newer P4 and GitLFS.
* The "fast hash" that had disastrous performance issues in some
corner cases has been retired from the internal diff.
* The character width table has been updated to match Unicode 9.0
* Update the procedure to generate "tags" for developer support.
* The codeflow of setting NOATIME and CLOEXEC on file descriptors Git
opens has been simplified.
* "git diff" and its family had two experimental heuristics to shift
the contents of a hunk to make the patch easier to read. One of
them turns out to be better than the other, so leave only the
"--indent-heuristic" option and remove the other one.
* A new submodule helper "git submodule embedgitdirs" to make it
easier to move embedded .git/ directory for submodules in a
superproject to .git/modules/ (and point the latter with the former
that is turned into a "gitdir:" file) has been added.
* "git push \\server\share\dir" has recently regressed and then
fixed. A test has retroactively been added for this breakage.
* Build updates for Cygwin.
* The implementation of "real_path()" was to go there with chdir(2)
and call getcwd(3), but this obviously wouldn't be usable in a
threaded environment. Rewrite it to manually resolve relative
paths including symbolic links in path components.
* Adjust documentation to help AsciiDoctor render better while not
breaking the rendering done by AsciiDoc.
* The sequencer machinery has been further enhanced so that a later
set of patches can start using it to reimplement "rebase -i".
* Update the definition of the MacOSX test environment used by
TravisCI.
* Rewrite a scripted porcelain "git difftool" in C.
* "make -C t failed" will now run only the tests that failed in the
previous run. This is usable only when prove is not use, and gives
a useless error message when run after "make clean", but otherwise
is serviceable.
* "uchar [40]" to "struct object_id" conversion continues.
Also contains various documentation updates and code clean-ups.
Fixes since v2.10
-----------------
Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).
* We often decide if a session is interactive by checking if the
standard I/O streams are connected to a TTY, but isatty() that
comes with Windows incorrectly returned true if it is used on NUL
(i.e. an equivalent to /dev/null). This has been fixed.
* "git svn" did not work well with path components that are "0", and
some configuration variable it uses were not documented.
* "git rev-parse --symbolic" failed with a more recent notation like
"HEAD^-1" and "HEAD^!".
* An empty directory in a working tree that can simply be nuked used
to interfere while merging or cherry-picking a change to create a
submodule directory there, which has been fixed..
* The code in "git push" to compute if any commit being pushed in the
superproject binds a commit in a submodule that hasn't been pushed
out was overly inefficient, making it unusable even for a small
project that does not have any submodule but have a reasonable
number of refs.
* "git push --dry-run --recurse-submodule=on-demand" wasn't
"--dry-run" in the submodules.
* The output from "git worktree list" was made in readdir() order,
and was unstable.
* mergetool.<tool>.trustExitCode configuration variable did not apply
to built-in tools, but now it does.
* "git p4" LFS support was broken when LFS stores an empty blob.
* A corner case in merge-recursive regression that crept in
during 2.10 development cycle has been fixed.
* Transport with dumb http can be fooled into following foreign URLs
that the end user does not intend to, especially with the server
side redirects and http-alternates mechanism, which can lead to
security issues. Tighten the redirection and make it more obvious
to the end user when it happens.
* Update the error messages from the dumb-http client when it fails
to obtain loose objects; we used to give sensible error message
only upon 404 but we now forbid unexpected redirects that needs to
be reported with something sensible.
* When diff.renames configuration is on (and with Git 2.9 and later,
it is enabled by default, which made it worse), "git stash"
misbehaved if a file is removed and another file with a very
similar content is added.
* "git diff --no-index" did not take "--no-abbrev" option.
* "git difftool --dir-diff" had a minor regression when started from
a subdirectory, which has been fixed.
* "git commit --allow-empty --only" (no pathspec) with dirty index
ought to be an acceptable way to create a new commit that does not
change any paths, but it was forbidden, perhaps because nobody
needed it so far.
* Git 2.11 had a minor regression in "merge --ff-only" that competed
with another process that simultanously attempted to update the
index. We used to explain what went wrong with an error message,
but the new code silently failed. The error message has been
resurrected.
* A pathname that begins with "//" or "\\" on Windows is special but
path normalization logic was unaware of it.
* "git pull --rebase", when there is no new commits on our side since
we forked from the upstream, should be able to fast-forward without
invoking "git rebase", but it didn't.
* The way to specify hotkeys to "xxdiff" that is used by "git
mergetool" has been modernized to match recent versions of xxdiff.
* Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
to where cherry-pick started while picking multiple changes, when
the cherry-pick stopped to ask for help from the user, and the user
did "git reset --hard" to a different commit in order to re-attempt
the operation.
* Code cleanup in shallow boundary computation.
* A recent update to receive-pack to make it easier to drop garbage
objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
have a pathname with a colon in it (no surprise!), and this in turn
made it impossible to push into a repository at such a path. This
has been fixed by introducing a quoting mechanism used when
appending such a path to the colon-separated list.
* The function usage_msg_opt() has been updated to say "fatal:"
before the custom message programs give, when they want to die
with a message about wrong command line options followed by the
standard usage string.
* "git index-pack --stdin" needs an access to an existing repository,
but "git index-pack file.pack" to generate an .idx file that
corresponds to a packfile does not.
* Fix for NDEBUG builds.
* A lazy "git push" without refspec did not internally use a fully
specified refspec to perform 'current', 'simple', or 'upstream'
push, causing unnecessary "ambiguous ref" errors.
* "git p4" misbehaved when swapping a directory and a symbolic link.
* Even though an fix was attempted in Git 2.9.3 days, but running
"git difftool --dir-diff" from a subdirectory never worked. This
has been fixed.
* "git p4" that tracks 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.
* A potential but unlikely buffer overflow in Windows port has been
fixed.
* When the http server gives an incomplete response to a smart-http
rpc call, it could lead to client waiting for a full response that
will never come. Teach the client side to notice this condition
and abort the transfer.
* Compression setting for producing packfiles were spread across
three codepaths, one of which did not honor any configuration.
Unify these so that all of them honor core.compression and
pack.compression variables the same way.
* "git fast-import" sometimes mishandled while rebalancing notes
tree, which has been fixed.
* Recent update to the default abbreviation length that auto-scales
lacked documentation update, which has been corrected.
* Leakage of lockfiles in the config subsystem has been fixed.
* It is natural that "git gc --auto" may not attempt to pack
everything into a single pack, and there is no point in warning
when the user has configured the system to use the pack bitmap,
leading to disabling further "gc".
* "git archive" did not read the standard configuration files, and
failed to notice a file that is marked as binary via the userdiff
driver configuration.
* "git blame --porcelain" misidentified the "previous" <commit, path>
pair (aka "source") when contents came from two or more files.
* "git rebase -i" with a recent update started showing an incorrect
count when squashing more than 10 commits.
* "git <cmd> @{push}" on a detached HEAD used to segfault; it has
been corrected to error out with a message.
* Running "git add a/b" when "a" is a submodule correctly errored
out, but without a meaningful error message.
(merge 2d81c48fa7 sb/pathspec-errors later to maint).
* Typing ^C to pager, which usually does not kill it, killed Git and
took the pager down as a collateral damage in certain process-tree
structure. This has been fixed.
* "git mergetool" without any pathspec on the command line that is
run from a subdirectory became no-op in Git v2.11 by mistake, which
has been fixed.
* Retire long unused/unmaintained gitview from the contrib/ area.
(merge 3120925c25 sb/remove-gitview later to maint).
* Tighten a test to avoid mistaking an extended ERE regexp engine as
a PRE regexp engine.
* An error message with an ASCII control character like '\r' in it
can alter the message to hide its early part, which is problematic
when a remote side gives such an error message that the local side
will relay with a "remote: " prefix.
(merge f290089879 jk/vreport-sanitize later to maint).
* "git fsck" inspects loose objects more carefully now.
(merge cce044df7f jk/loose-object-fsck later to maint).
* A crashing bug introduced in v2.11 timeframe has been found (it is
triggerable only in fast-import) and fixed.
(merge abd5a00268 jk/clear-delta-base-cache-fix later to maint).
* With an anticipatory tweak for remotes defined in ~/.gitconfig
(e.g. "remote.origin.prune" set to true, even though there may or
may not actually be "origin" remote defined in a particular Git
repository), "git remote rename" and other commands misinterpreted
and behaved as if such a non-existing remote actually existed.
(merge e459b073fb js/remote-rename-with-half-configured-remote later to maint).
* A few codepaths had to rely on a global variable when sorting
elements of an array because sort(3) API does not allow extra data
to be passed to the comparison function. Use qsort_s() when
natively available, and a fallback implementation of it when not,
to eliminate the need, which is a prerequisite for making the
codepath reentrant.
* "git fsck --connectivity-check" was not working at all.
(merge a2b22854bd jk/fsck-connectivity-check-fix later to maint).
* After starting "git rebase -i", which first opens the user's editor
to edit the series of patches to apply, but before saving the
contents of that file, "git status" failed to show the current
state (i.e. you are in an interactive rebase session, but you have
applied no steps yet) correctly.
(merge df9ded4984 js/status-pre-rebase-i later to maint).
* Test tweak for FreeBSD where /usr/bin/unzip is unsuitable to run
our tests but /usr/local/bin/unzip is usable.
(merge d98b2c5fce js/unzip-in-usr-bin-workaround later to maint).
* "git p4" did not work well with multiple git-p4.mapUser entries on
Windows.
(merge c3c2b05776 gv/mingw-p4-mapuser later to maint).
* "git help" enumerates executable files in $PATH; the implementation
of "is this file executable?" on Windows has been optimized.
(merge c755015f79 hv/mingw-help-is-executable later to maint).
* Test tweaks for those who have default ACL in their git source tree
that interfere with the umask test.
(merge d549d21307 mm/reset-facl-before-umask-test later to maint).
* Names of the various hook scripts must be spelled exactly, but on
Windows, an .exe binary must be named with .exe suffix; notice
$GIT_DIR/hooks/<hookname>.exe as a valid <hookname> hook.
(merge 235be51fbe js/mingw-hooks-with-exe-suffix later to maint).
* Asciidoctor, an alternative reimplementation of AsciiDoc, still
needs some changes to work with documents meant to be formatted
with AsciiDoc. "make USE_ASCIIDOCTOR=YesPlease" to use it out of
the box to document our pages is getting closer to reality.
* Correct command line completion (in contrib/) on "git svn"
(merge 2cbad17642 ew/complete-svn-authorship-options later to maint).
* Incorrect usage help message for "git worktree prune" has been fixed.
(merge 2488dcab22 ps/worktree-prune-help-fix later to maint).
* Adjust a perf test to new world order where commands that do
require a repository are really strict about having a repository.
(merge c86000c1a7 rs/p5302-create-repositories-before-tests later to maint).
* "git log --graph" did not work well with "--name-only", even though
other forms of "diff" output were handled correctly.
(merge f5022b5fed jk/log-graph-name-only later to maint).
* The push-options given via the "--push-options" option were not
passed through to external remote helpers such as "smart HTTP" that
are invoked via the transport helper.
* The documentation explained what "git stash" does to the working
tree (after stashing away the local changes) in terms of "reset
--hard", which was exposing an unnecessary implementation detail.
(merge 20a7e06172 tg/stash-doc-cleanup later to maint).
* When "git p4" imports changelist that removes paths, it failed to
convert pathnames when the p4 used encoding different from the one
used on the Git side. This has been corrected.
(merge a8b05162e8 ls/p4-path-encoding later to maint).
* A new coccinelle rule that catches a check of !pointer before the
pointer is free(3)d, which most likely is a bug.
(merge ec6cd14c7a rs/cocci-check-free-only-null later to maint).
* "ls-files" run with pathspec has been micro-optimized to avoid
having to memmove(3) unnecessary bytes.
(merge 96f6d3f61a rs/ls-files-partial-optim later to maint).
* A hotfix for a topic already in 'master'.
(merge a4d92d579f js/mingw-isatty later to maint).
* Other minor doc, test and build updates and code cleanups.
(merge f2627d9b19 sb/submodule-config-cleanup later to maint).
(merge 384f1a167b sb/unpack-trees-cleanup later to maint).
(merge 874444b704 rh/diff-orderfile-doc later to maint).
(merge eafd5d9483 cw/doc-sign-off later to maint).
(merge 0aaad415bc rs/absolute-pathdup later to maint).
(merge 4432dd6b5b rs/receive-pack-cleanup later to maint).
(merge 540a398e9c sg/mailmap-self later to maint).
(merge 209df269a6 nd/rev-list-all-includes-HEAD-doc later to maint).
(merge 941b9c5270 sb/doc-unify-bottom later to maint).
(merge 2aaf37b62c jk/doc-remote-helpers-markup-fix later to maint).
(merge e91461b332 jk/doc-submodule-markup-fix later to maint).
(merge 8ab9740d9f dp/submodule-doc-markup-fix later to maint).
(merge 0838cbc22f jk/tempfile-ferror-fclose-confusion later to maint).
(merge 115a40add6 dr/doc-check-ref-format-normalize later to maint).
(merge 133f0a299d gp/document-dotfiles-in-templates-are-not-copied later to maint).
(merge 2b35a9f4c7 bc/blame-doc-fix later to maint).
(merge 7e82388024 ps/doc-gc-aggressive-depth-update later to maint).
(merge 9993a7c5f1 bc/worktree-doc-fix-detached later to maint).
(merge e519eccdf4 rt/align-add-i-help-text later to maint).

View File

@ -1,41 +0,0 @@
Git v2.12.1 Release Notes
=========================
Fixes since v2.12
-----------------
* Reduce authentication round-trip over HTTP when the server supports
just a single authentication method. This also improves the
behaviour when Git is misconfigured to enable http.emptyAuth
against a server that does not authenticate without a username
(i.e. not using Kerberos etc., which makes http.emptyAuth
pointless).
* Windows port wants to use OpenSSL's implementation of SHA-1
routines, so let them.
* Add 32-bit Linux variant to the set of platforms to be tested with
Travis CI.
* When a redirected http transport gets an error during the
redirected request, we ignored the error we got from the server,
and ended up giving a not-so-useful error message.
* The patch subcommand of "git add -i" was meant to have paths
selection prompt just like other subcommand, unlike "git add -p"
directly jumps to hunk selection. Recently, this was broken and
"add -i" lost the paths selection dialog, but it now has been
fixed.
* Git v2.12 was shipped with an embarrassing breakage where various
operations that verify paths given from the user stopped dying when
seeing an issue, and instead later triggering segfault.
* The code to parse "git log -L..." command line was buggy when there
are many ranges specified with -L; overrun of the allocated buffer
has been fixed.
* The command-line parsing of "git log -L" copied internal data
structures using incorrect size on ILP32 systems.
Also contains various documentation updates and code clean-ups.

View File

@ -1,83 +0,0 @@
Git v2.12.2 Release Notes
=========================
Fixes since v2.12.1
-------------------
* "git status --porcelain" is supposed to give a stable output, but a
few strings were left as translatable by mistake.
* "Dumb http" transport used to misparse a nonsense http-alternates
response, which has been fixed.
* "git diff --quiet" relies on the size field in diff_filespec to be
correctly populated, but diff_populate_filespec() helper function
made an incorrect short-cut when asked only to populate the size
field for paths that need to go through convert_to_git() (e.g. CRLF
conversion).
* There is no need for Python only to give a few messages to the
standard error stream, but we somehow did.
* A leak in a codepath to read from a packed object in (rare) cases
has been plugged.
* "git upload-pack", which is a counter-part of "git fetch", did not
report a request for a ref that was not advertised as invalid.
This is generally not a problem (because "git fetch" will stop
before making such a request), but is the right thing to do.
* A "gc.log" file left by a backgrounded "gc --auto" disables further
automatic gc; it has been taught to run at least once a day (by
default) by ignoring a stale "gc.log" file that is too old.
* "git remote rm X", when a branch has remote X configured as the
value of its branch.*.remote, tried to remove branch.*.remote and
branch.*.merge and failed if either is unset.
* A caller of tempfile API that uses stdio interface to write to
files may ignore errors while writing, which is detected when
tempfile is closed (with a call to ferror()). By that time, the
original errno that may have told us what went wrong is likely to
be long gone and was overwritten by an irrelevant value.
close_tempfile() now resets errno to EIO to make errno at least
predictable.
* "git show-branch" expected there were only very short branch names
in the repository and used a fixed-length buffer to hold them
without checking for overflow.
* The code that parses header fields in the commit object has been
updated for (micro)performance and code hygiene.
* A test that creates a confusing branch whose name is HEAD has been
corrected not to do so.
* "Cc:" on the trailer part does not have to conform to RFC strictly,
unlike in the e-mail header. "git send-email" has been updated to
ignore anything after '>' when picking addresses, to allow non-address
cruft like " # stable 4.4" after the address.
* "git push" had a handful of codepaths that could lead to a deadlock
when unexpected error happened, which has been fixed.
* Code to read submodule.<name>.ignore config did not state the
variable name correctly when giving an error message diagnosing
misconfiguration.
* "git ls-remote" and "git archive --remote" are designed to work
without being in a directory under Git's control. However, recent
updates revealed that we randomly look into a directory called
.git/ without actually doing necessary set-up when working in a
repository. Stop doing so.
* The code to parse the command line "git grep <patterns>... <rev>
[[--] <pathspec>...]" has been cleaned up, and a handful of bugs
have been fixed (e.g. we used to check "--" if it is a rev).
* The code to parse "git -c VAR=VAL cmd" and set configuration
variable for the duration of cmd had two small bugs, which have
been fixed.
This supersedes jc/config-case-cmdline topic that has been discarded.
Also contains various documentation updates and code clean-ups.

View File

@ -1,57 +0,0 @@
Git v2.12.3 Release Notes
=========================
Fixes since v2.12.2
-------------------
* The "parse_config_key()" API function has been cleaned up.
* An helper function to make it easier to append the result from
real_path() to a strbuf has been added.
* The t/perf performance test suite was not prepared to test not so
old versions of Git, but now it covers versions of Git that are not
so ancient.
* Picking two versions of Git and running tests to make sure the
older one and the newer one interoperate happily has now become
possible.
* Teach the "debug" helper used in the test framework that allows a
command to run under "gdb" to make the session interactive.
* "git repack --depth=<n>" for a long time busted the specified depth
when reusing delta from existing packs. This has been corrected.
* user.email that consists of only cruft chars should consistently
error out, but didn't.
* A few tests were run conditionally under (rare) conditions where
they cannot be run (like running cvs tests under 'root' account).
* "git branch @" created refs/heads/@ as a branch, and in general the
code that handled @{-1} and @{upstream} was a bit too loose in
disambiguating.
* "git fetch" that requests a commit by object name, when the other
side does not allow such an request, failed without much
explanation.
* "git filter-branch --prune-empty" drops a single-parent commit that
becomes a no-op, but did not drop a root commit whose tree is empty.
* Recent versions of Git treats http alternates (used in dumb http
transport) just like HTTP redirects and requires the client to
enable following it, due to security concerns. But we forgot to
give a warning when we decide not to honor the alternates.
* NO_PTHREADS build has been broken for some time; now fixed.
* Fix for potential segv introduced in v2.11.0 and later (also
v2.10.2).
* A few unterminated here documents in tests were fixed, which in
turn revealed incorrect expectations the tests make. These tests
have been updated.
Also contains various documentation updates and code clean-ups.

View File

@ -1,511 +0,0 @@
Git 2.13 Release Notes
======================
Backward compatibility notes.
* Use of an empty string as a pathspec element that is used for
'everything matches' is still warned and Git asks users to use a
more explicit '.' for that instead. The hope is that existing
users will not mind this change, and eventually the warning can be
turned into a hard error, upgrading the deprecation into removal of
this (mis)feature. That is not scheduled to happen in the upcoming
release (yet).
* The historical argument order "git merge <msg> HEAD <commit>..."
has been deprecated for quite some time, and is now removed.
* The default location "~/.git-credential-cache/socket" for the
socket used to communicate with the credential-cache daemon has
been moved to "~/.cache/git/credential/socket".
* Git now avoids blindly falling back to ".git" when the setup
sequence said we are _not_ in Git repository. A corner case that
happens to work right now may be broken by a call to die("BUG").
We've tried hard to locate such cases and fixed them, but there
might still be cases that need to be addressed--bug reports are
greatly appreciated.
Updates since v2.12
-------------------
UI, Workflows & Features
* "git describe" and "git name-rev" have been taught to take more
than one refname patterns to restrict the set of refs to base their
naming output on, and also learned to take negative patterns to
name refs not to be used for naming via their "--exclude" option.
* Deletion of a branch "foo/bar" could remove .git/refs/heads/foo
once there no longer is any other branch whose name begins with
"foo/", but we didn't do so so far. Now we do.
* When "git merge" detects a path that is renamed in one history
while the other history deleted (or modified) it, it now reports
both paths to help the user understand what is going on in the two
histories being merged.
* The <url> part in "http.<url>.<variable>" configuration variable
can now be spelled with '*' that serves as wildcard.
E.g. "http.https://*.example.com.proxy" can be used to specify the
proxy used for https://a.example.com, https://b.example.com, etc.,
i.e. any host in the example.com domain.
* "git tag" did not leave useful message when adding a new entry to
reflog; this was left unnoticed for a long time because refs/tags/*
doesn't keep reflog by default.
* The "negative" pathspec feature was somewhat more cumbersome to use
than necessary in that its short-hand used "!" which needed to be
escaped from shells, and it required "exclude from what?" specified.
* The command line options for ssh invocation needs to be tweaked for
some implementations of SSH (e.g. PuTTY plink wants "-P <port>"
while OpenSSH wants "-p <port>" to specify port to connect to), and
the variant was guessed when GIT_SSH environment variable is used
to specify it. The logic to guess now applies to the command
specified by the newer GIT_SSH_COMMAND and also core.sshcommand
configuration variable, and comes with an escape hatch for users to
deal with misdetected cases.
* The "--git-path", "--git-common-dir", and "--shared-index-path"
options of "git rev-parse" did not produce usable output. They are
now updated to show the path to the correct file, relative to where
the caller is.
* "git diff -W" has been taught to handle the case where a new
function is added at the end of the file better.
* "git update-ref -d" and other operations to delete references did
not leave any entry in HEAD's reflog when the reference being
deleted was the current branch. This is not a problem in practice
because you do not want to delete the branch you are currently on,
but caused renaming of the current branch to something else not to
be logged in a useful way.
* "Cc:" on the trailer part does not have to conform to RFC strictly,
unlike in the e-mail header. "git send-email" has been updated to
ignore anything after '>' when picking addresses, to allow non-address
cruft like " # stable 4.4" after the address.
* When "git submodule init" decides that the submodule in the working
tree is its upstream, it now gives a warning as it is not a very
common setup.
* "git stash push" takes a pathspec so that the local changes can be
stashed away only partially.
* Documentation for "git ls-files" did not refer to core.quotePath.
* The experimental "split index" feature has gained a few
configuration variables to make it easier to use.
* From a working tree of a repository, a new option of "rev-parse"
lets you ask if the repository is used as a submodule of another
project, and where the root level of the working tree of that
project (i.e. your superproject) is.
* The pathspec mechanism learned to further limit the paths that
match the pattern to those that have specified attributes attached
via the gitattributes mechanism.
* Our source code has used the SHA1_HEADER cpp macro after "#include"
in the C code to switch among the SHA-1 implementations. Instead,
list the exact header file names and switch among implementations
using "#ifdef BLK_SHA1/#include "block-sha1/sha1.h"/.../#endif";
this helps some IDE tools.
* The start-up sequence of "git" needs to figure out some configured
settings before it finds and set itself up in the location of the
repository and was quite messy due to its "chicken-and-egg" nature.
The code has been restructured.
* The command line prompt (in contrib/) learned a new 'tag' style
that can be specified with GIT_PS1_DESCRIBE_STYLE, to describe a
detached HEAD with "git describe --tags".
* The configuration file learned a new "includeIf.<condition>.path"
that includes the contents of the given path only when the
condition holds. This allows you to say "include this work-related
bit only in the repositories under my ~/work/ directory".
* Recent update to "rebase -i" started showing a message that is not
a warning with "warning:" prefix by mistake. This has been fixed.
* Recently we started passing the "--push-options" through the
external remote helper interface; now the "smart HTTP" remote
helper understands what to do with the passed information.
* "git describe --dirty" dies when it cannot be determined if the
state in the working tree matches that of HEAD (e.g. broken
repository or broken submodule). The command learned a new option
"git describe --broken" to give "$name-broken" (where $name is the
description of HEAD) in such a case.
* "git checkout" is taught the "--recurse-submodules" option.
* Recent enhancement to "git stash push" command to support pathspec
to allow only a subset of working tree changes to be stashed away
was found to be too chatty and exposed the internal implementation
detail (e.g. when it uses reset to match the index to HEAD before
doing other things, output from reset seeped out). These, and
other chattyness has been fixed.
* "git merge <message> HEAD <commit>" syntax that has been deprecated
since October 2007 has been removed.
* The refs completion for large number of refs has been sped up,
partly by giving up disambiguating ambiguous refs and partly by
eliminating most of the shell processing between 'git for-each-ref'
and 'ls-remote' and Bash's completion facility.
* On many keyboards, typing "@{" involves holding down SHIFT key and
one can easily end up with "@{Up..." when typing "@{upstream}". As
the upstream/push keywords do not appear anywhere else in the syntax,
we can safely accept them case insensitively without introducing
ambiguity or confusion to solve this.
* "git tag/branch/for-each-ref" family of commands long allowed to
filter the refs by "--contains X" (show only the refs that are
descendants of X), "--merged X" (show only the refs that are
ancestors of X), "--no-merged X" (show only the refs that are not
ancestors of X). One curious omission, "--no-contains X" (show
only the refs that are not descendants of X) has been added to
them.
* The default behaviour of "git log" in an interactive session has
been changed to enable "--decorate".
* The output from "git status --short" has been extended to show
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.
Performance, Internal Implementation, Development Support etc.
* The code to list branches in "git branch" has been consolidated
with the more generic ref-filter API.
* Resource usage while enumerating refs from alternate object store
has been optimized to help receiving end of "push" that hosts a
repository with many "forks".
* The gitattributes machinery is being taught to work better in a
multi-threaded environment.
* "git rebase -i" starts using the recently updated "sequencer" code.
* Code and design clean-up for the refs API.
* The preload-index code has been taught not to bother with the index
entries that are paths that are not checked out by "sparse checkout".
* Some warning() messages from "git clean" were updated to show the
errno from failed system calls.
* The "parse_config_key()" API function has been cleaned up.
* A test that creates a confusing branch whose name is HEAD has been
corrected not to do so.
* The code that parses header fields in the commit object has been
updated for (micro)performance and code hygiene.
* An helper function to make it easier to append the result from
real_path() to a strbuf has been added.
* Reduce authentication round-trip over HTTP when the server supports
just a single authentication method. This also improves the
behaviour when Git is misconfigured to enable http.emptyAuth
against a server that does not authenticate without a username
(i.e. not using Kerberos etc., which makes http.emptyAuth
pointless).
* Windows port wants to use OpenSSL's implementation of SHA-1
routines, so let them.
* The t/perf performance test suite was not prepared to test not so
old versions of Git, but now it covers versions of Git that are not
so ancient.
* Add 32-bit Linux variant to the set of platforms to be tested with
Travis CI.
* "git branch --list" takes the "--abbrev" and "--no-abbrev" options
to control the output of the object name in its "-v"(erbose)
output, but a recent update started ignoring them; fix it before
the breakage reaches to any released version.
* Picking two versions of Git and running tests to make sure the
older one and the newer one interoperate happily has now become
possible.
* "uchar [40]" to "struct object_id" conversion continues.
* "git tag --contains" used to (ab)use the object bits to keep track
of the state of object reachability without clearing them after
use; this has been cleaned up and made to use the newer commit-slab
facility.
* The "debug" helper used in the test framework learned to run
a command under "gdb" interactively.
* The "detect attempt to create collisions" variant of SHA-1
implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft)
has been integrated and made the default.
* The test framework learned to detect unterminated here documents.
* The name-hash used for detecting paths that are different only in
cases (which matter on case insensitive filesystems) has been
optimized to take advantage of multi-threading when it makes sense.
* An earlier version of sha1dc/sha1.c that was merged to 'master'
compiled incorrectly on Windows, which has been fixed.
* "what URL do we want to update this submodule?" and "are we
interested in this submodule?" are split into two distinct
concepts, and then the way used to express the latter got extended,
paving a way to make it easier to manage a project with many
submodules and make it possible to later extend use of multiple
worktrees for a project with submodules.
* Some debugging output from "git describe" were marked for l10n,
but some weren't. Mark missing ones for l10n.
* Define a new task in .travis.yml that triggers a test session on
Windows run elsewhere.
* Conversion from unsigned char [40] to struct object_id continues.
* The "submodule" specific field in the ref_store structure is
replaced with a more generic "gitdir" that can later be used also
when dealing with ref_store that represents the set of refs visible
from the other worktrees.
Also contains various documentation updates and code clean-ups.
Fixes since v2.12
-----------------
Unless otherwise noted, all the fixes since v2.12 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).
* "git repack --depth=<n>" for a long time busted the specified depth
when reusing delta from existing packs. This has been corrected.
* The code to parse the command line "git grep <patterns>... <rev>
[[--] <pathspec>...]" has been cleaned up, and a handful of bugs
have been fixed (e.g. we used to check "--" if it is a rev).
* "git ls-remote" and "git archive --remote" are designed to work
without being in a directory under Git's control. However, recent
updates revealed that we randomly look into a directory called
.git/ without actually doing necessary set-up when working in a
repository. Stop doing so.
* "git show-branch" expected there were only very short branch names
in the repository and used a fixed-length buffer to hold them
without checking for overflow.
* A caller of tempfile API that uses stdio interface to write to
files may ignore errors while writing, which is detected when
tempfile is closed (with a call to ferror()). By that time, the
original errno that may have told us what went wrong is likely to
be long gone and was overwritten by an irrelevant value.
close_tempfile() now resets errno to EIO to make errno at least
predictable.
* "git remote rm X", when a branch has remote X configured as the
value of its branch.*.remote, tried to remove branch.*.remote and
branch.*.merge and failed if either is unset.
* A "gc.log" file left by a backgrounded "gc --auto" disables further
automatic gc; it has been taught to run at least once a day (by
default) by ignoring a stale "gc.log" file that is too old.
* The code to parse "git -c VAR=VAL cmd" and set configuration
variable for the duration of cmd had two small bugs, which have
been fixed.
* user.email that consists of only cruft chars should consistently
error out, but didn't.
* "git upload-pack", which is a counter-part of "git fetch", did not
report a request for a ref that was not advertised as invalid.
This is generally not a problem (because "git fetch" will stop
before making such a request), but is the right thing to do.
* A leak in a codepath to read from a packed object in (rare) cases
has been plugged.
* When a redirected http transport gets an error during the
redirected request, we ignored the error we got from the server,
and ended up giving a not-so-useful error message.
* The patch subcommand of "git add -i" was meant to have paths
selection prompt just like other subcommand, unlike "git add -p"
directly jumps to hunk selection. Recently, this was broken and
"add -i" lost the paths selection dialog, but it now has been
fixed.
* Git v2.12 was shipped with an embarrassing breakage where various
operations that verify paths given from the user stopped dying when
seeing an issue, and instead later triggering segfault.
* There is no need for Python only to give a few messages to the
standard error stream, but we somehow did.
* The code to parse "git log -L..." command line was buggy when there
are many ranges specified with -L; overrun of the allocated buffer
has been fixed.
* The command-line parsing of "git log -L" copied internal data
structures using incorrect size on ILP32 systems.
* "git diff --quiet" relies on the size field in diff_filespec to be
correctly populated, but diff_populate_filespec() helper function
made an incorrect short-cut when asked only to populate the size
field for paths that need to go through convert_to_git() (e.g. CRLF
conversion).
* A few tests were run conditionally under (rare) conditions where
they cannot be run (like running cvs tests under 'root' account).
* "git branch @" created refs/heads/@ as a branch, and in general the
code that handled @{-1} and @{upstream} was a bit too loose in
disambiguating.
* "git fetch" that requests a commit by object name, when the other
side does not allow such an request, failed without much
explanation.
* "git filter-branch --prune-empty" drops a single-parent commit that
becomes a no-op, but did not drop a root commit whose tree is empty.
* Recent versions of Git treats http alternates (used in dumb http
transport) just like HTTP redirects and requires the client to
enable following it, due to security concerns. But we forgot to
give a warning when we decide not to honor the alternates.
* "git push" had a handful of codepaths that could lead to a deadlock
when unexpected error happened, which has been fixed.
* "Dumb http" transport used to misparse a nonsense http-alternates
response, which has been fixed.
* "git add -p <pathspec>" unnecessarily expanded the pathspec to a
list of individual files that matches the pathspec by running "git
ls-files <pathspec>", before feeding it to "git diff-index" to see
which paths have changes, because historically the pathspec
language supported by "diff-index" was weaker. These days they are
equivalent and there is no reason to internally expand it. This
helps both performance and avoids command line argument limit on
some platforms.
(merge 7288e12cce jk/add-i-use-pathspecs later to maint).
* "git status --porcelain" is supposed to give a stable output, but a
few strings were left as translatable by mistake.
* "git revert -m 0 $merge_commit" complained that reverting a merge
needs to say relative to which parent the reversion needs to
happen, as if "-m 0" weren't given. The correct diagnosis is that
"-m 0" does not refer to the first parent ("-m 1" does). This has
been fixed.
* Code to read submodule.<name>.ignore config did not state the
variable name correctly when giving an error message diagnosing
misconfiguration.
* Fix for NO_PTHREADS build.
* Fix for potential segv introduced in v2.11.0 and later (also
v2.10.2) to "git log --pickaxe-regex -S".
* A few unterminated here documents in tests were fixed, which in
turn revealed incorrect expectations the tests make. These tests
have been updated.
* Fix for NO_PTHREADS option.
(merge 2225e1ea20 bw/grep-recurse-submodules later to maint).
* Git now avoids blindly falling back to ".git" when the setup
sequence said we are _not_ in Git repository. A corner case that
happens to work right now may be broken by a call to die("BUG").
(merge b1ef400eec jk/no-looking-at-dotgit-outside-repo-final later to maint).
* A few commands that recently learned the "--recurse-submodule"
option misbehaved when started from a subdirectory of the
superproject.
(merge b2dfeb7c00 bw/recurse-submodules-relative-fix later to maint).
* FreeBSD implementation of getcwd(3) behaved differently when an
intermediate directory is unreadable/unsearchable depending on the
length of the buffer provided, which our strbuf_getcwd() was not
aware of. strbuf_getcwd() has been taught to cope with it better.
(merge a54e938e5b rs/freebsd-getcwd-workaround later to maint).
* A recent update to "rebase -i" stopped running hooks for the "git
commit" command during "reword" action, which has been fixed.
* Removing an entry from a notes tree and then looking another note
entry from the resulting tree using the internal notes API
functions did not work as expected. No in-tree users of the API
has such access pattern, but it still is worth fixing.
* "git receive-pack" could have been forced to die by attempting
allocate an unreasonably large amount of memory with a crafted push
certificate; this has been fixed.
(merge f2214dede9 bc/push-cert-receive-fix later to maint).
* Update error handling for codepath that deals with corrupt loose
objects.
(merge 51054177b3 jk/loose-object-info-report-error later to maint).
* "git diff --submodule=diff" learned to work better in a project
with a submodule that in turn has its own submodules.
(merge 17b254cda6 sb/show-diff-for-submodule-in-diff-fix later to maint).
* Update the build dependency so that an update to /usr/bin/perl
etc. result in recomputation of perl.mak file.
(merge c59c4939c2 ab/regen-perl-mak-with-different-perl later to maint).
* "git push --recurse-submodules --push-option=<string>" learned to
propagate the push option recursively down to pushes in submodules.
* If a patch e-mail had its first paragraph after an in-body header
indented (even after a blank line after the in-body header line),
the indented line was mistook as a continuation of the in-body
header. This has been fixed.
(merge fd1062e52e lt/mailinfo-in-body-header-continuation later to maint).
* Clean up fallouts from recent tightening of the set-up sequence,
where Git barfs when repository information is accessed without
first ensuring that it was started in a repository.
(merge bccb22cbb1 jk/no-looking-at-dotgit-outside-repo later to maint).
* "git p4" used "name-rev HEAD" when it wants to learn what branch is
checked out; it should use "symbolic-ref HEAD".
(merge eff451101d ld/p4-current-branch-fix later to maint).
* Other minor doc, test and build updates and code cleanups.
(merge df2a6e38b7 jk/pager-in-use later to maint).
(merge 75ec4a6cb0 ab/branch-list-doc later to maint).
(merge 3e5b36c637 sg/skip-prefix-in-prettify-refname later to maint).
(merge 2c5e2865cc jk/fast-import-cleanup later to maint).
(merge 4473060bc2 ab/test-readme-updates later to maint).
(merge 48a96972fd ab/doc-submitting later to maint).
(merge f5c2bc2b96 jk/make-coccicheck-detect-errors later to maint).
(merge c105f563d1 cc/untracked later to maint).
(merge 8668976b53 jc/unused-symbols later to maint).
(merge fba275dc93 jc/bs-t-is-not-a-tab-for-sed later to maint).
(merge be6ed145de mm/ls-files-s-doc later to maint).
(merge 60b091c679 qp/bisect-docfix later to maint).
(merge 47242cd103 ah/diff-files-ours-theirs-doc later to maint).
(merge 35ad44cbd8 sb/submodule-rm-absorb later to maint).
(merge 0301f1fd92 va/i18n-perl-scripts later to maint).
(merge 733e064d98 vn/revision-shorthand-for-side-branch-log later to maint).

View File

@ -0,0 +1,12 @@
Git v2.4.12 Release Notes
=========================
Fixes since v2.4.11
-------------------
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").

View File

@ -0,0 +1,12 @@
Git v2.5.6 Release Notes
========================
Fixes since v2.5.5
------------------
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").

View File

@ -0,0 +1,12 @@
Git v2.6.7 Release Notes
========================
Fixes since v2.6.6
------------------
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").

View File

@ -0,0 +1,14 @@
Git v2.7.5 Release Notes
========================
Fixes since v2.7.4
------------------
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").
Also contains a few fixes backported from later development tracks.

View File

@ -0,0 +1,25 @@
Git v2.7.6 Release Notes
========================
Fixes since v2.7.5
------------------
* A "ssh://..." URL can result in a "ssh" command line with a
hostname that begins with a dash "-", which would cause the "ssh"
command to instead (mis)treat it as an option. This is now
prevented by forbidding such a hostname (which will not be
necessary in the real world).
* Similarly, when GIT_PROXY_COMMAND is configured, the command is
run with host and port that are parsed out from "ssh://..." URL;
a poorly written GIT_PROXY_COMMAND could be tricked into treating
a string that begins with a dash "-". This is now prevented by
forbidding such a hostname and port number (again, which will not
be necessary in the real world).
* In the same spirit, a repository name that begins with a dash "-"
is also forbidden now.
Credits go to Brian Neel at GitLab, Joern Schneeweisz of Recurity
Labs and Jeff King at GitHub.

View File

@ -0,0 +1,12 @@
Git v2.8.5 Release Notes
========================
Fixes since v2.8.4
------------------
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").

View File

@ -0,0 +1,4 @@
Git v2.8.6 Release Notes
========================
This release forward-ports the fix for "ssh://..." URL from Git v2.7.6

View File

@ -80,4 +80,11 @@ Fixes since v2.9.3
the file descriptor still open. Open tempfile with O_CLOEXEC flag
to avoid this (on Windows, this is mapped to O_NOINHERIT).
* "git-shell" rejects a request to serve a repository whose name
begins with a dash, which makes it no longer possible to get it
confused into spawning service programs like "git-upload-pack" with
an option like "--help", which in turn would spawn an interactive
pager, instead of working with the repository user asked to access
(i.e. the one whose name is "--help").
Also contains minor documentation updates and code clean-ups.

View File

@ -0,0 +1,4 @@
Git v2.9.5 Release Notes
========================
This release forward-ports the fix for "ssh://..." URL from Git v2.7.6

View File

@ -98,17 +98,12 @@ should skip the full stop. It is also conventional in most cases to
prefix the first line with "area: " where the area is a filename or
identifier for the general area of the code being modified, e.g.
. doc: clarify distinction between sign-off and pgp-signing
. githooks.txt: improve the intro section
. archive: ustar header checksum is computed unsigned
. git-cherry-pick.txt: clarify the use of revision range notation
If in doubt which identifier to use, run "git log --no-merges" on the
files you are modifying to see the current conventions.
It's customary to start the remainder of the first line after "area: "
with a lower-case letter. E.g. "doc: clarify...", not "doc:
Clarify...", or "githooks.txt: improve...", not "githooks.txt:
Improve...".
The body should provide a meaningful commit message, which:
. explains the problem the change tries to solve, iow, what is wrong
@ -134,9 +129,8 @@ with the subject enclosed in a pair of double-quotes, like this:
noticed that ...
The "Copy commit summary" command of gitk can be used to obtain this
format, or this invocation of "git show":
format.
git show -s --date=short --pretty='format:%h ("%s", %ad)' <commit>
(3) Generate your patch using Git tools out of your commits.
@ -222,11 +216,12 @@ that it will be postponed.
Exception: If your mailer is mangling patches then someone may ask
you to re-send them using MIME, that is OK.
Do not PGP sign your patch. Most likely, your maintainer or other people on the
list would not have your PGP key and would not bother obtaining it anyway.
Your patch is not judged by who you are; a good patch from an unknown origin
has a far better chance of being accepted than a patch from a known, respected
origin that is done poorly or does incorrect things.
Do not PGP sign your patch, at least for now. Most likely, your
maintainer or other people on the list would not have your PGP
key and would not bother obtaining it anyway. Your patch is not
judged by who you are; a good patch from an unknown origin has a
far better chance of being accepted than a patch from a known,
respected origin that is done poorly or does incorrect things.
If you really really really really want to do a PGP signed
patch, format it as "multipart/signed", not a text/plain message
@ -251,7 +246,7 @@ patch.
*2* The mailing list: git@vger.kernel.org
(5) Certify your work by adding your "Signed-off-by: " line
(5) Sign your work
To improve tracking of who did what, we've borrowed the
"sign-off" procedure from the Linux kernel project on patches

View File

@ -1,28 +0,0 @@
require 'asciidoctor'
require 'asciidoctor/extensions'
module Git
module Documentation
class LinkGitProcessor < Asciidoctor::Extensions::InlineMacroProcessor
use_dsl
named :chrome
def process(parent, target, attrs)
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>\n"
end
end
end
end
end
Asciidoctor::Extensions.register do
inline_macro Git::Documentation::LinkGitProcessor, :linkgit
end

View File

@ -77,7 +77,7 @@ include::line-range-format.txt[]
terminal. Can't use `--progress` together with `--porcelain`
or `--incremental`.
-M[<num>]::
-M|<num>|::
Detect moved or copied lines within a file. When a commit
moves or copies a block of lines (e.g. the original file
has A and then B, and the commit changes it to B and then
@ -93,7 +93,7 @@ alphanumeric characters that Git must detect as moving/copying
within a file for it to associate those lines with the parent
commit. The default value is 20.
-C[<num>]::
-C|<num>|::
In addition to `-M`, detect lines moved or copied from other
files that were modified in the same commit. This is
useful when you reorganize your program and move code

View File

@ -1,12 +1,9 @@
#!/usr/bin/perl -w
use strict;
use warnings;
my @menu = ();
my $output = $ARGV[0];
open my $tmp, '>', "$output.tmp";
open TMP, '>', "$output.tmp";
while (<STDIN>) {
next if (/^\\input texinfo/../\@node Top/);
@ -14,13 +11,13 @@ while (<STDIN>) {
if (s/^\@top (.*)/\@node $1,,,Top/) {
push @menu, $1;
}
s/\(\@pxref\{\[(URLS|REMOTES)\]}\)//;
s/\(\@pxref{\[(URLS|REMOTES)\]}\)//;
s/\@anchor\{[^{}]*\}//g;
print $tmp $_;
print TMP;
}
close $tmp;
close TMP;
print '\input texinfo
printf '\input texinfo
@setfilename gitman.info
@documentencoding UTF-8
@dircategory Development
@ -31,16 +28,16 @@ print '\input texinfo
@top Git Manual Pages
@documentlanguage en
@menu
';
', $menu[0];
for (@menu) {
print "* ${_}::\n";
}
print "\@end menu\n";
open $tmp, '<', "$output.tmp";
while (<$tmp>) {
open TMP, '<', "$output.tmp";
while (<TMP>) {
print;
}
close $tmp;
close TMP;
print "\@bye\n";
unlink "$output.tmp";

View File

@ -79,69 +79,18 @@ escape sequences) are invalid.
Includes
~~~~~~~~
You can include a config file from another by setting the special
You can include one config file from another by setting the special
`include.path` variable to the name of the file to be included. The
variable takes a pathname as its value, and is subject to tilde
expansion. `include.path` can be given multiple times.
expansion.
The included file is expanded immediately, as if its contents had been
The
included file is expanded immediately, as if its contents had been
found at the location of the include directive. If the value of the
`include.path` variable is a relative path, the path is considered to
be relative to the configuration file in which the include directive
was found. See below for examples.
`include.path` variable is a relative path, the path is considered to be
relative to the configuration file in which the include directive was
found. See below for examples.
Conditional includes
~~~~~~~~~~~~~~~~~~~~
You can include a config file from another conditionally by setting a
`includeIf.<condition>.path` variable to the name of the file to be
included. The variable's value is treated the same way as
`include.path`. `includeIf.<condition>.path` can be given multiple times.
The condition starts with a keyword followed by a colon and some data
whose format and meaning depends on the keyword. Supported keywords
are:
`gitdir`::
The data that follows the keyword `gitdir:` is used as a glob
pattern. If the location of the .git directory matches the
pattern, the include condition is met.
+
The .git location may be auto-discovered, or come from `$GIT_DIR`
environment variable. If the repository is auto discovered via a .git
file (e.g. from submodules, or a linked worktree), the .git location
would be the final location where the .git directory is, not where the
.git file is.
+
The pattern can contain standard globbing wildcards and two additional
ones, `**/` and `/**`, that can match multiple path components. Please
refer to linkgit:gitignore[5] for details. For convenience:
* If the pattern starts with `~/`, `~` will be substituted with the
content of the environment variable `HOME`.
* If the pattern starts with `./`, it is replaced with the directory
containing the current config file.
* If the pattern does not start with either `~/`, `./` or `/`, `**/`
will be automatically prepended. For example, the pattern `foo/bar`
becomes `**/foo/bar` and would match `/any/path/to/foo/bar`.
* If the pattern ends with `/`, `**` will be automatically added. For
example, the pattern `foo/` becomes `foo/**`. In other words, it
matches "foo" and everything inside, recursively.
`gitdir/i`::
This is the same as `gitdir` except that matching is done
case-insensitively (e.g. on case-insensitive file sytems)
A few more notes on matching via `gitdir` and `gitdir/i`:
* Symlinks in `$GIT_DIR` are not resolved before matching.
* Note that "../" is not special and will match literally, which is
unlikely what you want.
Example
~~~~~~~
@ -170,17 +119,6 @@ Example
path = foo ; expand "foo" relative to the current file
path = ~/foo ; expand "foo" in your `$HOME` directory
; include if $GIT_DIR is /path/to/foo/.git
[includeIf "gitdir:/path/to/foo/.git"]
path = /path/to/foo.inc
; include for all repositories inside /path/to/group
[includeIf "gitdir:/path/to/group/"]
path = /path/to/foo.inc
; include for all repositories inside $HOME/to/group
[includeIf "gitdir:~/to/group/"]
path = /path/to/foo.inc
Values
~~~~~~
@ -232,9 +170,6 @@ The position of any attributes with respect to the colors
be turned off by prefixing them with `no` or `no-` (e.g., `noreverse`,
`no-ul`, etc).
+
An empty color string produces no color effect at all. This can be used
to avoid coloring specific elements without disabling color entirely.
+
For git's pre-defined color slots, the attributes are meant to be reset
at the beginning of each item in the colored output. So setting
`color.decorate.branch` to `black` will paint that branch name in a
@ -396,10 +331,6 @@ core.trustctime::
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
@ -416,19 +347,16 @@ core.checkStat::
all fields, including the sub-second part of mtime and ctime.
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.
The commands that output paths (e.g. 'ls-files',
'diff'), when not given the `-z` option, will quote
"unusual" characters in the pathname by enclosing the
pathname in a double-quote pair and with backslashes the
same way strings in C source code are quoted. If this
variable is set to false, the bytes higher than 0x80 are
not quoted but output as verbatim. Note that double
quote, backslash and control characters are always
quoted without `-z` regardless of the setting of this
variable.
core.eol::
Sets the line ending type to use in the working directory for
@ -589,12 +517,10 @@ core.logAllRefUpdates::
"`$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>`"
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/`.
refs/heads/), remote refs (i.e. under refs/remotes/),
note refs (i.e. under refs/notes/), and the symbolic ref HEAD.
+
This information can be used to determine what commit
was the tip of a branch "2 days ago".
@ -737,13 +663,13 @@ 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
Commands such as `commit` and `tag` that lets you edit
messages by launching an editor uses 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
Commands such as `commit` and `tag` that lets you edit
messages consider a line that begins with this character
commented, and removes them after the editor returns
(default '#').
@ -1471,12 +1397,6 @@ gc.autoDetach::
Make `git gc --auto` return immediately and run in background
if the system supports it. Default is true.
gc.logExpiry::
If the file gc.log exists, then `git gc --auto` won't run
unless that file is more than 'gc.logExpiry' old. Default is
"1.day". See `gc.pruneExpire` for more ways to specify its
value.
gc.packRefs::
Running `git pack-refs` in a repository renders it
unclonable by Git versions prior to 1.5.1.2 over dumb
@ -1994,10 +1914,7 @@ http.<url>.*::
must match exactly between the config key and the URL.
. Host/domain name (e.g., `example.com` in `https://example.com/`).
This field must match between the config key and the URL. It is
possible to specify a `*` as part of the host name to match all subdomains
at this level. `https://*.example.com/` for example would match
`https://foo.example.com/`, but not `https://foo.bar.example.com/`.
This field must match exactly between the config key and the URL.
. Port number (e.g., `8080` in `http://example.com:8080/`).
This field must match exactly between the config key and the URL.
@ -2032,17 +1949,6 @@ Environment variable settings always override any matches. The URLs that are
matched against are those given directly to Git commands. This means any URLs
visited as a result of a redirection do not participate in matching.
ssh.variant::
Depending on the value of the environment variables `GIT_SSH` or
`GIT_SSH_COMMAND`, or the config setting `core.sshCommand`, Git
auto-detects whether to adjust its command-line parameters for use
with plink or tortoiseplink, as opposed to the default (OpenSSH).
+
The config variable `ssh.variant` can be set to override this auto-detection;
valid values are `ssh`, `plink`, `putty` or `tortoiseplink`. Any other value
will be treated as normal ssh. This setting can be overridden via the
environment variable `GIT_SSH_VARIANT`.
i18n.commitEncoding::
Character encoding the commit messages are stored in; Git itself
does not care per se, but this information is necessary e.g. when
@ -2130,10 +2036,6 @@ log.follow::
i.e. it cannot be used to follow multiple files and does not work well
on non-linear history.
log.graphColors::
A list of colors, separated by commas, that can be used to draw
history lines in `git log --graph`.
log.showRoot::
If true, the initial commit will be shown as a big creation event.
This is equivalent to a diff against an empty tree.
@ -2419,52 +2321,6 @@ pretty.<name>::
Note that an alias with the same name as a built-in format
will be silently ignored.
protocol.allow::
If set, provide a user defined default policy for all protocols which
don't explicitly have a policy (`protocol.<name>.allow`). By default,
if unset, known-safe protocols (http, https, git, ssh, file) have a
default policy of `always`, known-dangerous protocols (ext) have a
default policy of `never`, and all other protocols have a default
policy of `user`. Supported policies:
+
--
* `always` - protocol is always able to be used.
* `never` - protocol is never able to be used.
* `user` - protocol is only able to be used when `GIT_PROTOCOL_FROM_USER` is
either unset or has a value of 1. This policy should be used when you want a
protocol to be directly usable by the user but don't want it used by commands which
execute clone/fetch/push commands without user input, e.g. recursive
submodule initialization.
--
protocol.<name>.allow::
Set a policy to be used by protocol `<name>` with clone/fetch/push
commands. See `protocol.allow` above for the available policies.
+
The protocol names currently used by git are:
+
--
- `file`: any local file-based path (including `file://` URLs,
or local paths)
- `git`: the anonymous git protocol over a direct TCP
connection (or proxy, if configured)
- `ssh`: git over ssh (including `host:path` syntax,
`ssh://`, etc).
- `http`: git over http, both "smart http" and "dumb http".
Note that this does _not_ include `https`; if you want to configure
both, you must do so individually.
- any external helpers are named by their protocol (e.g., use
`hg` to allow the `git-remote-hg` helper)
--
pull.ff::
By default, Git does not create an extra merge commit when merging
a commit that is a descendant of the current commit. Instead, the
@ -2521,8 +2377,6 @@ push.default::
pushing to the same repository you would normally pull from
(i.e. central workflow).
* `tracking` - This is a deprecated synonym for `upstream`.
* `simple` - in centralized workflow, work like `upstream` with an
added safety to refuse to push if the upstream branch's name is
different from the local one.
@ -2918,31 +2772,6 @@ showbranch.default::
The default set of branches for linkgit:git-show-branch[1].
See linkgit:git-show-branch[1].
splitIndex.maxPercentChange::
When the split index feature is used, this specifies the
percent of entries the split index can contain compared to the
total number of entries in both the split index and the shared
index before a new shared index is written.
The value should be between 0 and 100. If the value is 0 then
a new shared index is always written, if it is 100 a new
shared index is never written.
By default the value is 20, so a new shared index is written
if the number of entries in the split index would be greater
than 20 percent of the total number of entries.
See linkgit:git-update-index[1].
splitIndex.sharedIndexExpire::
When the split index feature is used, shared index files that
were not modified since the time this variable specifies will
be removed when a new shared index file is created. The value
"now" expires all entries immediately, and "never" suppresses
expiration altogether.
The default value is "2.weeks.ago".
Note that a shared index file is considered modified (for the
purpose of expiration) each time a new split-index file is
either created based on it or read from it.
See linkgit:git-update-index[1].
status.relativePaths::
By default, linkgit:git-status[1] shows paths relative to the
current directory. Setting this variable to `false` shows paths
@ -3013,9 +2842,8 @@ submodule.<name>.url::
The URL for a submodule. This variable is copied from the .gitmodules
file to the git config via 'git submodule init'. The user can change
the configured URL before obtaining the submodule via 'git submodule
update'. If neither submodule.<name>.active or submodule.active are
set, the presence of this variable is used as a fallback to indicate
whether the submodule is of interest to git commands.
update'. After obtaining the submodule, the presence of this variable
is used as a sign whether the submodule is of interest to git commands.
See linkgit:git-submodule[1] and linkgit:gitmodules[5] for details.
submodule.<name>.update::
@ -3053,16 +2881,6 @@ submodule.<name>.ignore::
"--ignore-submodules" option. The 'git submodule' commands are not
affected by this setting.
submodule.<name>.active::
Boolean value indicating if the submodule is of interest to git
commands. This config option takes precedence over the
submodule.active config option.
submodule.active::
A repeated field which contains a pathspec used to match against a
submodule's path to determine if the submodule is of interest to git
commands.
submodule.fetchJobs::
Specifies how many submodules are fetched/cloned at the same time.
A positive integer allows up to that number of submodules fetched
@ -3076,7 +2894,7 @@ submodule.alternateLocation::
value is set to `superproject` the submodule to be cloned computes
its alternates location relative to the superprojects alternate.
submodule.alternateErrorStrategy::
submodule.alternateErrorStrategy
Specifies how to treat errors with the alternates for a submodule
as computed via `submodule.alternateLocation`. Possible values are
`ignore`, `info`, `die`. Default is `die`.
@ -3249,39 +3067,17 @@ user.signingKey::
This option is passed unchanged to gpg's --local-user parameter,
so you may specify a key using any method that gpg supports.
versionsort.prereleaseSuffix (deprecated)::
Deprecated alias for `versionsort.suffix`. Ignored if
`versionsort.suffix` is set.
versionsort.suffix::
Even when version sort is used in linkgit:git-tag[1], tagnames
with the same base version but different suffixes are still sorted
lexicographically, resulting e.g. in prerelease tags appearing
after the main release (e.g. "1.0-rc1" after "1.0"). This
variable can be specified to determine the sorting order of tags
with different suffixes.
versionsort.prereleaseSuffix::
When version sort is used in linkgit:git-tag[1], prerelease
tags (e.g. "1.0-rc1") may appear after the main release
"1.0". By specifying the suffix "-rc" in this variable,
"1.0-rc1" will appear before "1.0".
+
By specifying a single suffix in this variable, any tagname containing
that suffix will appear before the corresponding main release. E.g. if
the variable is set to "-rc", then all "1.0-rcX" tags will appear before
"1.0". If specified multiple times, once per suffix, then the order of
suffixes in the configuration will determine the sorting order of tagnames
with those suffixes. E.g. if "-pre" appears before "-rc" in the
configuration, then all "1.0-preX" tags will be listed before any
"1.0-rcX" tags. The placement of the main release tag relative to tags
with various suffixes can be determined by specifying the empty suffix
among those other suffixes. E.g. if the suffixes "-rc", "", "-ck" and
"-bfs" appear in the configuration in this order, then all "v4.8-rcX" tags
are listed first, followed by "v4.8", then "v4.8-ckX" and finally
"v4.8-bfsX".
+
If more than one suffixes match the same tagname, then that tagname will
be sorted according to the suffix which starts at the earliest position in
the tagname. If more than one different matching suffixes start at
that earliest position, then that tagname will be sorted according to the
longest of those suffixes.
The sorting order between different suffixes is undefined if they are
in multiple config files.
This variable can be specified multiple times, once per suffix. The
order of suffixes in the config file determines the sorting order
(e.g. if "-pre" appears before "-rc" in the config file then 1.0-preXX
is sorted before 1.0-rcXX). The sorting order between different
suffixes is undefined if they are in multiple config files.
web.browser::
Specify a web browser that may be used by some commands.

View File

@ -60,12 +60,6 @@ diff.context::
Generate diffs with <n> lines of context instead of the default
of 3. This value is overridden by the -U option.
diff.interHunkContext::
Show the context between diff hunks, up to the specified number
of lines, thereby fusing the hunks that are close to each other.
This value serves as the default for the `--inter-hunk-context`
command line option.
diff.external::
If this config variable is set, diff generation is not
performed using the internal diff machinery, but using the
@ -105,10 +99,9 @@ diff.noprefix::
If set, 'git diff' does not show any source or destination prefix.
diff.orderFile::
File indicating how to order files within a diff.
See the '-O' option to linkgit:git-diff[1] for details.
If `diff.orderFile` is a relative pathname, it is treated as
relative to the top of the working tree.
File indicating how to order files within a diff, using
one shell glob pattern per line.
Can be overridden by the '-O' option to linkgit:git-diff[1].
diff.renameLimit::
The number of files to consider when performing the copy/rename
@ -179,8 +172,10 @@ diff.tool::
include::mergetools-diff.txt[]
diff.indentHeuristic::
Set this option to `true` to enable experimental heuristics
that shift diff hunk boundaries to make patches easier to read.
diff.compactionHeuristic::
Set one of these options to `true` to enable one of two
experimental heuristics that shift diff hunk boundaries to
make patches easier to read.
diff.algorithm::
Choose a diff algorithm. The variants are as follows:

View File

@ -78,10 +78,9 @@ Example:
:100644 100644 5be4a4...... 000000...... M file.c
------------------------------------------------
Without the `-z` option, pathnames with "unusual" characters are
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]). Using `-z` the filename is output
verbatim and the line is terminated by a NUL byte.
When `-z` option is not used, TAB, LF, and backslash characters
in pathnames are represented as `\t`, `\n`, and `\\`,
respectively.
diff format for merges
----------------------

View File

@ -53,9 +53,10 @@ The index line includes the SHA-1 checksum before and after the change.
The <mode> is included if the file mode does not change; otherwise,
separate lines indicate the old and the new mode.
3. Pathnames with "unusual" characters are quoted as explained for
the configuration variable `core.quotePath` (see
linkgit:git-config[1]).
3. TAB, LF, double quote and backslash characters in pathnames
are represented as `\t`, `\n`, `\"` and `\\`, respectively.
If there is need for such substitution then the whole
pathname is put in double quotes.
4. All the `file1` files in the output refer to files before the
commit, and all the `file2` files refer to files after the commit.

View File

@ -1,5 +1,7 @@
--indent-heuristic::
--no-indent-heuristic::
--compaction-heuristic::
--no-compaction-heuristic::
These are to help debugging and tuning experimental heuristics
(which are off by default) that shift diff hunk boundaries to
make patches easier to read.

View File

@ -192,9 +192,10 @@ ifndef::git-log[]
given, do not munge pathnames and use NULs as output field terminators.
endif::git-log[]
+
Without this option, pathnames with "unusual" characters are quoted as
explained for the configuration variable `core.quotePath` (see
linkgit:git-config[1]).
Without this option, each pathname output will have TAB, LF, double quotes,
and backslash characters replaced with `\t`, `\n`, `\"`, and `\\`,
respectively, and the pathname will be enclosed in double quotes if
any of those replacements occurred.
--name-only::
Show only names of changed files.
@ -465,41 +466,11 @@ information.
endif::git-format-patch[]
-O<orderfile>::
Control the order in which files appear in the output.
Output the patch in the order specified in the
<orderfile>, which has one shell glob pattern per line.
This overrides the `diff.orderFile` configuration variable
(see linkgit:git-config[1]). To cancel `diff.orderFile`,
use `-O/dev/null`.
+
The output order is determined by the order of glob patterns in
<orderfile>.
All files with pathnames that match the first pattern are output
first, all files with pathnames that match the second pattern (but not
the first) are output next, and so on.
All files with pathnames that do not match any pattern are output
last, as if there was an implicit match-all pattern at the end of the
file.
If multiple pathnames have the same rank (they match the same pattern
but no earlier patterns), their output order relative to each other is
the normal order.
+
<orderfile> is parsed as follows:
+
--
- Blank lines are ignored, so they can be used as separators for
readability.
- Lines starting with a hash ("`#`") are ignored, so they can be used
for comments. Add a backslash ("`\`") to the beginning of the
pattern if it starts with a hash.
- Each other line contains a single pattern.
--
+
Patterns have the same syntax and semantics as patterns used for
fnmantch(3) without the FNM_PATHNAME flag, except a pathname also
matches a pattern if removing any number of the final pathname
components matches the pattern. For example, the pattern "`foo*bar`"
matches "`fooasdfbar`" and "`foo/bar/baz/asdf`" but not "`foobarx`".
ifndef::git-format-patch[]
-R::
@ -540,8 +511,6 @@ endif::git-format-patch[]
--inter-hunk-context=<lines>::
Show the context between diff hunks, up to the specified number
of lines, thereby fusing hunks that are close to each other.
Defaults to `diff.interHunkContext` or 0 if the config option
is unset.
-W::
--function-context::

View File

@ -108,9 +108,10 @@ the information is read from the current index instead.
When `--numstat` has been given, do not munge pathnames,
but use a NUL-terminated machine-readable format.
+
Without this option, pathnames with "unusual" characters are quoted as
explained for the configuration variable `core.quotePath` (see
linkgit:git-config[1]).
Without this option, each pathname output will have TAB, LF, double quotes,
and backslash characters replaced with `\t`, `\n`, `\"`, and `\\`,
respectively, and the pathname will be enclosed in double quotes if
any of those replacements occurred.
-p<n>::
Remove <n> leading slashes from traditional diff paths. The

View File

@ -137,7 +137,7 @@ respectively, in place of "good" and "bad". (But note that you cannot
mix "good" and "bad" with "old" and "new" in a single session.)
In this more general usage, you provide `git bisect` with a "new"
commit that has some property and an "old" commit that doesn't have that
commit has some property and an "old" commit that doesn't have that
property. Each time `git bisect` checks out a commit, you test if that
commit has the property. If it does, mark the commit as "new";
otherwise, mark it as "old". When the bisection is done, `git bisect`

View File

@ -10,10 +10,9 @@ SYNOPSIS
[verse]
'git branch' [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column] [--sort=<key>]
[(--merged | --no-merged) [<commit>]]
[--contains [<commit]] [--no-contains [<commit>]]
[--points-at <object>] [--format=<format>] [<pattern>...]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
'git branch' [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
'git branch' (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
'git branch' --unset-upstream [<branchname>]
@ -36,12 +35,11 @@ as branch creation.
With `--contains`, shows only the branches that contain the named commit
(in other words, the branches whose tip commits are descendants of the
named commit), `--no-contains` inverts it. With `--merged`, only branches
merged into the named commit (i.e. the branches whose tip commits are
reachable from the named commit) will be listed. With `--no-merged` only
branches not merged into the named commit will be listed. If the <commit>
argument is missing it defaults to `HEAD` (i.e. the tip of the current
branch).
named commit). With `--merged`, only branches merged into the named
commit (i.e. the branches whose tip commits are reachable from the named
commit) will be listed. With `--no-merged` only branches not merged into
the named commit will be listed. If the <commit> argument is missing it
defaults to `HEAD` (i.e. the tip of the current branch).
The command's second form creates a new branch head named <branchname>
which points to the current `HEAD`, or <start-point> if given.
@ -93,9 +91,6 @@ OPTIONS
based sha1 expressions such as "<branchname>@\{yesterday}".
Note that in non-bare repositories, reflogs are usually
enabled by default by the `core.logallrefupdates` config option.
The negated form `--no-create-reflog` only overrides an earlier
`--create-reflog`, but currently does not negate the setting of
`core.logallrefupdates`.
-f::
--force::
@ -123,10 +118,6 @@ OPTIONS
default to color output.
Same as `--color=never`.
-i::
--ignore-case::
Sorting and filtering branches are case insensitive.
--column[=<options>]::
--no-column::
Display branch listing in columns. See configuration variable
@ -144,13 +135,8 @@ This option is only applicable in non-verbose mode.
List both remote-tracking branches and local branches.
--list::
List branches. With optional `<pattern>...`, e.g. `git
branch --list 'maint-*'`, list only the branches that match
the pattern(s).
+
This should not be confused with `git branch -l <branchname>`,
which creates a branch named `<branchname>` with a reflog.
See `--create-reflog` above for details.
Activate the list mode. `git branch <pattern>` would try to create a branch,
use `git branch --list <pattern>` to list matching branches.
-v::
-vv::
@ -220,19 +206,13 @@ start-point is either a local or remote-tracking branch.
Only list branches which contain the specified commit (HEAD
if not specified). Implies `--list`.
--no-contains [<commit>]::
Only list branches which don't contain the specified commit
(HEAD if not specified). Implies `--list`.
--merged [<commit>]::
Only list branches whose tips are reachable from the
specified commit (HEAD if not specified). Implies `--list`,
incompatible with `--no-merged`.
specified commit (HEAD if not specified). Implies `--list`.
--no-merged [<commit>]::
Only list branches whose tips are not reachable from the
specified commit (HEAD if not specified). Implies `--list`,
incompatible with `--merged`.
specified commit (HEAD if not specified). Implies `--list`.
<branchname>::
The name of the branch to create or delete.
@ -266,11 +246,6 @@ start-point is either a local or remote-tracking branch.
--points-at <object>::
Only list branches of the given object.
--format <format>::
A string that interpolates `%(fieldname)` from the object
pointed at by a ref being shown. The format is the same as
that of linkgit:git-for-each-ref[1].
Examples
--------
@ -309,16 +284,13 @@ If you are creating a branch that you want to checkout immediately, it is
easier to use the git checkout command with its `-b` option to create
a branch and check it out with a single command.
The options `--contains`, `--no-contains`, `--merged` and `--no-merged`
serve four related but different purposes:
The options `--contains`, `--merged` and `--no-merged` serve three related
but different purposes:
- `--contains <commit>` is used to find all branches which will need
special attention if <commit> were to be rebased or amended, since those
branches contain the specified <commit>.
- `--no-contains <commit>` is the inverse of that, i.e. branches that don't
contain the specified <commit>.
- `--merged` is used to find all branches which can be safely deleted,
since those branches are fully contained by HEAD.

View File

@ -100,10 +100,10 @@ OPTIONS
--normalize::
Normalize 'refname' by removing any leading slash (`/`)
characters and collapsing runs of adjacent slashes between
name components into a single slash. If the normalized
name components into a single slash. Iff the normalized
refname is valid then print it to standard output and exit
with a status of 0, otherwise exit with a non-zero status.
(`--print` is a deprecated way to spell `--normalize`.)
with a status of 0. (`--print` is a deprecated way to spell
`--normalize`.)
EXAMPLES

View File

@ -256,13 +256,6 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
out anyway. In other words, the ref can be held by more than one
worktree.
--[no-]recurse-submodules::
Using --recurse-submodules will update the content of all initialized
submodules according to the commit recorded in the superproject. If
local modifications in a submodule would be overwritten the checkout
will fail unless `-f` is used. If nothing (or --no-recurse-submodules)
is used, the work trees of submodules will not be updated.
<branch>::
Branch to checkout; if it refers to a branch (i.e., a name that,
when prepended with "refs/heads/", is a valid ref), then that

View File

@ -14,7 +14,7 @@ SYNOPSIS
[-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
[--dissociate] [--separate-git-dir <git dir>]
[--depth <depth>] [--[no-]single-branch]
[--recurse-submodules] [--[no-]shallow-submodules]
[--recursive | --recurse-submodules] [--[no-]shallow-submodules]
[--jobs <n>] [--] <repository> [<directory>]
DESCRIPTION
@ -215,14 +215,10 @@ objects from the source repository into a pack in the cloned repository.
branch when `--single-branch` clone was made, no remote-tracking
branch is created.
--recurse-submodules[=<pathspec]::
After the clone is created, initialize and clone submodules
within based on the provided pathspec. If no pathspec is
provided, all submodules are initialized and cloned.
Submodules are initialized and cloned using their default
settings. The resulting clone has `submodule.active` set to
the provided pathspec, or "." (meaning all submodules) if no
pathspec is provided. This is equivalent to running
--recursive::
--recurse-submodules::
After the clone is created, initialize all submodules within,
using their default settings. This is equivalent to running
`git submodule update --init --recursive` immediately after
the clone is finished. This option is ignored if the cloned
repository does not have a worktree/checkout (i.e. if any of

View File

@ -117,12 +117,9 @@ OPTIONS
-z::
--null::
When showing `short` or `porcelain` status output, print the
filename verbatim and terminate the entries with NUL, instead of LF.
If no format is given, implies the `--porcelain` output format.
Without the `-z` option, filenames with "unusual" characters are
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]).
When showing `short` or `porcelain` status output, terminate
entries in the status output with NUL, instead of LF. If no
format is given, implies the `--porcelain` output format.
-F <file>::
--file=<file>::
@ -463,7 +460,7 @@ order). See linkgit:git-var[1] for details.
HOOKS
-----
This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`,
`post-commit` and `post-rewrite` hooks. See linkgit:githooks[5] for more
and `post-commit` hooks. See linkgit:githooks[5] for more
information.
FILES

View File

@ -33,13 +33,10 @@ OPTIONS
--socket <path>::
Use `<path>` to contact a running cache daemon (or start a new
cache daemon if one is not started).
Defaults to `$XDG_CACHE_HOME/git/credential/socket` unless
`~/.git-credential-cache/` exists in which case
`~/.git-credential-cache/socket` is used instead.
If your home directory is on a network-mounted filesystem, you
may need to change this to a local filesystem. You must specify
an absolute path.
cache daemon if one is not started). Defaults to
`~/.git-credential-cache/socket`. If your home directory is on a
network-mounted filesystem, you may need to change this to a
local filesystem. You must specify an absolute path.
CONTROLLING THE DAEMON
----------------------

View File

@ -30,14 +30,9 @@ OPTIONS
Commit-ish object names to describe. Defaults to HEAD if omitted.
--dirty[=<mark>]::
--broken[=<mark>]::
Describe the state of the working tree. When the working
tree matches HEAD, the output is the same as "git describe
HEAD". If the working tree has local modification "-dirty"
is appended to it. If a repository is corrupt and Git
cannot determine if there is local modification, Git will
error out, unless `--broken' is given, which appends
the suffix "-broken" instead.
Describe the working tree.
It means describe HEAD and appends <mark> (`-dirty` by
default) if the working tree is dirty.
--all::
Instead of using only the annotated tags, use any ref
@ -88,20 +83,7 @@ OPTIONS
--match <pattern>::
Only consider tags matching the given `glob(7)` pattern,
excluding the "refs/tags/" prefix. This can be used to avoid
leaking private tags from the repository. If given multiple times, a
list of patterns will be accumulated, and tags matching any of the
patterns will be considered. Use `--no-match` to clear and reset the
list of patterns.
--exclude <pattern>::
Do not consider tags matching the given `glob(7)` pattern, excluding
the "refs/tags/" prefix. This can be used to narrow the tag space and
find only tags matching some meaningful criteria. If given multiple
times, a list of patterns will be accumulated and tags matching any
of the patterns will be excluded. When combined with --match a tag will
be considered when it matches at least one --match pattern and does not
match any of the --exclude patterns. Use `--no-exclude` to clear and
reset the list of patterns.
leaking private tags from the repository.
--always::
Show uniquely abbreviated commit object as fallback.

View File

@ -97,20 +97,6 @@ OPTIONS
:git-diff: 1
include::diff-options.txt[]
-1 --base::
-2 --ours::
-3 --theirs::
Compare the working tree with the "base" version (stage #1),
"our branch" (stage #2) or "their branch" (stage #3). The
index contains these stages only for unmerged entries i.e.
while resolving conflicts. See linkgit:git-read-tree[1]
section "3-Way Merge" for detailed information.
-0::
Omit diff output for unmerged entries and just show
"Unmerged". Can be used only when comparing the working tree
with the index.
<path>...::
The <paths> parameters, when given, are used to limit
the diff to the named paths (you can give directory

View File

@ -86,11 +86,10 @@ instead. `--no-symlinks` is the default on Windows.
Additionally, `$BASE` is set in the environment.
-g::
--[no-]gui::
--gui::
When 'git-difftool' is invoked with the `-g` or `--gui` option
the default diff tool will be read from the configured
`diff.guitool` variable instead of `diff.tool`. The `--no-gui`
option can be used to override this setting.
`diff.guitool` variable instead of `diff.tool`.
--[no-]trust-exit-code::
'git-difftool' invokes a diff tool individually on each file.

View File

@ -167,12 +167,14 @@ to other tags will be rewritten to point to the underlying commit.
project root. Implies <<Remap_to_ancestor>>.
--prune-empty::
Some filters will generate empty commits that leave the tree untouched.
This option instructs git-filter-branch to remove such commits if they
have exactly one or zero non-pruned parents; merge commits will
therefore remain intact. This option cannot be used together with
`--commit-filter`, though the same effect can be achieved by using the
provided `git_commit_non_empty_tree` function in a commit filter.
Some kind of filters will generate empty commits, that left the tree
untouched. This switch allow git-filter-branch to ignore such
commits. Though, this switch only applies for commits that have one
and only one parent, it will hence keep merges points. Also, this
option is not compatible with the use of `--commit-filter`. Though you
just need to use the function 'git_commit_non_empty_tree "$@"' instead
of the `git commit-tree "$@"` idiom in your commit filter to make that
happen.
--original <namespace>::
Use this option to set the namespace where the original commits

View File

@ -11,7 +11,7 @@ SYNOPSIS
'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
[(--sort=<key>)...] [--format=<format>] [<pattern>...]
[--points-at <object>] [(--merged | --no-merged) [<object>]]
[--contains [<object>]] [--no-contains [<object>]]
[--contains [<object>]]
DESCRIPTION
-----------
@ -69,25 +69,16 @@ OPTIONS
--merged [<object>]::
Only list refs whose tips are reachable from the
specified commit (HEAD if not specified),
incompatible with `--no-merged`.
specified commit (HEAD if not specified).
--no-merged [<object>]::
Only list refs whose tips are not reachable from the
specified commit (HEAD if not specified),
incompatible with `--merged`.
specified commit (HEAD if not specified).
--contains [<object>]::
Only list refs which contain the specified commit (HEAD if not
specified).
--no-contains [<object>]::
Only list refs which don't contain the specified commit (HEAD
if not specified).
--ignore-case::
Sorting and filtering refs are case insensitive.
FIELD NAMES
-----------
@ -101,20 +92,11 @@ refname::
The name of the ref (the part after $GIT_DIR/).
For a non-ambiguous short name of the ref append `:short`.
The option core.warnAmbiguousRefs is used to select the strict
abbreviation mode. If `lstrip=<N>` (`rstrip=<N>`) is appended, strips `<N>`
slash-separated path components from the front (back) of the refname
(e.g. `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo` and
`%(refname:rstrip=2)` turns `refs/tags/foo` into `refs`).
If `<N>` is a negative number, strip as many path components as
necessary from the specified end to leave `-<N>` path components
(e.g. `%(refname:lstrip=-2)` turns
`refs/tags/foo` into `tags/foo` and `%(refname:rstrip=-1)`
turns `refs/tags/foo` into `refs`). When the ref does not have
enough components, the result becomes an empty string if
stripping with positive <N>, or it becomes the full refname if
stripping with negative <N>. Neither is an error.
+
`strip` can be used as a synomym to `lstrip`.
abbreviation mode. If `strip=<N>` is appended, strips `<N>`
slash-separated path components from the front of the refname
(e.g., `%(refname:strip=2)` turns `refs/tags/foo` into `foo`.
`<N>` must be a positive integer. If a displayed ref has fewer
components than `<N>`, the command aborts with an error.
objecttype::
The type of the object (`blob`, `tree`, `commit`, `tag`).
@ -125,31 +107,21 @@ objectsize::
objectname::
The object name (aka SHA-1).
For a non-ambiguous abbreviation of the object name append `:short`.
For an abbreviation of the object name with desired length append
`:short=<length>`, where the minimum length is MINIMUM_ABBREV. The
length may be exceeded to ensure unique object names.
upstream::
The name of a local ref which can be considered ``upstream''
from the displayed ref. Respects `:short`, `:lstrip` and
`:rstrip` in the same way as `refname` above. Additionally
respects `:track` to show "[ahead N, behind M]" and
`:trackshort` to show the terse version: ">" (ahead), "<"
(behind), "<>" (ahead and behind), or "=" (in sync). `:track`
also prints "[gone]" whenever unknown upstream ref is
encountered. Append `:track,nobracket` to show tracking
information without brackets (i.e "ahead N, behind M"). Has
no effect if the ref does not have tracking information
associated with it. All the options apart from `nobracket`
are mutually exclusive, but if used together the last option
is selected.
from the displayed ref. Respects `:short` in the same way as
`refname` above. Additionally respects `:track` to show
"[ahead N, behind M]" and `:trackshort` to show the terse
version: ">" (ahead), "<" (behind), "<>" (ahead and behind),
or "=" (in sync). Has no effect if the ref does not have
tracking information associated with it.
push::
The name of a local ref which represents the `@{push}`
location for the displayed ref. Respects `:short`, `:lstrip`,
`:rstrip`, `:track`, and `:trackshort` options as `upstream`
does. Produces an empty string if no `@{push}` ref is
configured.
The name of a local ref which represents the `@{push}` location
for the displayed ref. Respects `:short`, `:track`, and
`:trackshort` options as `upstream` does. Produces an empty
string if no `@{push}` ref is configured.
HEAD::
'*' if HEAD matches current ref (the checked out branch), ' '
@ -174,25 +146,6 @@ align::
quoted, but if nested then only the topmost level performs
quoting.
if::
Used as %(if)...%(then)...%(end) or
%(if)...%(then)...%(else)...%(end). If there is an atom with
value or string literal after the %(if) then everything after
the %(then) is printed, else if the %(else) atom is used, then
everything after %(else) is printed. We ignore space when
evaluating the string before %(then), this is useful when we
use the %(HEAD) atom which prints either "*" or " " and we
want to apply the 'if' condition only on the 'HEAD' ref.
Append ":equals=<string>" or ":notequals=<string>" to compare
the value between the %(if:...) and %(then) atoms with the
given string.
symref::
The ref which the given symbolic ref refers to. If not a
symbolic ref, nothing is printed. Respects the `:short`,
`:lstrip` and `:rstrip` options in the same way as `refname`
above.
In addition to the above, for commit and tag objects, the header
field names (`tree`, `parent`, `object`, `type`, and `tag`) can
be used to specify the value in the header field.
@ -212,8 +165,6 @@ of all lines of the commit message up to the first blank line. The next
line is 'contents:body', where body is all of the lines after the first
blank line. The optional GPG signature is `contents:signature`. The
first `N` lines of the message is obtained using `contents:lines=N`.
Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
are obtained as 'contents:trailers'.
For sorting purposes, fields with numeric values sort in numeric order
(`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
@ -230,14 +181,6 @@ As a special case for the date-type fields, you may specify a format for
the date by adding `:` followed by date format name (see the
values the `--date` option to linkgit:git-rev-list[1] takes).
Some atoms like %(align) and %(if) always require a matching %(end).
We call them "opening atoms" and sometimes denote them as %($open).
When a scripting language specific quoting is in effect, everything
between a top-level opening atom and its matching %(end) is evaluated
according to the semantics of the opening atom and only its result
from the top-level is quoted.
EXAMPLES
--------
@ -325,22 +268,6 @@ eval=`git for-each-ref --shell --format="$fmt" \
eval "$eval"
------------
An example to show the usage of %(if)...%(then)...%(else)...%(end).
This prefixes the current branch with a star.
------------
git for-each-ref --format="%(if)%(HEAD)%(then)* %(else) %(end)%(refname:short)" refs/heads/
------------
An example to show the usage of %(if)...%(then)...%(end).
This prints the authorname, if present.
------------
git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"
------------
SEE ALSO
--------
linkgit:git-show-ref[1]

View File

@ -239,7 +239,7 @@ keeping them as Git notes allows them to be maintained between versions
of the patch series (but see the discussion of the `notes.rewrite`
configuration options in linkgit:git-notes[1] to use this workflow).
--[no-]signature=<signature>::
--[no]-signature=<signature>::
Add a signature to each message produced. Per RFC 3676 the signature
is separated from the body by a line with '-- ' on it. If the
signature option is omitted the signature defaults to the Git version

View File

@ -127,7 +127,7 @@ the documentation for the --window' option in linkgit:git-repack[1] for
more details. This defaults to 250.
Similarly, the optional configuration variable `gc.aggressiveDepth`
controls --depth option in linkgit:git-repack[1]. This defaults to 50.
controls --depth option in linkgit:git-repack[1]. This defaults to 250.
The optional configuration variable `gc.pruneExpire` controls how old
the unreferenced loose objects have to be before they are pruned. The

View File

@ -26,7 +26,6 @@ SYNOPSIS
[--threads <num>]
[-f <file>] [-e] <pattern>
[--and|--or|--not|(|)|-e <pattern>...]
[--recurse-submodules] [--parent-basename <basename>]
[ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>...]
[--] [<pathspec>...]
@ -89,19 +88,6 @@ OPTIONS
mechanism. Only useful when searching files in the current directory
with `--no-index`.
--recurse-submodules::
Recursively search in each submodule that has been initialized and
checked out in the repository. When used in combination with the
<tree> option the prefix of all submodule output will be the name of
the parent project's <tree> object.
--parent-basename <basename>::
For internal use only. In order to produce uniform output with the
--recurse-submodules option, this option can be used to provide the
basename of a parent's <tree> object to a submodule so the submodule
can prefix its output with the parent's name rather than the SHA1 of
the submodule.
-a::
--text::
Process binary files as if they were text.

View File

@ -35,7 +35,7 @@ blame::
browser::
Start a tree browser showing all files in the specified
commit. Files selected through the
commit (or `HEAD` by default). Files selected through the
browser are opened in the blame viewer.
citool::

View File

@ -116,8 +116,8 @@ does not exist, it will be created.
TEMPLATE DIRECTORY
------------------
Files and directories in the template directory whose name do not start with a
dot will be copied to the `$GIT_DIR` after it is created.
The template directory contains files and directories that will be copied to
the `$GIT_DIR` after it is created.
The template directory will be one of the following (in order):

View File

@ -57,7 +57,7 @@ OPTIONS
-s::
--stage::
Show staged contents' mode bits, object name and stage number in the output.
Show staged contents' object name, mode bits and stage number in the output.
--directory::
If a whole directory is classified as "other", show just its
@ -77,8 +77,7 @@ OPTIONS
succeed.
-z::
\0 line termination on output and do not quote filenames.
See OUTPUT below for more information.
\0 line termination on output.
-x <pattern>::
--exclude=<pattern>::
@ -197,10 +196,9 @@ the index records up to three such pairs; one from tree O in stage
the user (or the porcelain) to see what should eventually be recorded at the
path. (see linkgit:git-read-tree[1] for more information on state)
Without the `-z` option, pathnames with "unusual" characters are
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]). Using `-z` the filename is output
verbatim and the line is terminated by a NUL byte.
When `-z` option is not used, TAB, LF, and backslash characters
in pathnames are represented as `\t`, `\n`, and `\\`,
respectively.
Exclude Patterns

View File

@ -53,8 +53,7 @@ OPTIONS
Show object size of blob (file) entries.
-z::
\0 line termination on output and do not quote filenames.
See OUTPUT FORMAT below for more information.
\0 line termination on output.
--name-only::
--name-status::
@ -83,6 +82,8 @@ Output Format
-------------
<mode> SP <type> SP <object> TAB <file>
Unless the `-z` option is used, TAB, LF, and backslash characters
in pathnames are represented as `\t`, `\n`, and `\\`, respectively.
This output format is compatible with what `--index-info --stdin` of
'git update-index' expects.
@ -94,11 +95,6 @@ Object size identified by <object> is given in bytes, and right-justified
with minimum width of 7 characters. Object size is given only for blobs
(file) entries; for other entries `-` character is used in place of size.
Without the `-z` option, pathnames with "unusual" characters are
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]). Using `-z` the filename is output
verbatim and the line is terminated by a NUL byte.
GIT
---
Part of the linkgit:git[1] suite

View File

@ -13,8 +13,8 @@ SYNOPSIS
[-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
[--[no-]allow-unrelated-histories]
[--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]
'git merge' <msg> HEAD <commit>...
'git merge' --abort
'git merge' --continue
DESCRIPTION
-----------
@ -45,7 +45,11 @@ a log message from the user describing the changes.
D---E---F---G---H master
------------
The second syntax ("`git merge --abort`") can only be run after the
The second syntax (<msg> `HEAD` <commit>...) is supported for
historical reasons. Do not use it from the command line or in
new scripts. It is the same as `git merge -m <msg> <commit>...`.
The third syntax ("`git merge --abort`") can only be run after the
merge has resulted in conflicts. 'git merge --abort' will abort the
merge process and try to reconstruct the pre-merge state. However,
if there were uncommitted changes when the merge started (and
@ -57,8 +61,6 @@ reconstruct the original (pre-merge) changes. Therefore:
discouraged: while possible, it may leave you in a state that is hard to
back out of in the case of a conflict.
The fourth syntax ("`git merge --continue`") can only be run after the
merge has resulted in conflicts.
OPTIONS
-------
@ -97,11 +99,6 @@ commit or stash your changes before running 'git merge'.
'git merge --abort' is equivalent to 'git reset --merge' when
`MERGE_HEAD` is present.
--continue::
After a 'git merge' stops due to conflicts you can conclude the
merge by running 'git merge --continue' (see "HOW TO RESOLVE
CONFLICTS" section below).
<commit>...::
Commits, usually other branch heads, to merge into our branch.
Specifying more than one commit will create a merge with

View File

@ -26,18 +26,7 @@ OPTIONS
--refs=<pattern>::
Only use refs whose names match a given shell pattern. The pattern
can be one of branch name, tag name or fully qualified ref name. If
given multiple times, use refs whose names match any of the given shell
patterns. Use `--no-refs` to clear any previous ref patterns given.
--exclude=<pattern>::
Do not use any ref whose name matches a given shell pattern. The
pattern can be one of branch name, tag name or fully qualified ref
name. If given multiple times, a ref will be excluded when it matches
any of the given patterns. When used together with --refs, a ref will
be used as a match only when it matches at least one --refs pattern and
does not match any --exclude patterns. Use `--no-exclude` to clear the
list of exclude patterns.
can be one of branch name, tag name or fully qualified ref name.
--all::
List all commits reachable from all refs

View File

@ -303,15 +303,6 @@ These options can be used to modify 'git p4 submit' behavior.
submit manually or revert. This option always stops after the
first (oldest) commit. Git tags are not exported to p4.
--shelve::
Instead of submitting create a series of shelved changelists.
After creating each shelve, the relevant files are reverted/deleted.
If you have multiple commits pending multiple shelves will be created.
--update-shelve CHANGELIST::
Update an existing shelved changelist with this commit. Implies
--shelve.
--conflict=(ask|skip|quit)::
Conflicts can occur when applying a commit to p4. When this
happens, the default behavior ("ask") is to prompt whether to
@ -476,12 +467,6 @@ git-p4.client::
Client specified as an option to all p4 commands, with
'-c <client>', including the client spec.
git-p4.retries::
Specifies the number of times to retry a p4 command (notably,
'p4 sync') if the network times out. The default value is 3.
Set the value to 0 to disable retries or if your p4 version
does not support retries (pre 2012.2).
Clone and sync variables
~~~~~~~~~~~~~~~~~~~~~~~~
git-p4.syncFromOrigin::

View File

@ -272,7 +272,7 @@ origin +master` to force a push to the `master` branch). See the
standard error stream is not directed to a terminal.
--no-recurse-submodules::
--recurse-submodules=check|on-demand|only|no::
--recurse-submodules=check|on-demand|no::
May be used to make sure all submodule commits used by the
revisions to be pushed are available on a remote-tracking branch.
If 'check' is used Git will verify that all submodule commits that
@ -280,12 +280,11 @@ origin +master` to force a push to the `master` branch). See the
remote of the submodule. If any commits are missing the push will
be aborted and exit with non-zero status. If 'on-demand' is used
all submodules that changed in the revisions to be pushed will be
pushed. If on-demand was not able to push all necessary revisions it will
also be aborted and exit with non-zero status. If 'only' is used all
submodules will be recursively pushed while the superproject is left
unpushed. A value of 'no' or using `--no-recurse-submodules` can be used
to override the push.recurseSubmodules configuration variable when no
submodule recursion is required.
pushed. If on-demand was not able to push all necessary revisions
it will also be aborted and exit with non-zero status. A value of
'no' or using `--no-recurse-submodules` can be used to override the
push.recurseSubmodules configuration variable when no submodule
recursion is required.
--[no-]verify::
Toggle the pre-push hook (see linkgit:githooks[5]). The

View File

@ -115,12 +115,6 @@ OPTIONS
directories the index file and index output file are
located in.
--[no-]recurse-submodules::
Using --recurse-submodules will update the content of all initialized
submodules according to the commit recorded in the superproject by
calling read-tree recursively, also setting the submodules HEAD to be
detached at that commit.
--no-sparse-checkout::
Disable sparse checkout support even if `core.sparseCheckout`
is true.

View File

@ -12,7 +12,7 @@ SYNOPSIS
[<upstream> [<branch>]]
'git rebase' [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
--root [<branch>]
'git rebase' --continue | --skip | --abort | --quit | --edit-todo
'git rebase' --continue | --skip | --abort | --edit-todo
DESCRIPTION
-----------
@ -252,11 +252,6 @@ leave out at most one of A and B, in which case it defaults to HEAD.
will be reset to where it was when the rebase operation was
started.
--quit::
Abort the rebase operation but HEAD is not reset back to the
original branch. The index and working tree are also left
unchanged as a result.
--keep-empty::
Keep the commits that do not change anything from its
parents in the result.

View File

@ -0,0 +1,30 @@
git-relink(1)
=============
NAME
----
git-relink - Hardlink common objects in local repositories
SYNOPSIS
--------
[verse]
'git relink' [--safe] <dir>... <master_dir>
DESCRIPTION
-----------
This will scan 1 or more object repositories and look for objects in common
with a master repository. Objects not already hardlinked to the master
repository will be replaced with a hardlink to the master repository.
OPTIONS
-------
--safe::
Stops if two objects with the same hash exist but have different sizes.
Default is to warn and continue.
<dir>::
Directories containing a .git/objects/ subdirectory.
GIT
---
Part of the linkgit:git[1] suite

View File

@ -292,54 +292,6 @@ $ git reset --keep start <3>
<3> But you can use "reset --keep" to remove the unwanted commit after
you switched to "branch2".
Split a commit apart into a sequence of commits::
+
Suppose that you have created lots of logically separate changes and commited
them together. Then, later you decide that it might be better to have each
logical chunk associated with its own commit. You can use git reset to rewind
history without changing the contents of your local files, and then successively
use `git add -p` to interactively select which hunks to include into each commit,
using `git commit -c` to pre-populate the commit message.
+
------------
$ git reset -N HEAD^ <1>
$ git add -p <2>
$ git diff --cached <3>
$ git commit -c HEAD@{1} <4>
... <5>
$ git add ... <6>
$ git diff --cached <7>
$ git commit ... <8>
------------
+
<1> First, reset the history back one commit so that we remove the original
commit, but leave the working tree with all the changes. The -N ensures
that any new files added with HEAD are still marked so that git add -p
will find them.
<2> Next, we interactively select diff hunks to add using the git add -p
facility. This will ask you about each diff hunk in sequence and you can
use simple commands such as "yes, include this", "No don't include this"
or even the very powerful "edit" facility.
<3> Once satisfied with the hunks you want to include, you should verify what
has been prepared for the first commit by using git diff --cached. This
shows all the changes that have been moved into the index and are about
to be committed.
<4> Next, commit the changes stored in the index. The -c option specifies to
pre-populate the commit message from the original message that you started
with in the first commit. This is helpful to avoid retyping it. The HEAD@{1}
is a special notation for the commit that HEAD used to be at prior to the
original reset commit (1 change ago). See linkgit:git-reflog[1] for more
details. You may also use any other valid commit reference.
<5> You can repeat steps 2-4 multiple times to break the original code into
any number of commits.
<6> Now you've split out many of the changes into their own commits, and might
no longer use the patch mode of git add, in order to select all remaining
uncommitted changes.
<7> Once again, check to verify that you've included what you want to. You may
also wish to verify that git diff doesn't show any remaining changes to be
committed later.
<8> And finally create the final commit.
DISCUSSION
----------

View File

@ -91,8 +91,7 @@ repository. For example:
----
prefix=$(git rev-parse --show-prefix)
cd "$(git rev-parse --show-toplevel)"
# rev-parse provides the -- needed for 'set'
eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
eval "set -- $(git rev-parse --sq --prefix "$prefix" "$@")"
----
--verify::
@ -217,10 +216,6 @@ If `$GIT_DIR` is not defined and the current directory
is not detected to lie in a Git repository or work tree
print a message to stderr and exit with nonzero status.
--absolute-git-dir::
Like `--git-dir`, but its output is always the canonicalized
absolute path.
--git-common-dir::
Show `$GIT_COMMON_DIR` if defined, else `$GIT_DIR`.
@ -261,12 +256,6 @@ print a message to stderr and exit with nonzero status.
--show-toplevel::
Show the absolute path of the top-level directory.
--show-superproject-working-tree
Show the absolute path of the root of the superproject's
working tree (if exists) that uses the current repository as
its submodule. Outputs nothing if the current repository is
not used as a submodule by any project.
--shared-index-path::
Show the path to the shared index file in split index mode, or
empty if not in split-index mode.

View File

@ -89,7 +89,7 @@ See the CONFIGURATION section for `sendemail.multiEdit`.
reply to the given Message-Id, which avoids breaking threads to
provide a new patch series.
The second and subsequent emails will be sent as replies according to
the `--[no-]chain-reply-to` setting.
the `--[no]-chain-reply-to` setting.
+
So for example when `--thread` and `--no-chain-reply-to` are specified, the
second and subsequent patches will be replies to the first one like in the

View File

@ -81,12 +81,6 @@ be in a separate packet, and the list must end with a flush packet.
will also fail if the actual call to `gpg --sign` fails. See
linkgit:git-receive-pack[1] for the details on the receiving end.
--push-option=<string>::
Pass the specified string as a push option for consumption by
hooks on the server side. If the server doesn't support push
options, error out. See linkgit:git-push[1] and
linkgit:githooks[5] for details.
<host>::
A remote host to house the repository. When this
part is specified, 'git-receive-pack' is invoked via

View File

@ -47,10 +47,6 @@ OPTIONS
Each pretty-printed commit will be rewrapped before it is shown.
-c::
--committer::
Collect and show committer identities instead of authors.
-w[<width>[,<indent1>[,<indent2>]]]::
Linewrap the output by wrapping each line at `width`. The first
line of each entry is indented by `indent1` spaces, and the second

View File

@ -13,11 +13,8 @@ SYNOPSIS
'git stash' drop [-q|--quiet] [<stash>]
'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
'git stash' branch <branchname> [<stash>]
'git stash' save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [<message>]
'git stash' [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [-m|--message <message>]]
[--] [<pathspec>...]]
'git stash' [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [<message>]]
'git stash' clear
'git stash' create [<message>]
'git stash' store [-m|--message <message>] [-q|--quiet] <commit>
@ -49,24 +46,13 @@ OPTIONS
-------
save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]::
push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-m|--message <message>] [--] [<pathspec>...]::
Save your local modifications to a new 'stash' and roll them
back to HEAD (in the working tree and in the index).
The <message> part is optional and gives
the description along with the stashed state.
+
For quickly making a snapshot, you can omit "push". In this mode,
non-option arguments are not allowed to prevent a misspelled
subcommand from making an unwanted stash. The two exceptions to this
are `stash -p` which acts as alias for `stash push -p` and pathspecs,
which are allowed after a double hyphen `--` for disambiguation.
+
When pathspec is given to 'git stash push', the new stash records the
modified states only for the files that match the pathspec. The index
entries and working tree files are then rolled back to the state in
HEAD only for these files, too, leaving files that do not match the
pathspec intact.
Save your local modifications to a new 'stash', and run `git reset
--hard` to revert them. The <message> part is optional and gives
the description along with the stashed state. For quickly making
a snapshot, you can omit _both_ "save" and <message>, but giving
only <message> does not trigger this action to prevent a misspelled
subcommand from making an unwanted stash.
+
If the `--keep-index` option is used, all changes already added to the
index are left intact.

View File

@ -181,17 +181,6 @@ in which case `XY` are `!!`.
! ! ignored
-------------------------------------------------
Submodules have more state and instead report
M the submodule has a different HEAD than
recorded in the index
m the submodule has modified content
? the submodule has untracked files
since modified content or untracked files in a submodule cannot be added
via `git add` in the superproject to prepare a commit.
'm' and '?' are applied recursively. For example if a nested submodule
in a submodule contains an untracked file, this is reported as '?' as well.
If -b is used the short-format status is preceded by a line
## branchname tracking info
@ -221,8 +210,6 @@ field from the first filename). Third, filenames containing special
characters are not specially formatted; no quoting or
backslash-escaping is performed.
Any submodule changes are reported as modified `M` instead of `m` or single `?`.
Porcelain Format Version 2
~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -335,9 +322,10 @@ When the `-z` option is given, pathnames are printed as is and
without any quoting and lines are terminated with a NUL (ASCII 0x00)
byte.
Without the `-z` option, pathnames with "unusual" characters are
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]).
Otherwise, all pathnames will be "C-quoted" if they contain any tab,
linefeed, double quote, or backslash characters. In C-quoting, these
characters will be replaced with the corresponding C-style escape
sequences and the resulting pathname will be double quoted.
CONFIGURATION

View File

@ -9,15 +9,19 @@ git-submodule - Initialize, update or inspect submodules
SYNOPSIS
--------
[verse]
'git submodule' [--quiet] add [<options>] [--] <repository> [<path>]
'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>]
[--reference <repository>] [--depth <depth>] [--] <repository> [<path>]
'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...]
'git submodule' [--quiet] init [--] [<path>...]
'git submodule' [--quiet] deinit [-f|--force] (--all|[--] <path>...)
'git submodule' [--quiet] update [<options>] [--] [<path>...]
'git submodule' [--quiet] summary [<options>] [--] [<path>...]
'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
[--[no-]recommend-shallow] [-f|--force] [--rebase|--merge]
[--reference <repository>] [--depth <depth>] [--recursive]
[--jobs <n>] [--] [<path>...]
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
[commit] [--] [<path>...]
'git submodule' [--quiet] foreach [--recursive] <command>
'git submodule' [--quiet] sync [--recursive] [--] [<path>...]
'git submodule' [--quiet] absorbgitdirs [--] [<path>...]
DESCRIPTION
@ -58,7 +62,7 @@ if you choose to go that route.
COMMANDS
--------
add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>]::
add::
Add the given repository as a submodule at the given path
to the changeset to be committed next to the current
project: the current project is termed the "superproject".
@ -73,17 +77,13 @@ configuration entries unless `--name` is used to specify a logical name.
+
<repository> is the URL of the new submodule's origin repository.
This may be either an absolute URL, or (if it begins with ./
or ../), the location relative to the superproject's default remote
or ../), the location relative to the superproject's origin
repository (Please note that to specify a repository 'foo.git'
which is located right next to a superproject 'bar.git', you'll
have to use '../foo.git' instead of './foo.git' - as one might expect
when following the rules for relative URLs - because the evaluation
of relative URLs in Git is identical to that of relative directories).
+
The default remote is the remote of the remote tracking branch
of the current branch. If no such remote tracking branch exists or
the HEAD is detached, "origin" is assumed to be the default remote.
If the superproject doesn't have a default remote configured
If the superproject doesn't have an origin configured
the superproject is its own authoritative upstream and the current
working directory is used instead.
+
@ -103,7 +103,7 @@ together in the same relative location, and only the
superproject's URL needs to be provided: git-submodule will correctly
locate the submodule using the relative URL in .gitmodules.
status [--cached] [--recursive] [--] [<path>...]::
status::
Show the status of the submodules. This will print the SHA-1 of the
currently checked out commit for each submodule, along with the
submodule path and the output of 'git describe' for the
@ -120,30 +120,22 @@ submodules with respect to the commit recorded in the index or the HEAD,
linkgit:git-status[1] and linkgit:git-diff[1] will provide that information
too (and can also report changes to a submodule's work tree).
init [--] [<path>...]::
init::
Initialize the submodules recorded in the index (which were
added and committed elsewhere) by setting `submodule.$name.url`
in .git/config. It uses the same setting from .gitmodules as
a template. If the URL is relative, it will be resolved using
the default remote. If there is no default remote, the current
repository will be assumed to be upstream.
+
Optional <path> arguments limit which submodules will be initialized.
If no path is specified and submodule.active has been configured, submodules
configured to be active will be initialized, otherwise all submodules are
initialized.
+
When present, it will also copy the value of `submodule.$name.update`.
This command does not alter existing information in .git/config.
You can then customize the submodule clone URLs in .git/config
for your local setup and proceed to `git submodule update`;
you can also just use `git submodule update --init` without
the explicit 'init' step if you do not intend to customize
any submodule locations.
+
See the add subcommand for the defintion of default remote.
added and committed elsewhere) by copying submodule
names and urls from .gitmodules to .git/config.
Optional <path> arguments limit which submodules will be initialized.
It will also copy the value of `submodule.$name.update` into
.git/config.
The key used in .git/config is `submodule.$name.url`.
This command does not alter existing information in .git/config.
You can then customize the submodule clone URLs in .git/config
for your local setup and proceed to `git submodule update`;
you can also just use `git submodule update --init` without
the explicit 'init' step if you do not intend to customize
any submodule locations.
deinit [-f|--force] (--all|[--] <path>...)::
deinit::
Unregister the given submodules, i.e. remove the whole
`submodule.$name` section from .git/config together with their work
tree. Further calls to `git submodule update`, `git submodule foreach`
@ -159,20 +151,20 @@ instead of deinit-ing everything, to prevent mistakes.
If `--force` is specified, the submodule's working tree will
be removed even if it contains local modifications.
update [--init] [--remote] [-N|--no-fetch] [--[no-]recommend-shallow] [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>] [--depth <depth>] [--recursive] [--jobs <n>] [--] [<path>...]::
update::
+
--
Update the registered submodules to match what the superproject
expects by cloning missing submodules and updating the working tree of
the submodules. The "updating" can be done in several ways depending
on command line options and the value of `submodule.<name>.update`
configuration variable. The command line option takes precedence over
the configuration variable. if neither is given, a checkout is performed.
update procedures supported both from the command line as well as setting
`submodule.<name>.update`:
configuration variable. Supported update procedures are:
checkout;; the commit recorded in the superproject will be
checked out in the submodule on a detached HEAD.
checked out in the submodule on a detached HEAD. This is
done when `--checkout` option is given, or no option is
given, and `submodule.<name>.update` is unset, or if it is
set to 'checkout'.
+
If `--force` is specified, the submodule will be checked out (using
`git checkout --force` if appropriate), even if the commit specified
@ -180,21 +172,23 @@ in the index of the containing repository already matches the commit
checked out in the submodule.
rebase;; the current branch of the submodule will be rebased
onto the commit recorded in the superproject.
onto the commit recorded in the superproject. This is done
when `--rebase` option is given, or no option is given, and
`submodule.<name>.update` is set to 'rebase'.
merge;; the commit recorded in the superproject will be merged
into the current branch in the submodule.
The following procedures are only available via the `submodule.<name>.update`
configuration variable:
into the current branch in the submodule. This is done
when `--merge` option is given, or no option is given, and
`submodule.<name>.update` is set to 'merge'.
custom command;; arbitrary shell command that takes a single
argument (the sha1 of the commit recorded in the
superproject) is executed. When `submodule.<name>.update`
is set to '!command', the remainder after the exclamation mark
is the custom command.
superproject) is executed. This is done when no option is
given, and `submodule.<name>.update` has the form of
'!command'.
none;; the submodule is not updated.
When no option is given and `submodule.<name>.update` is set to 'none',
the submodule is not updated.
If the submodule is not yet initialized, and you just want to use the
setting as stored in .gitmodules, you can automatically initialize the
@ -203,7 +197,7 @@ submodule with the `--init` option.
If `--recursive` is specified, this command will recurse into the
registered submodules, and update any nested submodules within.
--
summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...]::
summary::
Show commit summary between the given commit (defaults to HEAD) and
working tree/index. For a submodule in question, a series of commits
in the submodule between the given super project commit and the
@ -216,7 +210,7 @@ summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...]:
Using the `--submodule=log` option with linkgit:git-diff[1] will provide that
information too.
foreach [--recursive] <command>::
foreach::
Evaluates an arbitrary shell command in each checked out submodule.
The command has access to the variables $name, $path, $sha1 and
$toplevel:
@ -233,14 +227,11 @@ foreach [--recursive] <command>::
the processing to terminate. This can be overridden by adding '|| :'
to the end of the command.
+
As an example, the command below will show the path and currently
checked out commit for each submodule:
+
--------------
git submodule foreach 'echo $path `git rev-parse HEAD`'
--------------
As an example, +git submodule foreach \'echo $path {backtick}git
rev-parse HEAD{backtick}'+ will show the path and currently checked out
commit for each submodule.
sync [--recursive] [--] [<path>...]::
sync::
Synchronizes submodules' remote URL configuration setting
to the value specified in .gitmodules. It will only affect those
submodules which already have a URL entry in .git/config (that is the
@ -254,20 +245,6 @@ sync [--recursive] [--] [<path>...]::
If `--recursive` is specified, this command will recurse into the
registered submodules, and sync any nested submodules within.
absorbgitdirs::
If a git directory of a submodule is inside the submodule,
move the git directory of the submodule into its superprojects
`$GIT_DIR/modules` path and then connect the git directory and
its working directory by setting the `core.worktree` and adding
a .git file pointing to the git directory embedded in the
superprojects git directory.
+
A repository that was cloned independently and later added as a submodule or
old setups have the submodules git directory inside the submodule instead of
embedded into the superprojects git directory.
+
This command is recursive by default.
OPTIONS
-------
-q::

View File

@ -12,11 +12,10 @@ SYNOPSIS
'git tag' [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>]
<tagname> [<commit> | <object>]
'git tag' -d <tagname>...
'git tag' [-n[<num>]] -l [--contains <commit>] [--contains <commit>]
[--points-at <object>] [--column[=<options>] | --no-column]
[--create-reflog] [--sort=<key>] [--format=<format>]
[--[no-]merged [<commit>]] [<pattern>...]
'git tag' -v [--format=<format>] <tagname>...
'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>]
[--column[=<options>] | --no-column] [--create-reflog] [--sort=<key>]
[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]
'git tag' -v <tagname>...
DESCRIPTION
-----------
@ -83,24 +82,18 @@ OPTIONS
-n<num>::
<num> specifies how many lines from the annotation, if any,
are printed when using -l. Implies `--list`.
+
The default is not to print any annotation lines.
If no number is given to `-n`, only the first line is printed.
If the tag is not annotated, the commit message is displayed instead.
are printed when using -l.
The default is not to print any annotation lines.
If no number is given to `-n`, only the first line is printed.
If the tag is not annotated, the commit message is displayed instead.
-l::
--list::
List tags. With optional `<pattern>...`, e.g. `git tag --list
'v-*'`, list only the tags that match the pattern(s).
+
Running "git tag" without arguments also lists all tags. The pattern
is a shell wildcard (i.e., matched using fnmatch(3)). Multiple
patterns may be given; if any of them matches, the tag is shown.
+
This option is implicitly supplied if any other list-like option such
as `--contains` is provided. See the documentation for each of those
options for details.
-l <pattern>::
--list <pattern>::
List tags with names that match the given pattern (or all if no
pattern is given). Running "git tag" without arguments also
lists all tags. The pattern is a shell wildcard (i.e., matched
using fnmatch(3)). Multiple patterns may be given; if any of
them matches, the tag is shown.
--sort=<key>::
Sort based on the key given. Prefix `-` to sort in
@ -108,17 +101,13 @@ options for details.
multiple times, in which case the last key becomes the primary
key. Also supports "version:refname" or "v:refname" (tag
names are treated as versions). The "version:refname" sort
order can also be affected by the "versionsort.suffix"
configuration variable.
order can also be affected by the
"versionsort.prereleaseSuffix" configuration variable.
The keys supported are the same as those in `git for-each-ref`.
Sort order defaults to the value configured for the `tag.sort`
variable if it exists, or lexicographic order otherwise. See
linkgit:git-config[1].
-i::
--ignore-case::
Sorting and filtering tags are case insensitive.
--column[=<options>]::
--no-column::
Display tag listing in columns. See configuration variable
@ -129,23 +118,10 @@ This option is only applicable when listing tags without annotation lines.
--contains [<commit>]::
Only list tags which contain the specified commit (HEAD if not
specified). Implies `--list`.
--no-contains [<commit>]::
Only list tags which don't contain the specified commit (HEAD if
not specified). Implies `--list`.
--merged [<commit>]::
Only list tags whose commits are reachable from the specified
commit (`HEAD` if not specified), incompatible with `--no-merged`.
--no-merged [<commit>]::
Only list tags whose commits are not reachable from the specified
commit (`HEAD` if not specified), incompatible with `--merged`.
specified).
--points-at <object>::
Only list tags of the given object (HEAD if not
specified). Implies `--list`.
Only list tags of the given object.
-m <msg>::
--message=<msg>::
@ -170,11 +146,7 @@ This option is only applicable when listing tags without annotation lines.
'strip' removes both whitespace and commentary.
--create-reflog::
Create a reflog for the tag. To globally enable reflogs for tags, see
`core.logAllRefUpdates` in linkgit:git-config[1].
The negated form `--no-create-reflog` only overrides an earlier
`--create-reflog`, but currently does not negate the setting of
`core.logallrefupdates`.
Create a reflog for the tag.
<tagname>::
The name of the tag to create, delete, or describe.
@ -193,6 +165,11 @@ This option is only applicable when listing tags without annotation lines.
that of linkgit:git-for-each-ref[1]. When unspecified,
defaults to `%(refname:strip=2)`.
--[no-]merged [<commit>]::
Only list tags whose tips are reachable, or not reachable
if `--no-merged` is used, from the specified commit (`HEAD`
if not specified).
CONFIGURATION
-------------
By default, 'git tag' in sign-with-default mode (-s) will use your

View File

@ -163,16 +163,14 @@ may not support it yet.
--split-index::
--no-split-index::
Enable or disable split index mode. If split-index mode is
already enabled and `--split-index` is given again, all
changes in $GIT_DIR/index are pushed back to the shared index
file.
+
These options take effect whatever the value of the `core.splitIndex`
configuration variable (see linkgit:git-config[1]). But a warning is
emitted when the change goes against the configured value, as the
configured value will take effect next time the index is read and this
will remove the intended effect of the option.
Enable or disable split index mode. If enabled, the index is
split into two files, $GIT_DIR/index and $GIT_DIR/sharedindex.<SHA-1>.
Changes are accumulated in $GIT_DIR/index while the shared
index file contains all index entries stays unchanged. If
split-index mode is already enabled and `--split-index` is
given again, all changes in $GIT_DIR/index are pushed back to
the shared index file. This mode is designed for very large
indexes that take a significant amount of time to read or write.
--untracked-cache::
--no-untracked-cache::
@ -390,31 +388,6 @@ Although this bit looks similar to assume-unchanged bit, its goal is
different from assume-unchanged bit's. Skip-worktree also takes
precedence over assume-unchanged bit when both are set.
Split index
-----------
This mode is designed for repositories with very large indexes, and
aims at reducing the time it takes to repeatedly write these indexes.
In this mode, the index is split into two files, $GIT_DIR/index and
$GIT_DIR/sharedindex.<SHA-1>. Changes are accumulated in
$GIT_DIR/index, the split index, while the shared index file contains
all index entries and stays unchanged.
All changes in the split index are pushed back to the shared index
file when the number of entries in the split index reaches a level
specified by the splitIndex.maxPercentChange config variable (see
linkgit:git-config[1]).
Each time a new shared index file is created, the old shared index
files are deleted if their modification time is older than what is
specified by the splitIndex.sharedIndexExpire config variable (see
linkgit:git-config[1]).
To avoid deleting a shared index file that is still used, its
modification time is updated to the current time everytime a new split
index based on the shared index file is either created or read from.
Untracked cache
---------------

View File

@ -8,7 +8,7 @@ git-verify-tag - Check the GPG signature of tags
SYNOPSIS
--------
[verse]
'git verify-tag' [--format=<format>] <tag>...
'git verify-tag' <tag>...
DESCRIPTION
-----------

View File

@ -52,7 +52,7 @@ is linked to the current repository, sharing everything except working
directory specific files such as HEAD, index, etc. `-` may also be
specified as `<branch>`; it is synonymous with `@{-1}`.
+
If `<branch>` is omitted and neither `-b` nor `-B` nor `--detach` used,
If `<branch>` is omitted and neither `-b` nor `-B` nor `--detached` used,
then, as a convenience, a new branch based at HEAD is created automatically,
as if `-b $(basename <path>)` was specified.

View File

@ -44,54 +44,54 @@ unreleased) version of Git, that is available from the 'master'
branch of the `git.git` repository.
Documentation for older releases are available here:
* link:v2.12.2/git.html[documentation for release 2.12.2]
* release notes for
link:RelNotes/2.12.2.txt[2.12.2].
link:RelNotes/2.12.1.txt[2.12.1].
link:RelNotes/2.12.0.txt[2.12].
* link:v2.11.1/git.html[documentation for release 2.11.1]
* link:v2.11.2/git.html[documentation for release 2.11.2]
* release notes for
link:RelNotes/2.11.2.txt[2.11.2],
link:RelNotes/2.11.1.txt[2.11.1],
link:RelNotes/2.11.0.txt[2.11].
* link:v2.10.2/git.html[documentation for release 2.10.2]
* link:v2.10.3/git.html[documentation for release 2.10.3]
* release notes for
link:RelNotes/2.10.3.txt[2.10.3],
link:RelNotes/2.10.2.txt[2.10.2],
link:RelNotes/2.10.1.txt[2.10.1],
link:RelNotes/2.10.0.txt[2.10].
* link:v2.9.3/git.html[documentation for release 2.9.3]
* link:v2.9.4/git.html[documentation for release 2.9.4]
* release notes for
link:RelNotes/2.9.4.txt[2.9.4],
link:RelNotes/2.9.3.txt[2.9.3],
link:RelNotes/2.9.2.txt[2.9.2],
link:RelNotes/2.9.1.txt[2.9.1],
link:RelNotes/2.9.0.txt[2.9].
* link:v2.8.4/git.html[documentation for release 2.8.4]
* link:v2.8.5/git.html[documentation for release 2.8.5]
* release notes for
link:RelNotes/2.8.5.txt[2.8.5],
link:RelNotes/2.8.4.txt[2.8.4],
link:RelNotes/2.8.3.txt[2.8.3],
link:RelNotes/2.8.2.txt[2.8.2],
link:RelNotes/2.8.1.txt[2.8.1],
link:RelNotes/2.8.0.txt[2.8].
* link:v2.7.3/git.html[documentation for release 2.7.3]
* link:v2.7.5/git.html[documentation for release 2.7.5]
* release notes for
link:RelNotes/2.7.5.txt[2.7.5],
link:RelNotes/2.7.4.txt[2.7.4],
link:RelNotes/2.7.3.txt[2.7.3],
link:RelNotes/2.7.2.txt[2.7.2],
link:RelNotes/2.7.1.txt[2.7.1],
link:RelNotes/2.7.0.txt[2.7].
* link:v2.6.6/git.html[documentation for release 2.6.6]
* link:v2.6.7/git.html[documentation for release 2.6.7]
* release notes for
link:RelNotes/2.6.7.txt[2.6.7],
link:RelNotes/2.6.6.txt[2.6.6],
link:RelNotes/2.6.5.txt[2.6.5],
link:RelNotes/2.6.4.txt[2.6.4],
@ -100,9 +100,10 @@ Documentation for older releases are available here:
link:RelNotes/2.6.1.txt[2.6.1],
link:RelNotes/2.6.0.txt[2.6].
* link:v2.5.5/git.html[documentation for release 2.5.5]
* link:v2.5.6/git.html[documentation for release 2.5.6]
* release notes for
link:RelNotes/2.5.6.txt[2.5.6],
link:RelNotes/2.5.5.txt[2.5.5],
link:RelNotes/2.5.4.txt[2.5.4],
link:RelNotes/2.5.3.txt[2.5.3],
@ -110,9 +111,10 @@ Documentation for older releases are available here:
link:RelNotes/2.5.1.txt[2.5.1],
link:RelNotes/2.5.0.txt[2.5].
* link:v2.4.11/git.html[documentation for release 2.4.11]
* link:v2.4.12/git.html[documentation for release 2.4.12]
* release notes for
link:RelNotes/2.4.12.txt[2.4.12],
link:RelNotes/2.4.11.txt[2.4.11],
link:RelNotes/2.4.10.txt[2.4.10],
link:RelNotes/2.4.9.txt[2.4.9],
@ -1027,12 +1029,6 @@ Usually it is easier to configure any desired options through your
personal `.ssh/config` file. Please consult your ssh documentation
for further details.
`GIT_SSH_VARIANT`::
If this environment variable is set, it overrides Git's autodetection
whether `GIT_SSH`/`GIT_SSH_COMMAND`/`core.sshCommand` refer to OpenSSH,
plink or tortoiseplink. This variable overrides the config setting
`ssh.variant` that serves the same purpose.
`GIT_ASKPASS`::
If this environment variable is set, then Git commands which need to
acquire passwords or passphrases (e.g. for HTTP or IMAP authentication)
@ -1175,20 +1171,30 @@ of clones and fetches.
cloning a repository to make a backup).
`GIT_ALLOW_PROTOCOL`::
If set to a colon-separated list of protocols, behave as if
`protocol.allow` is set to `never`, and each of the listed
protocols has `protocol.<name>.allow` set to `always`
(overriding any existing configuration). In other words, any
protocol not mentioned will be disallowed (i.e., this is a
whitelist, not a blacklist). See the description of
`protocol.allow` in linkgit:git-config[1] for more details.
If set, provide a colon-separated list of protocols which are
allowed to be used with fetch/push/clone. This is useful to
restrict recursive submodule initialization from an untrusted
repository. Any protocol not mentioned will be disallowed (i.e.,
this is a whitelist, not a blacklist). If the variable is not
set at all, all protocols are enabled. The protocol names
currently used by git are:
- `file`: any local file-based path (including `file://` URLs,
or local paths)
- `git`: the anonymous git protocol over a direct TCP
connection (or proxy, if configured)
- `ssh`: git over ssh (including `host:path` syntax,
`ssh://`, etc).
- `http`: git over http, both "smart http" and "dumb http".
Note that this does _not_ include `https`; if you want both,
you should specify both as `http:https`.
- any external helpers are named by their protocol (e.g., use
`hg` to allow the `git-remote-hg` helper)
`GIT_PROTOCOL_FROM_USER`::
Set to 0 to prevent protocols used by fetch/push/clone which are
configured to the `user` state. This is useful to restrict recursive
submodule initialization from an untrusted repository or for programs
which feed potentially-untrusted URLS to git commands. See
linkgit:git-config[1] for more details.
Discussion[[Discussion]]
------------------------

View File

@ -21,11 +21,9 @@ Each line in `gitattributes` file is of form:
pattern attr1 attr2 ...
That is, a pattern followed by an attributes list,
separated by whitespaces. Leading and trailing whitespaces are
ignored. Lines that begin with '#' are ignored. Patterns
that begin with a double quote are quoted in C style.
When the pattern matches the path in question, the attributes
listed on the line are given to the path.
separated by whitespaces. When the pattern matches the
path in question, the attributes listed on the line are given to
the path.
Each attribute can be in one of these states for a given path:
@ -88,7 +86,7 @@ is either not set or empty, $HOME/.config/git/attributes is used instead.
Attributes for all users on a system should be placed in the
`$(prefix)/etc/gitattributes` file.
Sometimes you would need to override a setting of an attribute
Sometimes you would need to override an setting of an attribute
for a path to `Unspecified` state. This can be done by listing
the name of the attribute prefixed with an exclamation point `!`.

View File

@ -1658,4 +1658,4 @@ link:user-manual.html[The Git User's Manual]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -203,4 +203,4 @@ link:user-manual.html[The Git User's Manual]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -84,8 +84,8 @@ format sections of the manual for 'git diff-{asterisk}' commands) or
diff-patch format.
diffcore-break: For Splitting Up Complete Rewrites
--------------------------------------------------
diffcore-break: For Splitting Up "Complete Rewrites"
----------------------------------------------------
The second transformation in the chain is diffcore-break, and is
controlled by the -B option to the 'git diff-{asterisk}' commands. This is
@ -119,7 +119,7 @@ the original is used), and can be customized by giving a number
after "-B" option (e.g. "-B75" to tell it to use 75%).
diffcore-rename: For Detecting Renames and Copies
diffcore-rename: For Detection Renames and Copies
-------------------------------------------------
This transformation is used to detect renames and copies, and is
@ -177,8 +177,8 @@ the expense of making it slower. Without `--find-copies-harder`,
copied happened to have been modified in the same changeset.
diffcore-merge-broken: For Putting Complete Rewrites Back Together
------------------------------------------------------------------
diffcore-merge-broken: For Putting "Complete Rewrites" Back Together
--------------------------------------------------------------------
This transformation is used to merge filepairs broken by
diffcore-break, and not transformed into rename/copy by
@ -288,4 +288,4 @@ link:user-manual.html[The Git User's Manual]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -307,16 +307,9 @@ master or exposed as a part of a stable branch.
<9> backport a critical fix.
<10> create a signed tag.
<11> make sure master was not accidentally rewound beyond that
already pushed out.
<12> In the output from `git show-branch`, `master` should have
everything `ko/master` has, and `next` should have
everything `ko/next` has, etc.
<13> push out the bleeding edge, together with new tags that point
into the pushed history.
In this example, the `ko` shorthand points at the Git maintainer's
already pushed out. `ko` shorthand points at the Git maintainer's
repository at kernel.org, and looks like this:
+
------------
(in .git/config)
[remote "ko"]
@ -327,6 +320,12 @@ repository at kernel.org, and looks like this:
push = +refs/heads/pu
push = refs/heads/maint
------------
+
<12> In the output from `git show-branch`, `master` should have
everything `ko/master` has, and `next` should have
everything `ko/next` has, etc.
<13> push out the bleeding edge, together with new tags that point
into the pushed history.
Repository Administration[[ADMINISTRATION]]

View File

@ -24,4 +24,4 @@ link:user-manual.html[The Git User's Manual]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -178,21 +178,19 @@ used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
History
-------
Gitk was the first graphical repository browser. It's written in
tcl/tk.
tcl/tk and started off in a separate repository but was later merged
into the main Git repository.
'gitk' is actually maintained as an independent project, but stable
versions are distributed as part of the Git suite for the convenience
of end users.
gitk-git/ comes from Paul Mackerras's gitk project:
git://ozlabs.org/~paulus/gitk
SEE ALSO
--------
'qgit(1)'::
A repository browser written in C++ using Qt.
'gitview(1)'::
A repository browser written in Python using Gtk. It's based on
'bzrk(1)' and distributed in the contrib area of the Git repository.
'tig(1)'::
A minimal repository browser and Git tool output highlighter written
in C using Ncurses.

View File

@ -452,20 +452,16 @@ set by Git if the remote helper has the 'option' capability.
Request the helper to perform a force update. Defaults to
'false'.
'option cloning' {'true'|'false'}::
'option cloning {'true'|'false'}::
Notify the helper this is a clone request (i.e. the current
repository is guaranteed empty).
'option update-shallow' {'true'|'false'}::
'option update-shallow {'true'|'false'}::
Allow to extend .git/shallow if the new refs require it.
'option pushcert' {'true'|'false'}::
'option pushcert {'true'|'false'}::
GPG sign pushes.
'option push-option <string>::
Transmit <string> as a push option. As the a push option
must not contain LF or NUL characters, the string is not encoded.
SEE ALSO
--------
linkgit:git-remote[1]

View File

@ -289,4 +289,4 @@ link:user-manual.html[The Git User's Manual]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -433,4 +433,4 @@ link:user-manual.html[The Git User's Manual]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -674,4 +674,4 @@ link:user-manual.html[The Git User's Manual]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -477,4 +477,4 @@ linkgit:git-am[1]
GIT
---
Part of the linkgit:git[1] suite
Part of the linkgit:git[1] suite.

View File

@ -384,33 +384,10 @@ full pathname may have special meaning:
+
Glob magic is incompatible with literal magic.
attr;;
After `attr:` comes a space separated list of "attribute
requirements", all of which must be met in order for the
path to be considered a match; this is in addition to the
usual non-magic pathspec pattern matching.
See linkgit:gitattributes[5].
+
Each of the attribute requirements for the path takes one of
these forms:
- "`ATTR`" requires that the attribute `ATTR` be set.
- "`-ATTR`" requires that the attribute `ATTR` be unset.
- "`ATTR=VALUE`" requires that the attribute `ATTR` be
set to the string `VALUE`.
- "`!ATTR`" requires that the attribute `ATTR` be
unspecified.
+
exclude;;
After a path matches any non-exclude pathspec, it will be run
through all exclude pathspec (magic signature: `!` or its
synonym `^`). If it matches, the path is ignored. When there
is no non-exclude pathspec, the exclusion is applied to the
result set as if invoked without any pathspec.
through all exclude pathspec (magic signature: `!`). If it
matches, the path is ignored.
--
[[def_parent]]parent::

View File

@ -199,8 +199,6 @@ endif::git-rev-list[]
than given and there are spaces on its left, use those spaces
- '%><(<N>)', '%><|(<N>)': similar to '% <(<N>)', '%<|(<N>)'
respectively, but padding both sides (i.e. the text is centered)
-%(trailers): display the trailers of the body as interpreted by
linkgit:git-interpret-trailers[1]
NOTE: Some placeholders may depend on other options given to the
revision traversal engine. For example, the `%g*` reflog options will

View File

@ -133,8 +133,8 @@ parents) and `--max-parents=-1` (negative numbers denote no upper limit).
for all following revision specifiers, up to the next `--not`.
--all::
Pretend as if all the refs in `refs/`, along with `HEAD`, are
listed on the command line as '<commit>'.
Pretend as if all the refs in `refs/` are listed on the
command line as '<commit>'.
--branches[=<pattern>]::
Pretend as if all the refs in `refs/heads` are listed

View File

@ -96,8 +96,7 @@ some output processing may assume ref names in UTF-8.
refers to the branch that the branch specified by branchname is set to build on
top of (configured with `branch.<name>.remote` and
`branch.<name>.merge`). A missing branchname defaults to the
current one. These suffixes are also accepted when spelled in uppercase, and
they mean the same thing no matter the case.
current one.
'<branchname>@\{push\}', e.g. 'master@\{push\}', '@\{push\}'::
The suffix '@\{push}' reports the branch "where we would push to" if
@ -123,9 +122,6 @@ refs/remotes/myfork/mybranch
Note in the example that we set up a triangular workflow, where we pull
from one location and push to another. In a non-triangular workflow,
'@\{push}' is the same as '@\{upstream}', and there is no need for it.
+
This suffix is also accepted when spelled in uppercase, and means the same
thing no matter the case.
'<rev>{caret}', e.g. 'HEAD{caret}, v1.5.1{caret}0'::
A suffix '{caret}' to a revision parameter means the first parent of
@ -295,7 +291,7 @@ The 'r1{caret}@' notation means all parents of 'r1'.
The 'r1{caret}!' notation includes commit 'r1' but excludes all of its parents.
By itself, this notation denotes the single commit 'r1'.
The '<rev>{caret}-<n>' notation includes '<rev>' but excludes the <n>th
The '<rev>{caret}-{<n>}' notation includes '<rev>' but excludes the <n>th
parent (i.e. a shorthand for '<rev>{caret}<n>..<rev>'), with '<n>' = 1 if
not given. This is typically useful for merge commits where you
can just pass '<commit>{caret}-' to get all the commits in the branch
@ -337,7 +333,7 @@ Revision Range Summary
as giving commit '<rev>' and then all its parents prefixed with
'{caret}' to exclude them (and their ancestors).
'<rev>{caret}-<n>', e.g. 'HEAD{caret}-, HEAD{caret}-2'::
'<rev>{caret}-{<n>}', e.g. 'HEAD{caret}-, HEAD{caret}-2'::
Equivalent to '<rev>{caret}<n>..<rev>', with '<n>' = 1 if not
given.

View File

@ -16,15 +16,10 @@ Data Structure
of no interest to the calling programs. The name of the
attribute can be retrieved by calling `git_attr_name()`.
`struct attr_check_item`::
`struct git_attr_check`::
This structure represents one attribute and its value.
`struct attr_check`::
This structure represents a collection of `attr_check_item`.
It is passed to `git_check_attr()` function, specifying the
attributes to check, and receives their values.
This structure represents a set of attributes to check in a call
to `git_check_attr()` function, and receives the results.
Attribute Values
@ -32,7 +27,7 @@ Attribute Values
An attribute for a path can be in one of four states: Set, Unset,
Unspecified or set to a string, and `.value` member of `struct
attr_check_item` records it. There are three macros to check these:
git_attr_check` records it. There are three macros to check these:
`ATTR_TRUE()`::
@ -53,51 +48,49 @@ value of the attribute for the path.
Querying Specific Attributes
----------------------------
* Prepare `struct attr_check` using attr_check_initl()
function, enumerating the names of attributes whose values you are
interested in, terminated with a NULL pointer. Alternatively, an
empty `struct attr_check` can be prepared by calling
`attr_check_alloc()` function and then attributes you want to
ask about can be added to it with `attr_check_append()`
function.
* Prepare an array of `struct git_attr_check` to define the list of
attributes you would want to check. To populate this array, you would
need to define necessary attributes by calling `git_attr()` function.
* Call `git_check_attr()` to check the attributes for the path.
* Inspect `attr_check` structure to see how each of the
attribute in the array is defined for the path.
* Inspect `git_attr_check` structure to see how each of the attribute in
the array is defined for the path.
Example
-------
To see how attributes "crlf" and "ident" are set for different paths.
To see how attributes "crlf" and "indent" are set for different paths.
. Prepare a `struct attr_check` with two elements (because
we are checking two attributes):
. Prepare an array of `struct git_attr_check` with two elements (because
we are checking two attributes). Initialize their `attr` member with
pointers to `struct git_attr` obtained by calling `git_attr()`:
------------
static struct attr_check *check;
static struct git_attr_check check[2];
static void setup_check(void)
{
if (check)
if (check[0].attr)
return; /* already done */
check = attr_check_initl("crlf", "ident", NULL);
check[0].attr = git_attr("crlf");
check[1].attr = git_attr("ident");
}
------------
. Call `git_check_attr()` with the prepared `struct attr_check`:
. Call `git_check_attr()` with the prepared array of `struct git_attr_check`:
------------
const char *path;
setup_check();
git_check_attr(path, check);
git_check_attr(path, ARRAY_SIZE(check), check);
------------
. Act on `.value` member of the result, left in `check->items[]`:
. Act on `.value` member of the result, left in `check[]`:
------------
const char *value = check->items[0].value;
const char *value = check[0].value;
if (ATTR_TRUE(value)) {
The attribute is Set, by listing only the name of the
@ -116,39 +109,20 @@ static void setup_check(void)
}
------------
To see how attributes in argv[] are set for different paths, only
the first step in the above would be different.
------------
static struct attr_check *check;
static void setup_check(const char **argv)
{
check = attr_check_alloc();
while (*argv) {
struct git_attr *attr = git_attr(*argv);
attr_check_append(check, attr);
argv++;
}
}
------------
Querying All Attributes
-----------------------
To get the values of all attributes associated with a file:
* Prepare an empty `attr_check` structure by calling
`attr_check_alloc()`.
* Call `git_all_attrs()`, which returns an array of `git_attr_check`
structures.
* Call `git_all_attrs()`, which populates the `attr_check`
with the attributes attached to the path.
* Iterate over the `git_attr_check` array to examine the attribute
names and values. The name of the attribute described by a
`git_attr_check` object can be retrieved via
`git_attr_name(check[i].attr)`. (Please note that no items will be
returned for unset attributes, so `ATTR_UNSET()` will return false
for all returned `git_array_check` objects.)
* Iterate over the `attr_check.items[]` array to examine
the attribute names and values. The name of the attribute
described by a `attr_check.items[]` object can be retrieved via
`git_attr_name(check->items[i].attr)`. (Please note that no items
will be returned for unset attributes, so `ATTR_UNSET()` will return
false for all returned `attr_check.items[]` objects.)
* Free the `attr_check` struct by calling `attr_check_free()`.
* Free the `git_array_check` array.

View File

@ -21,9 +21,6 @@ that the hashmap is initialized. It may also be useful for statistical purposes
`cmpfn` stores the comparison function specified in `hashmap_init()`. In
advanced scenarios, it may be useful to change this, e.g. to switch between
case-sensitive and case-insensitive lookup.
+
When `disallow_rehash` is set, automatic rehashes are prevented during inserts
and deletes.
`struct hashmap_entry`::
@ -60,7 +57,6 @@ Functions
`unsigned int strihash(const char *buf)`::
`unsigned int memhash(const void *buf, size_t len)`::
`unsigned int memihash(const void *buf, size_t len)`::
`unsigned int memihash_cont(unsigned int hash_seed, const void *buf, size_t len)`::
Ready-to-use hash functions for strings, using the FNV-1 algorithm (see
http://www.isthe.com/chongo/tech/comp/fnv).
@ -69,9 +65,6 @@ Functions
`memihash` operate on arbitrary-length memory.
+
`strihash` and `memihash` are case insensitive versions.
+
`memihash_cont` is a variant of `memihash` that allows a computation to be
continued with another chunk of data.
`unsigned int sha1hash(const unsigned char *sha1)`::
@ -191,28 +184,11 @@ passed to `hashmap_cmp_fn` to decide whether the entry matches the key.
+
Returns the removed entry, or NULL if not found.
`void hashmap_disallow_rehash(struct hashmap *map, unsigned value)`::
Disallow/allow automatic rehashing of the hashmap during inserts
and deletes.
+
This is useful if the caller knows that the hashmap will be accessed
by multiple threads.
+
The caller is still responsible for any necessary locking; this simply
prevents unexpected rehashing. The caller is also responsible for properly
sizing the initial hashmap to ensure good performance.
+
A call to allow rehashing does not force a rehash; that might happen
with the next insert or delete.
`void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter)`::
`void *hashmap_iter_next(struct hashmap_iter *iter)`::
`void *hashmap_iter_first(struct hashmap *map, struct hashmap_iter *iter)`::
Used to iterate over all entries of a hashmap. Note that it is
not safe to add or remove entries to the hashmap while
iterating.
Used to iterate over all entries of a hashmap.
+
`hashmap_iter_init` initializes a `hashmap_iter` structure.
+

View File

@ -168,11 +168,6 @@ There are some macros to easily define options:
Introduce an option with string argument.
The string argument is put into `str_var`.
`OPT_STRING_LIST(short, long, &struct string_list, arg_str, description)`::
Introduce an option with string argument.
The string argument is stored as an element in `string_list`.
Use of `--no-option` will clear the list of preceding values.
`OPT_INTEGER(short, long, &int_var, description)`::
Introduce an option with integer argument.
The integer is put into `int_var`.

View File

@ -27,6 +27,8 @@ parse_pathspec(). This function takes several arguments:
- prefix and args come from cmd_* functions
get_pathspec() is obsolete and should never be used in new code.
parse_pathspec() helps catch unsupported features and reject them
politely. At a lower level, different pathspec-related functions may
not support the same set of features. Such pathspec-sensitive

View File

@ -1,7 +1,7 @@
oid-array API
sha1-array API
==============
The oid-array API provides storage and manipulation of sets of object
The sha1-array API provides storage and manipulation of sets of SHA-1
identifiers. The emphasis is on storage and processing efficiency,
making them suitable for large lists. Note that the ordering of items is
not preserved over some operations.
@ -9,10 +9,10 @@ not preserved over some operations.
Data Structures
---------------
`struct oid_array`::
`struct sha1_array`::
A single array of object IDs. This should be initialized by
assignment from `OID_ARRAY_INIT`. The `oid` member contains
A single array of SHA-1 hashes. This should be initialized by
assignment from `SHA1_ARRAY_INIT`. The `sha1` member contains
the actual data. The `nr` member contains the number of items in
the set. The `alloc` and `sorted` members are used internally,
and should not be needed by API callers.
@ -20,22 +20,22 @@ Data Structures
Functions
---------
`oid_array_append`::
Add an item to the set. The object ID will be placed at the end of
`sha1_array_append`::
Add an item to the set. The sha1 will be placed at the end of
the array (but note that some operations below may lose this
ordering).
`oid_array_lookup`::
Perform a binary search of the array for a specific object ID.
`sha1_array_lookup`::
Perform a binary search of the array for a specific sha1.
If found, returns the offset (in number of elements) of the
object ID. If not found, returns a negative integer. If the array
is not sorted, this function has the side effect of sorting it.
sha1. If not found, returns a negative integer. If the array is
not sorted, this function has the side effect of sorting it.
`oid_array_clear`::
`sha1_array_clear`::
Free all memory associated with the array and return it to the
initial, empty state.
`oid_array_for_each_unique`::
`sha1_array_for_each_unique`::
Efficiently iterate over each unique element of the list,
executing the callback function for each one. If the array is
not sorted, this function has the side effect of sorting it. If
@ -47,25 +47,25 @@ Examples
--------
-----------------------------------------
int print_callback(const struct object_id *oid,
int print_callback(const unsigned char sha1[20],
void *data)
{
printf("%s\n", oid_to_hex(oid));
printf("%s\n", sha1_to_hex(sha1));
return 0; /* always continue */
}
void some_func(void)
{
struct sha1_array hashes = OID_ARRAY_INIT;
struct object_id oid;
struct sha1_array hashes = SHA1_ARRAY_INIT;
unsigned char sha1[20];
/* Read objects into our set */
while (read_object_from_stdin(oid.hash))
oid_array_append(&hashes, &oid);
while (read_object_from_stdin(sha1))
sha1_array_append(&hashes, sha1);
/* Check if some objects are in our set */
while (read_object_from_stdin(oid.hash)) {
if (oid_array_lookup(&hashes, &oid) >= 0)
while (read_object_from_stdin(sha1)) {
if (sha1_array_lookup(&hashes, sha1) >= 0)
printf("it's in there!\n");
/*
@ -75,6 +75,6 @@ void some_func(void)
* Instead, this will sort once and then skip duplicates
* in linear time.
*/
oid_array_for_each_unique(&hashes, print_callback, NULL);
sha1_array_for_each_unique(&hashes, print_callback, NULL);
}
-----------------------------------------

View File

@ -47,20 +47,16 @@ Functions
Can be passed to the config parsing infrastructure to parse
local (worktree) submodule configurations.
`const struct submodule *submodule_from_path(const unsigned char *treeish_name, const char *path)`::
`const struct submodule *submodule_from_path(const unsigned char *commit_sha1, const char *path)`::
Given a tree-ish in the superproject and a path, return the
submodule that is bound at the path in the named tree.
Lookup values for one submodule by its commit_sha1 and path.
`const struct submodule *submodule_from_name(const unsigned char *treeish_name, const char *name)`::
`const struct submodule *submodule_from_name(const unsigned char *commit_sha1, const char *name)`::
The same as above but lookup by name.
Whenever a submodule configuration is parsed in `parse_submodule_config_option`
via e.g. `gitmodules_config()`, it will overwrite the null_sha1 entry.
So in the normal case, when HEAD:.gitmodules is parsed first and then overlayed
with the repository configuration, the null_sha1 entry contains the local
configuration of a submodule (e.g. consolidated values from local git
If given the null_sha1 as commit_sha1 the local configuration of a
submodule will be returned (e.g. consolidated values from local git
configuration and the .gitmodules file in the worktree).
For an example usage see test-submodule-config.c.

View File

@ -1,26 +0,0 @@
<!-- texi.xsl:
convert refsection elements into refsect elements that docbook2texi can
understand -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml"
encoding="UTF-8"
doctype-public="-//OASIS//DTD DocBook XML V4.5//EN"
doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" />
<xsl:template match="//refsection">
<xsl:variable name="element">refsect<xsl:value-of select="count(ancestor-or-self::refsection)" /></xsl:variable>
<xsl:element name="{$element}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<!-- Copy all other nodes through. -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

View File

@ -4395,10 +4395,6 @@ itself!
Git Glossary
============
[[git-explained]]
Git explained
-------------
include::glossary-content.txt[]
[[git-quick-start]]
@ -4640,10 +4636,6 @@ $ git gc
Appendix B: Notes and todo list for this manual
===============================================
[[todo-list]]
Todo list
---------
This is a work in progress.
The basic requirements:

View File

@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
DEF_VER=v2.13.0-rc0
DEF_VER=v2.11.3
LF='
'
@ -12,7 +12,7 @@ if test -f version
then
VN=$(cat version) || VN="$DEF_VER"
elif test -d ${GIT_DIR:-.git} -o -f .git &&
VN=$(git describe --match "v[0-9]*" HEAD 2>/dev/null) &&
VN=$(git describe --match "v[0-9]*" --abbrev=7 HEAD 2>/dev/null) &&
case "$VN" in
*$LF*) (exit 1) ;;
v[0-9]*)

View File

@ -102,6 +102,8 @@ all::
#
# Define MKDIR_WO_TRAILING_SLASH if your mkdir() can't deal with trailing slash.
#
# Define NO_MKSTEMPS if you don't have mkstemps in the C library.
#
# Define NO_GECOS_IN_PWENT if you don't have pw_gecos in struct passwd
# in the C library.
#
@ -140,13 +142,6 @@ all::
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
#
# Define DC_SHA1 to unconditionally enable the collision-detecting sha1
# algorithm. This is slower, but may detect attempted collision attacks.
# Takes priority over other *_SHA1 knobs.
#
# Define OPENSSL_SHA1 environment variable when running make to link
# with the SHA1 routine from openssl library.
#
# Define SHA1_MAX_BLOCK_SIZE to limit the amount of data that will be hashed
# in one call to the platform's SHA1_Update(). e.g. APPLE_COMMON_CRYPTO
# wants 'SHA1_MAX_BLOCK_SIZE=1024L*1024L*1024L' defined.
@ -255,12 +250,6 @@ all::
# apostrophes to be ASCII so that cut&pasting examples to the shell
# will work.
#
# Define USE_ASCIIDOCTOR to use Asciidoctor instead of AsciiDoc to build the
# documentation.
#
# Define ASCIIDOCTOR_EXTENSIONS_LAB to point to the location of the Asciidoctor
# Extensions Lab if you have it available.
#
# Define PERL_PATH to the path of your Perl binary (usually /usr/bin/perl).
#
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
@ -290,9 +279,6 @@ all::
# is a simplified version of the merge sort used in glibc. This is
# recommended if Git triggers O(n^2) behavior in your platform's qsort().
#
# Define HAVE_ISO_QSORT_S if your platform provides a qsort_s() that's
# compatible with the one described in C11 Annex K.
#
# Define UNRELIABLE_FSTAT if your system's fstat does not return the same
# information on a not yet closed file that lstat would return for the same
# file after it was closed.
@ -352,6 +338,11 @@ all::
#
# Define NATIVE_CRLF if your platform uses CRLF for line endings.
#
# Define XDL_FAST_HASH to use an alternative line-hashing method in
# the diff algorithm. It gives a nice speedup if your processor has
# fast unaligned word loads. Does NOT work on big-endian systems!
# Enabled by default on x86_64.
#
# Define GIT_USER_AGENT if you want to change how git identifies itself during
# network interactions. The default is "git/$(GIT_VERSION)".
#
@ -536,10 +527,12 @@ SCRIPT_LIB += git-sh-setup
SCRIPT_LIB += git-sh-i18n
SCRIPT_PERL += git-add--interactive.perl
SCRIPT_PERL += git-difftool.perl
SCRIPT_PERL += git-archimport.perl
SCRIPT_PERL += git-cvsexportcommit.perl
SCRIPT_PERL += git-cvsimport.perl
SCRIPT_PERL += git-cvsserver.perl
SCRIPT_PERL += git-relink.perl
SCRIPT_PERL += git-send-email.perl
SCRIPT_PERL += git-svn.perl
@ -621,17 +614,14 @@ TEST_PROGRAMS_NEED_X += test-fake-ssh
TEST_PROGRAMS_NEED_X += test-genrandom
TEST_PROGRAMS_NEED_X += test-hashmap
TEST_PROGRAMS_NEED_X += test-index-version
TEST_PROGRAMS_NEED_X += test-lazy-init-name-hash
TEST_PROGRAMS_NEED_X += test-line-buffer
TEST_PROGRAMS_NEED_X += test-match-trees
TEST_PROGRAMS_NEED_X += test-mergesort
TEST_PROGRAMS_NEED_X += test-mktemp
TEST_PROGRAMS_NEED_X += test-online-cpus
TEST_PROGRAMS_NEED_X += test-parse-options
TEST_PROGRAMS_NEED_X += test-path-utils
TEST_PROGRAMS_NEED_X += test-prio-queue
TEST_PROGRAMS_NEED_X += test-read-cache
TEST_PROGRAMS_NEED_X += test-ref-store
TEST_PROGRAMS_NEED_X += test-regex
TEST_PROGRAMS_NEED_X += test-revision-walking
TEST_PROGRAMS_NEED_X += test-run-command
@ -789,7 +779,6 @@ LIB_OBJS += notes-cache.o
LIB_OBJS += notes-merge.o
LIB_OBJS += notes-utils.o
LIB_OBJS += object.o
LIB_OBJS += oidset.o
LIB_OBJS += pack-bitmap.o
LIB_OBJS += pack-bitmap-write.o
LIB_OBJS += pack-check.o
@ -899,7 +888,6 @@ BUILTIN_OBJS += builtin/diff-files.o
BUILTIN_OBJS += builtin/diff-index.o
BUILTIN_OBJS += builtin/diff-tree.o
BUILTIN_OBJS += builtin/diff.o
BUILTIN_OBJS += builtin/difftool.o
BUILTIN_OBJS += builtin/fast-export.o
BUILTIN_OBJS += builtin/fetch-pack.o
BUILTIN_OBJS += builtin/fetch.o
@ -941,7 +929,6 @@ BUILTIN_OBJS += builtin/prune.o
BUILTIN_OBJS += builtin/pull.o
BUILTIN_OBJS += builtin/push.o
BUILTIN_OBJS += builtin/read-tree.o
BUILTIN_OBJS += builtin/rebase--helper.o
BUILTIN_OBJS += builtin/receive-pack.o
BUILTIN_OBJS += builtin/reflog.o
BUILTIN_OBJS += builtin/remote.o
@ -1290,6 +1277,9 @@ ifdef MKDIR_WO_TRAILING_SLASH
COMPAT_CFLAGS += -DMKDIR_WO_TRAILING_SLASH
COMPAT_OBJS += compat/mkdir.o
endif
ifdef NO_MKSTEMPS
COMPAT_CFLAGS += -DNO_MKSTEMPS
endif
ifdef NO_UNSETENV
COMPAT_CFLAGS += -DNO_UNSETENV
COMPAT_OBJS += compat/unsetenv.o
@ -1393,27 +1383,20 @@ ifdef APPLE_COMMON_CRYPTO
SHA1_MAX_BLOCK_SIZE = 1024L*1024L*1024L
endif
ifdef OPENSSL_SHA1
EXTLIBS += $(LIB_4_CRYPTO)
BASIC_CFLAGS += -DSHA1_OPENSSL
else
ifdef BLK_SHA1
SHA1_HEADER = "block-sha1/sha1.h"
LIB_OBJS += block-sha1/sha1.o
BASIC_CFLAGS += -DSHA1_BLK
else
ifdef PPC_SHA1
SHA1_HEADER = "ppc/sha1.h"
LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
BASIC_CFLAGS += -DSHA1_PPC
else
ifdef APPLE_COMMON_CRYPTO
COMPAT_CFLAGS += -DCOMMON_DIGEST_FOR_OPENSSL
BASIC_CFLAGS += -DSHA1_APPLE
SHA1_HEADER = <CommonCrypto/CommonDigest.h>
else
DC_SHA1 := YesPlease
LIB_OBJS += sha1dc/sha1.o
LIB_OBJS += sha1dc/ubc_check.o
BASIC_CFLAGS += -DSHA1_DC
endif
SHA1_HEADER = <openssl/sha.h>
EXTLIBS += $(LIB_4_CRYPTO)
endif
endif
endif
@ -1440,11 +1423,6 @@ ifdef INTERNAL_QSORT
COMPAT_CFLAGS += -DINTERNAL_QSORT
COMPAT_OBJS += compat/qsort.o
endif
ifdef HAVE_ISO_QSORT_S
COMPAT_CFLAGS += -DHAVE_ISO_QSORT_S
else
COMPAT_OBJS += compat/qsort_s.o
endif
ifdef RUNTIME_PREFIX
COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
@ -1507,6 +1485,10 @@ ifndef NO_MSGFMT_EXTENDED_OPTIONS
MSGFMT += --check --statistics
endif
ifneq (,$(XDL_FAST_HASH))
BASIC_CFLAGS += -DXDL_FAST_HASH
endif
ifdef GMTIME_UNRELIABLE_ERRORS
COMPAT_OBJS += compat/gmtime.o
BASIC_CFLAGS += -DGMTIME_UNRELIABLE_ERRORS
@ -1605,6 +1587,7 @@ endif
# Shell quote (do not use $(call) to accommodate ancient setups);
SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
@ -1637,7 +1620,8 @@ PERLLIB_EXTRA_SQ = $(subst ','\'',$(PERLLIB_EXTRA))
# from the dependency list, that would make each entry appear twice.
LIBS = $(filter-out %.o, $(GITLIBS)) $(EXTLIBS)
BASIC_CFLAGS += $(COMPAT_CFLAGS)
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
$(COMPAT_CFLAGS)
LIB_OBJS += $(COMPAT_OBJS)
# Quote for C
@ -1841,7 +1825,7 @@ $(SCRIPT_LIB) : % : %.sh GIT-SCRIPT-DEFINES
git.res: git.rc GIT-VERSION-FILE
$(QUIET_RC)$(RC) \
$(join -DMAJOR= -DMINOR=, $(wordlist 1,2,$(subst -, ,$(subst ., ,$(GIT_VERSION))))) \
-DGIT_VERSION="\\\"$(GIT_VERSION)\\\"" -i $< -o $@
-DGIT_VERSION="\\\"$(GIT_VERSION)\\\"" $< -o $@
# This makes sure we depend on the NO_PERL setting itself.
$(SCRIPT_PERL_GEN): GIT-BUILD-OPTIONS
@ -1853,7 +1837,6 @@ perl/perl.mak: perl/PM.stamp
perl/PM.stamp: FORCE
@$(FIND) perl -type f -name '*.pm' | sort >$@+ && \
$(PERL_PATH) -V >>$@+ && \
{ cmp $@+ $@ >/dev/null 2>/dev/null || mv $@+ $@; } && \
$(RM) $@+
@ -2072,7 +2055,7 @@ git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
$(IMAP_SEND_LDFLAGS) $(LIBS)
$(LIBS) $(IMAP_SEND_LDFLAGS)
git-http-fetch$X: http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
@ -2131,8 +2114,7 @@ XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
--keyword=_ --keyword=N_ --keyword="Q_:1,2"
XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
--keyword=gettextln --keyword=eval_gettextln
XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --language=Perl \
--keyword=__ --keyword=N__ --keyword="__n:1,2"
XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
LOCALIZED_SH = $(SCRIPT_SH)
LOCALIZED_SH += git-parse-remote.sh
@ -2241,7 +2223,6 @@ GIT-BUILD-OPTIONS: FORCE
@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@+
@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
@echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
@echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
ifdef TEST_OUTPUT_DIRECTORY
@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
endif
@ -2268,9 +2249,6 @@ endif
ifdef GIT_PERF_MAKE_OPTS
@echo GIT_PERF_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_MAKE_OPTS)))'\' >>$@+
endif
ifdef GIT_INTEROP_MAKE_OPTS
@echo GIT_INTEROP_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_INTEROP_MAKE_OPTS)))'\' >>$@+
endif
ifdef TEST_GIT_INDEX_VERSION
@echo TEST_GIT_INDEX_VERSION=\''$(subst ','\'',$(subst ','\'',$(TEST_GIT_INDEX_VERSION)))'\' >>$@+
endif
@ -2351,17 +2329,9 @@ check: common-cmds.h
C_SOURCES = $(patsubst %.o,%.c,$(C_OBJ))
%.cocci.patch: %.cocci $(C_SOURCES)
@echo ' ' SPATCH $<; \
ret=0; \
for f in $(C_SOURCES); do \
$(SPATCH) --sp-file $< $$f $(SPATCH_FLAGS) || \
{ ret=$$?; break; }; \
done >$@+ 2>$@.log; \
if test $$ret != 0; \
then \
cat $@.log; \
exit 1; \
fi; \
mv $@+ $@; \
$(SPATCH) --sp-file $< $$f $(SPATCH_FLAGS); \
done >$@ 2>$@.log; \
if test -s $@; \
then \
echo ' ' SPATCH result: $@; \

View File

@ -12,7 +12,7 @@ Torvalds with help of a group of hackers around the net.
Please read the file [INSTALL][] for installation instructions.
Many Git online resources are accessible from <https://git-scm.com/>
Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.
See [Documentation/gittutorial.txt][] to get started, then see
@ -33,8 +33,8 @@ requests, comments and patches to git@vger.kernel.org (read
[Documentation/SubmittingPatches][] for instructions on patch submission).
To subscribe to the list, send an email with just "subscribe git" in
the body to majordomo@vger.kernel.org. The mailing list archives are
available at <https://public-inbox.org/git/>,
<http://marc.info/?l=git> and other archival sites.
available at https://public-inbox.org/git,
http://marc.info/?l=git and other archival sites.
The maintainer frequently sends the "What's cooking" reports that
list the current status of various development topics to the mailing

View File

@ -1 +1 @@
Documentation/RelNotes/2.13.0.txt
Documentation/RelNotes/2.11.3.txt

Some files were not shown because too many files have changed in this diff Show More