Compare commits

..

No commits in common. "master" and "v2.50.0" have entirely different histories.

1099 changed files with 47181 additions and 65848 deletions

View File

@ -5,13 +5,11 @@ freebsd_task:
env:
GIT_PROVE_OPTS: "--timer --jobs 10"
GIT_TEST_OPTS: "--no-chain-lint --no-bin-wrappers"
GIT_SKIP_TESTS: t7815.12
MAKEFLAGS: -j4
MAKEFLAGS: "-j4"
DEFAULT_TEST_TARGET: prove
DEFAULT_UNIT_TEST_TARGET: unit-tests-prove
DEVELOPER: 1
freebsd_instance:
image_family: freebsd-14-3
image_family: freebsd-13-4
memory: 2G
install_script:
pkg install -y gettext gmake perl5
@ -21,4 +19,4 @@ freebsd_task:
build_script:
- su git -c gmake
test_script:
- su git -c 'gmake test unit-tests'
- su git -c 'gmake DEFAULT_UNIT_TEST_TARGET=unit-tests-prove test unit-tests'

View File

@ -12,15 +12,7 @@ UseTab: Always
TabWidth: 8
IndentWidth: 8
ContinuationIndentWidth: 8
# While we do want to enforce a character limit of 80 characters, we often
# allow lines to overflow that limit to prioritize readability. Setting a
# character limit here with penalties has been finicky and creates too many
# false positives.
#
# NEEDSWORK: It would be nice if we can find optimal settings to ensure we
# can re-enable the limit here.
ColumnLimit: 0
ColumnLimit: 80
# C Language specifics
Language: Cpp
@ -149,7 +141,7 @@ SpaceBeforeCaseColon: false
# f();
# }
# }
SpaceBeforeParens: ControlStatementsExceptControlMacros
SpaceBeforeParens: ControlStatements
# Don't insert spaces inside empty '()'
SpaceInEmptyParentheses: false
@ -218,11 +210,16 @@ MaxEmptyLinesToKeep: 1
# No empty line at the start of a block.
KeepEmptyLinesAtTheStartOfBlocks: false
# Penalties
# This decides what order things should be done if a line is too long
PenaltyBreakAssignment: 5
PenaltyBreakBeforeFirstCallParameter: 5
PenaltyBreakComment: 5
PenaltyBreakFirstLessLess: 0
PenaltyBreakOpenParenthesis: 300
PenaltyBreakString: 5
PenaltyExcessCharacter: 10
PenaltyReturnTypeOnItsOwnLine: 300
# Don't sort #include's
SortIncludes: false
# Remove optional braces of control statements (if, else, for, and while)
# according to the LLVM coding style. This avoids braces on simple
# single-statement bodies of statements but keeps braces if one side of
# if/else if/.../else cascade has multi-statement body.
RemoveBracesLLVM: true

8
.gitattributes vendored
View File

@ -1,13 +1,13 @@
* whitespace=trail,space
*.[ch] whitespace=indent,trail,space,incomplete diff=cpp
*.sh whitespace=indent,trail,space,incomplete text eol=lf
* whitespace=!indent,trail,space
*.[ch] whitespace=indent,trail,space diff=cpp
*.sh whitespace=indent,trail,space text eol=lf
*.perl text eol=lf diff=perl
*.pl text eof=lf diff=perl
*.pm text eol=lf diff=perl
*.py text eol=lf diff=python
*.bat text eol=crlf
CODE_OF_CONDUCT.md -whitespace
/Documentation/**/*.adoc text eol=lf whitespace=trail,space,incomplete
/Documentation/**/*.adoc text eol=lf
/command-list.txt text eol=lf
/GIT-VERSION-GEN text eol=lf
/mergetools/* text eol=lf

View File

@ -20,7 +20,7 @@ jobs:
jobname: ClangFormat
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
with:
fetch-depth: 0

View File

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

View File

@ -38,7 +38,7 @@ jobs:
COVERITY_LANGUAGE: cxx
COVERITY_PLATFORM: overridden-below
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- name: install minimal Git for Windows SDK
if: contains(matrix.os, 'windows')
uses: git-for-windows/setup-git-for-windows-sdk@v1

View File

@ -63,7 +63,7 @@ jobs:
origin \
${{ github.ref }} \
$args
- uses: actions/setup-go@v6
- uses: actions/setup-go@v5
with:
go-version: '>=1.16'
cache: false

View File

@ -63,7 +63,7 @@ jobs:
echo "skip_concurrent=$skip_concurrent" >>$GITHUB_OUTPUT
- name: skip if the commit or tree was already tested
id: skip-if-redundant
uses: actions/github-script@v8
uses: actions/github-script@v7
if: steps.check-ref.outputs.enabled == 'yes'
with:
github-token: ${{secrets.GITHUB_TOKEN}}
@ -112,7 +112,7 @@ jobs:
group: windows-build-${{ github.ref }}
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- uses: git-for-windows/setup-git-for-windows-sdk@v1
- name: build
shell: bash
@ -123,7 +123,7 @@ jobs:
- name: zip up tracked files
run: git archive -o artifacts/tracked.tar.gz HEAD
- name: upload tracked files and build artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v4
with:
name: windows-artifacts
path: artifacts
@ -140,7 +140,7 @@ jobs:
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- name: download tracked files and build artifacts
uses: actions/download-artifact@v6
uses: actions/download-artifact@v4
with:
name: windows-artifacts
path: ${{github.workspace}}
@ -157,7 +157,7 @@ jobs:
run: ci/print-test-failures.sh
- name: Upload failed tests' directories
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v4
with:
name: failed-tests-windows-${{ matrix.nr }}
path: ${{env.FAILED_TEST_ARTIFACTS}}
@ -173,10 +173,10 @@ jobs:
group: vs-build-${{ github.ref }}
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- uses: git-for-windows/setup-git-for-windows-sdk@v1
- name: initialize vcpkg
uses: actions/checkout@v5
uses: actions/checkout@v4
with:
repository: 'microsoft/vcpkg'
path: 'compat/vcbuild/vcpkg'
@ -208,7 +208,7 @@ jobs:
- name: zip up tracked files
run: git archive -o artifacts/tracked.tar.gz HEAD
- name: upload tracked files and build artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v4
with:
name: vs-artifacts
path: artifacts
@ -226,7 +226,7 @@ jobs:
steps:
- uses: git-for-windows/setup-git-for-windows-sdk@v1
- name: download tracked files and build artifacts
uses: actions/download-artifact@v6
uses: actions/download-artifact@v4
with:
name: vs-artifacts
path: ${{github.workspace}}
@ -244,7 +244,7 @@ jobs:
run: ci/print-test-failures.sh
- name: Upload failed tests' directories
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v4
with:
name: failed-tests-windows-vs-${{ matrix.nr }}
path: ${{env.FAILED_TEST_ARTIFACTS}}
@ -258,8 +258,8 @@ jobs:
group: windows-meson-build-${{ github.ref }}
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- name: Set up dependencies
shell: pwsh
run: pip install meson ninja
@ -270,7 +270,7 @@ jobs:
shell: pwsh
run: meson compile -C build
- name: Upload build artifacts
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v4
with:
name: windows-meson-artifacts
path: build
@ -286,29 +286,19 @@ jobs:
group: windows-meson-test-${{ matrix.nr }}-${{ github.ref }}
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- name: Set up dependencies
shell: pwsh
run: pip install meson ninja
- name: Download build artifacts
uses: actions/download-artifact@v6
uses: actions/download-artifact@v4
with:
name: windows-meson-artifacts
path: build
- name: Test
shell: pwsh
run: ci/run-test-slice-meson.sh build ${{matrix.nr}} 10
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
shell: bash
run: ci/print-test-failures.sh
- name: Upload failed tests' directories
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
uses: actions/upload-artifact@v4
with:
name: failed-tests-windows-meson-${{ matrix.nr }}
path: ${{env.FAILED_TEST_ARTIFACTS}}
run: meson test -C build --list | Select-Object -Skip 1 | Select-String .* | Group-Object -Property { $_.LineNumber % 10 } | Where-Object Name -EQ ${{ matrix.nr }} | ForEach-Object { meson test -C build --no-rebuild --print-errorlogs $_.Group }
regular:
name: ${{matrix.vector.jobname}} (${{matrix.vector.pool}})
@ -323,16 +313,16 @@ jobs:
vector:
- jobname: osx-clang
cc: clang
pool: macos-14
pool: macos-13
- jobname: osx-reftable
cc: clang
pool: macos-14
pool: macos-13
- jobname: osx-gcc
cc: gcc-13
pool: macos-14
pool: macos-13
- jobname: osx-meson
cc: clang
pool: macos-14
pool: macos-13
env:
CC: ${{matrix.vector.cc}}
CC_PACKAGE: ${{matrix.vector.cc_package}}
@ -341,7 +331,7 @@ jobs:
TEST_OUTPUT_DIRECTORY: ${{github.workspace}}/t
runs-on: ${{matrix.vector.pool}}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- run: ci/install-dependencies.sh
- run: ci/run-build-and-tests.sh
- name: print test failures
@ -349,7 +339,7 @@ jobs:
run: ci/print-test-failures.sh
- name: Upload failed tests' directories
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v4
with:
name: failed-tests-${{matrix.vector.jobname}}
path: ${{env.FAILED_TEST_ARTIFACTS}}
@ -362,7 +352,7 @@ jobs:
CI_JOB_IMAGE: ubuntu-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- run: ci/install-dependencies.sh
- run: ci/run-build-and-minimal-fuzzers.sh
dockerized:
@ -389,8 +379,6 @@ jobs:
- jobname: linux-breaking-changes
cc: gcc
image: ubuntu:rolling
- jobname: fedora-breaking-changes-meson
image: fedora:latest
- jobname: linux-leaks
image: ubuntu:rolling
cc: gcc
@ -408,6 +396,8 @@ jobs:
# Supported until 2025-04-02.
- jobname: linux32
image: i386/ubuntu:focal
- jobname: pedantic
image: fedora:latest
# A RHEL 8 compatible distro. Supported until 2029-05-31.
- jobname: almalinux-8
image: almalinux:8
@ -439,17 +429,17 @@ jobs:
else
apt-get -q update && apt-get -q -y install git
fi
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- run: ci/install-dependencies.sh
- run: useradd builder --create-home
- run: chown -R builder .
- run: chmod a+w $GITHUB_ENV && sudo --preserve-env --set-home --user=builder ci/run-build-and-tests.sh
- run: sudo --preserve-env --set-home --user=builder ci/run-build-and-tests.sh
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
run: sudo --preserve-env --set-home --user=builder ci/print-test-failures.sh
- name: Upload failed tests' directories
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v4
with:
name: failed-tests-${{matrix.vector.jobname}}
path: ${{env.FAILED_TEST_ARTIFACTS}}
@ -464,25 +454,10 @@ jobs:
group: static-analysis-${{ github.ref }}
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- run: ci/install-dependencies.sh
- run: ci/run-static-analysis.sh
- run: ci/check-directional-formatting.bash
rust-analysis:
needs: ci-config
if: needs.ci-config.outputs.enabled == 'yes'
env:
jobname: RustAnalysis
CI_JOB_IMAGE: ubuntu:rolling
runs-on: ubuntu-latest
container: ubuntu:rolling
concurrency:
group: rust-analysis-${{ github.ref }}
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- uses: actions/checkout@v4
- run: ci/install-dependencies.sh
- run: ci/run-rust-checks.sh
sparse:
needs: ci-config
if: needs.ci-config.outputs.enabled == 'yes'
@ -494,7 +469,7 @@ jobs:
group: sparse-${{ github.ref }}
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- name: Install other dependencies
run: ci/install-dependencies.sh
- run: make sparse
@ -510,6 +485,6 @@ jobs:
CI_JOB_IMAGE: ubuntu-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- run: ci/install-dependencies.sh
- run: ci/test-documentation.sh

4
.gitignore vendored
View File

@ -1,6 +1,4 @@
/fuzz_corpora
/target/
/Cargo.lock
/GIT-BUILD-DIR
/GIT-BUILD-OPTIONS
/GIT-CFLAGS
@ -89,7 +87,6 @@
/git-init-db
/git-interpret-trailers
/git-instaweb
/git-last-modified
/git-log
/git-ls-files
/git-ls-remote
@ -142,7 +139,6 @@
/git-repack
/git-replace
/git-replay
/git-repo
/git-request-pull
/git-rerere
/git-reset

View File

@ -45,8 +45,6 @@ test:linux:
- jobname: linux-breaking-changes
image: ubuntu:20.04
CC: gcc
- jobname: fedora-breaking-changes-meson
image: fedora:latest
- jobname: linux-TEST-vars
image: ubuntu:20.04
CC: gcc
@ -60,6 +58,8 @@ test:linux:
- jobname: linux-asan-ubsan
image: ubuntu:rolling
CC: clang
- jobname: pedantic
image: fedora:latest
- jobname: linux-musl-meson
image: alpine:latest
- jobname: linux32
@ -70,8 +70,6 @@ test:linux:
artifacts:
paths:
- t/failed-test-artifacts
reports:
junit: build/meson-logs/testlog.junit.xml
when: on_failure
test:osx:
@ -112,16 +110,8 @@ test:osx:
artifacts:
paths:
- t/failed-test-artifacts
reports:
junit: build/meson-logs/testlog.junit.xml
when: on_failure
.windows_before_script: &windows_before_script
# Disabling realtime monitoring fails on some of the runners, but it
# significantly speeds up test execution in the case where it works. We thus
# try our luck, but ignore any failures.
- Set-MpPreference -DisableRealtimeMonitoring $true; $true
build:mingw64:
stage: build
tags:
@ -129,7 +119,6 @@ build:mingw64:
variables:
NO_PERL: 1
before_script:
- *windows_before_script
- ./ci/install-sdk.ps1 -directory "git-sdk"
script:
- git-sdk/usr/bin/bash.exe -l -c 'ci/make-test-artifacts.sh artifacts'
@ -146,7 +135,6 @@ test:mingw64:
- job: "build:mingw64"
artifacts: true
before_script:
- *windows_before_script
- git-sdk/usr/bin/bash.exe -l -c 'tar xf artifacts/artifacts.tar.gz'
- New-Item -Path .git/info -ItemType Directory
- New-Item .git/info/exclude -ItemType File -Value "/git-sdk"
@ -160,10 +148,17 @@ test:mingw64:
tags:
- saas-windows-medium-amd64
before_script:
- *windows_before_script
- choco install -y git meson ninja rust-ms
- choco install -y git meson ninja openssl
- Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
- refreshenv
# The certificate store for Python on Windows is broken and fails to fetch
# certificates, see https://bugs.python.org/issue36011. This seems to
# mostly be an issue with how the GitLab image is set up as it is a
# non-issue on GitHub Actions. Work around the issue by importing
# cetrificates manually.
- Invoke-WebRequest https://curl.haxx.se/ca/cacert.pem -OutFile cacert.pem
- openssl pkcs12 -export -nokeys -in cacert.pem -out certs.pfx -passout "pass:"
- Import-PfxCertificate -CertStoreLocation Cert:\LocalMachine\Root -FilePath certs.pfx
build:msvc-meson:
extends: .msvc-meson
@ -183,11 +178,8 @@ test:msvc-meson:
- job: "build:msvc-meson"
artifacts: true
script:
- meson test -C build --no-rebuild --print-errorlogs --slice $Env:CI_NODE_INDEX/$Env:CI_NODE_TOTAL
- meson test -C build --list | Select-Object -Skip 1 | Select-String .* | Group-Object -Property { $_.LineNumber % $Env:CI_NODE_TOTAL + 1 } | Where-Object Name -EQ $Env:CI_NODE_INDEX | ForEach-Object { meson test -C build --no-rebuild --print-errorlogs $_.Group; if (!$?) { exit $LASTEXITCODE } }
parallel: 10
artifacts:
reports:
junit: build/meson-logs/testlog.junit.xml
test:fuzz-smoke-tests:
image: ubuntu:latest
@ -212,17 +204,6 @@ static-analysis:
- ./ci/run-static-analysis.sh
- ./ci/check-directional-formatting.bash
rust-analysis:
image: ubuntu:rolling
stage: analyze
needs: [ ]
variables:
jobname: RustAnalysis
before_script:
- ./ci/install-dependencies.sh
script:
- ./ci/run-rust-checks.sh
check-whitespace:
image: ubuntu:latest
stage: analyze

View File

@ -81,8 +81,6 @@ Fredrik Kuivinen <frekui@gmail.com> <freku045@student.liu.se>
Frédéric Heitzmann <frederic.heitzmann@gmail.com>
Garry Dolley <gdolley@ucla.edu> <gdolley@arpnetworks.com>
Glen Choo <glencbz@gmail.com> <chooglen@google.com>
Greg Hurrell <greg@hurrell.net> <greg.hurrell@datadoghq.com>
Greg Hurrell <greg@hurrell.net> <win@wincent.com>
Greg Price <price@mit.edu> <price@MIT.EDU>
Greg Price <price@mit.edu> <price@ksplice.com>
Heiko Voigt <hvoigt@hvoigt.net> <git-list@hvoigt.net>
@ -126,7 +124,6 @@ Jon Loeliger <jdl@jdl.com> <jdl@freescale.org>
Jon Seymour <jon.seymour@gmail.com> <jon@blackcubes.dyndns.org>
Jonathan Nieder <jrnieder@gmail.com> <jrnieder@uchicago.edu>
Jonathan del Strother <jon.delStrother@bestbefore.tv> <maillist@steelskies.com>
Jonathan Tan <jonathantanmy@fastmail.com> <jonathantanmy@google.com>
Josh Triplett <josh@joshtriplett.org> <josh@freedesktop.org>
Josh Triplett <josh@joshtriplett.org> <josht@us.ibm.com>
Julian Phillips <julian@quantumfyre.co.uk> <jp3@quantumfyre.co.uk>

View File

@ -1,10 +0,0 @@
[package]
name = "gitcore"
version = "0.1.0"
edition = "2018"
rust-version = "1.49.0"
[lib]
crate-type = ["staticlib"]
[dependencies]

View File

@ -118,104 +118,6 @@ Cf. <2f5de416-04ba-c23d-1e0b-83bb655829a7@zombino.com>,
<20170223155046.e7nxivfwqqoprsqj@LykOS.localdomain>,
<CA+EOSBncr=4a4d8n9xS4FNehyebpmX8JiUwCsXD47EQDE+DiUQ@mail.gmail.com>.
* The default storage format for references in newly created repositories will
be changed from "files" to "reftable". The "reftable" format provides
multiple advantages over the "files" format:
+
** It is impossible to store two references that only differ in casing on
case-insensitive filesystems with the "files" format. This issue is common
on Windows and macOS platforms. As the "reftable" backend does not use
filesystem paths to encode reference names this problem goes away.
** Similarly, macOS normalizes path names that contain unicode characters,
which has the consequence that you cannot store two names with unicode
characters that are encoded differently with the "files" backend. Again,
this is not an issue with the "reftable" backend.
** Deleting references with the "files" backend requires Git to rewrite the
complete "packed-refs" file. In large repositories with many references
this file can easily be dozens of megabytes in size, in extreme cases it
may be gigabytes. The "reftable" backend uses tombstone markers for
deleted references and thus does not have to rewrite all of its data.
** Repository housekeeping with the "files" backend typically performs
all-into-one repacks of references. This can be quite expensive, and
consequently housekeeping is a tradeoff between the number of loose
references that accumulate and slow down operations that read references,
and compressing those loose references into the "packed-refs" file. The
"reftable" backend uses geometric compaction after every write, which
amortizes costs and ensures that the backend is always in a
well-maintained state.
** Operations that write multiple references at once are not atomic with the
"files" backend. Consequently, Git may see in-between states when it reads
references while a reference transaction is in the process of being
committed to disk.
** Writing many references at once is slow with the "files" backend because
every reference is created as a separate file. The "reftable" backend
significantly outperforms the "files" backend by multiple orders of
magnitude.
** The reftable backend uses a binary format with prefix compression for
reference names. As a result, the format uses less space compared to the
"packed-refs" file.
+
Users that get immediate benefit from the "reftable" backend could continue to
opt-in to the "reftable" format manually by setting the "init.defaultRefFormat"
config. But defaults matter, and we think that overall users will have a better
experience with less platform-specific quirks when they use the new backend by
default.
+
A prerequisite for this change is that the ecosystem is ready to support the
"reftable" format. Most importantly, alternative implementations of Git like
JGit, libgit2 and Gitoxide need to support it.
* In new repositories, the default branch name will be `main`. We have been
warning that the default name will change since 675704c74dd (init:
provide useful advice about init.defaultBranch, 2020-12-11). The new name
matches the default branch name used in new repositories by many of the
big Git forges.
* Git will require Rust as a mandatory part of the build process. While Git
already started to adopt Rust in Git 2.49, all parts written in Rust are
optional for the time being. This includes:
+
** The Rust wrapper around libgit.a that is part of "contrib/" and which has
been introduced in Git 2.49.
** Subsystems that have an alternative implementation in Rust to test
interoperability between our C and Rust codebase.
** Newly written features that are not mission critical for a fully functional
Git client.
+
These changes are meant as test balloons to allow distributors of Git to prepare
for Rust becoming a mandatory part of the build process. There will be multiple
milestones for the introduction of Rust:
+
--
1. Initially, with Git 2.52, support for Rust will be auto-detected by Meson and
disabled in our Makefile so that the project can sort out the initial
infrastructure.
2. In Git 2.53, both build systems will default-enable support for Rust.
Consequently, builds will break by default if Rust is not available on the
build host. The use of Rust can still be explicitly disabled via build
flags.
3. In Git 3.0, the build options will be removed and support for Rust is
mandatory.
--
+
You can explicitly ask both Meson and our Makefile-based system to enable Rust
by saying `meson configure -Drust=enabled` and `make WITH_RUST=YesPlease`,
respectively.
+
The Git project will declare the last version before Git 3.0 to be a long-term
support release. This long-term release will receive important bug fixes for at
least four release cycles and security fixes for six release cycles. The Git
project will hand over maintainership of the long-term release to distributors
in case they need to extend the life of that long-term release even further.
Details of how this long-term release will be handed over to the community will
be discussed once the Git project decides to stop officially supporting it.
+
We will evaluate the impact on downstream distributions before making Rust
mandatory in Git 3.0. If we see that the impact on downstream distributions
would be significant, we may decide to defer this change to a subsequent minor
release. This evaluation will also take into account our own experience with
how painful it is to keep Rust an optional component.
=== Removals
* Support for grafting commits has long been superseded by git-replace(1).
@ -281,39 +183,6 @@ These features will be removed.
timeframe, in preference to its synonym "--annotate-stdin". Git 3.0
removes the support for "--stdin" altogether.
* The git-whatchanged(1) command has outlived its usefulness more than
10 years ago, and takes more keystrokes to type than its rough
equivalent `git log --raw`. We have nominated the command for
removal, have changed the command to refuse to work unless the
`--i-still-use-this` option is given, and asked the users to report
when they do so.
+
The command will be removed.
* Support for `core.commentString=auto` has been deprecated and will
be removed in Git 3.0.
+
cf. <xmqqa59i45wc.fsf@gitster.g>
* Support for `core.preferSymlinkRefs=true` has been deprecated and will be
removed in Git 3.0. Writing symbolic refs as symbolic links will be phased
out in favor of using plain files using the textual representation of
symbolic refs.
+
Symbolic references were initially always stored as a symbolic link. This was
changed in 9b143c6e15 (Teach update-ref about a symbolic ref stored in a
textfile., 2005-09-25), where a new textual symref format was introduced to
store those symbolic refs in a plain file. In 9f0bb90d16
(core.prefersymlinkrefs: use symlinks for .git/HEAD, 2006-05-02), the Git
project switched the default to use the textual symrefs in favor of symbolic
links.
+
The migration away from symbolic links has happened almost 20 years ago by now,
and there is no known reason why one should prefer them nowadays. Furthermore,
symbolic links are not supported on some platforms.
+
Note that only the writing side for such symbolic links is deprecated. Reading
such symbolic links is still supported for now.
== Superseded features that will not be deprecated

View File

@ -298,17 +298,6 @@ For C programs:
. since late 2021 with 44ba10d6, we have had variables declared in
the for loop "for (int i = 0; i < 10; i++)".
. since late 2023 with 8277dbe987 we have been using the bool type
from <stdbool.h>.
C99 features we have test balloons for:
. since late 2024 with v2.48.0-rc0~20, we have test balloons for
compound literal syntax, e.g., (struct foo){ .member = value };
our hope is that no platforms we care about have trouble using
them, and officially adopt its wider use in mid 2026. Do not add
more use of the syntax until that happens.
New C99 features that we cannot use yet:
. %z and %zu as a printf() argument for a size_t (the %z being for
@ -326,9 +315,6 @@ For C programs:
encouraged to have a blank line between the end of the declarations
and the first statement in the block.
- Do not explicitly initialize global variables to 0 or NULL;
instead, let BSS take care of the zero initialization.
- NULL pointers shall be written as NULL, not as 0.
- When declaring pointers, the star sides with the variable
@ -624,9 +610,8 @@ For C programs:
- `S_init()` initializes a structure without allocating the
structure itself.
- `S_release()` releases a structure's contents without reinitializing
the structure for immediate reuse, and without freeing the structure
itself.
- `S_release()` releases a structure's contents without freeing the
structure.
- `S_clear()` is equivalent to `S_release()` followed by `S_init()`
such that the structure is directly usable after clearing it. When
@ -650,12 +635,6 @@ For C programs:
cases. However, it is recommended to find a more descriptive name wherever
possible to improve the readability and maintainability of the code.
- Bit fields should be defined without a space around the colon. E.g.
unsigned my_field:1;
unsigned other_field:1;
unsigned field_with_longer_name:1;
For Perl programs:
- Most of the C guidelines above apply.
@ -898,17 +877,6 @@ Characters are also surrounded by underscores:
As a side effect, backquoted placeholders are correctly typeset, but
this style is not recommended.
When documenting multiple related `git config` variables, place them on
a separate line instead of separating them by commas. For example, do
not write this:
`core.var1`, `core.var2`::
Description common to `core.var1` and `core.var2`.
Instead write this:
`core.var1`::
`core.var2`::
Description common to `core.var1` and `core.var2`.
Synopsis Syntax
The synopsis (a paragraph with [synopsis] attribute) is automatically

View File

@ -34,7 +34,6 @@ MAN5_TXT += gitformat-bundle.adoc
MAN5_TXT += gitformat-chunk.adoc
MAN5_TXT += gitformat-commit-graph.adoc
MAN5_TXT += gitformat-index.adoc
MAN5_TXT += gitformat-loose.adoc
MAN5_TXT += gitformat-pack.adoc
MAN5_TXT += gitformat-signature.adoc
MAN5_TXT += githooks.adoc
@ -53,7 +52,6 @@ MAN7_TXT += gitcli.adoc
MAN7_TXT += gitcore-tutorial.adoc
MAN7_TXT += gitcredentials.adoc
MAN7_TXT += gitcvs-migration.adoc
MAN7_TXT += gitdatamodel.adoc
MAN7_TXT += gitdiffcore.adoc
MAN7_TXT += giteveryday.adoc
MAN7_TXT += gitfaq.adoc
@ -121,29 +119,19 @@ TECH_DOCS += ToolsForGit
TECH_DOCS += technical/bitmap-format
TECH_DOCS += technical/build-systems
TECH_DOCS += technical/bundle-uri
TECH_DOCS += technical/commit-graph
TECH_DOCS += technical/directory-rename-detection
TECH_DOCS += technical/hash-function-transition
TECH_DOCS += technical/large-object-promisors
TECH_DOCS += technical/long-running-process-protocol
TECH_DOCS += technical/multi-pack-index
TECH_DOCS += technical/packfile-uri
TECH_DOCS += technical/pack-heuristics
TECH_DOCS += technical/parallel-checkout
TECH_DOCS += technical/partial-clone
TECH_DOCS += technical/platform-support
TECH_DOCS += technical/racy-git
TECH_DOCS += technical/reftable
TECH_DOCS += technical/remembering-renames
TECH_DOCS += technical/repository-version
TECH_DOCS += technical/rerere
TECH_DOCS += technical/scalar
TECH_DOCS += technical/send-pack-pipeline
TECH_DOCS += technical/shallow
TECH_DOCS += technical/sparse-checkout
TECH_DOCS += technical/sparse-index
TECH_DOCS += technical/trivial-merge
TECH_DOCS += technical/unambiguous-types
TECH_DOCS += technical/unit-tests
SP_ARTICLES += $(TECH_DOCS)
SP_ARTICLES += technical/api-index
@ -509,26 +497,9 @@ $(LINT_DOCS_FSCK_MSGIDS): ../fsck.h fsck-msgids.adoc
$(call mkdir_p_parent_template)
$(QUIET_GEN)$(PERL_PATH) lint-fsck-msgids.perl \
../fsck.h fsck-msgids.adoc $@
lint-docs-fsck-msgids: $(LINT_DOCS_FSCK_MSGIDS)
## Lint: delimited sections
LINT_DOCS_DELIMITED_SECTIONS = $(patsubst %.adoc,.build/lint-docs/delimited-sections/%.ok,$(MAN_TXT))
$(LINT_DOCS_DELIMITED_SECTIONS): lint-delimited-sections.perl
$(LINT_DOCS_DELIMITED_SECTIONS): .build/lint-docs/delimited-sections/%.ok: %.adoc
$(call mkdir_p_parent_template)
$(QUIET_LINT_DELIMSEC)$(PERL_PATH) lint-delimited-sections.perl $< >$@
.PHONY: lint-docs-delimited-sections
lint-docs-delimited-sections: $(LINT_DOCS_DELIMITED_SECTIONS)
## Lint: Documentation style
LINT_DOCS_DOC_STYLE = $(patsubst %.adoc,.build/lint-docs/doc-style/%.ok,$(DOC_DEP_TXT))
$(LINT_DOCS_DOC_STYLE): lint-documentation-style.perl
$(LINT_DOCS_DOC_STYLE): .build/lint-docs/doc-style/%.ok: %.adoc
$(call mkdir_p_parent_template)
$(QUIET_LINT_DOCSTYLE)$(PERL_PATH) lint-documentation-style.perl $< >$@
.PHONY: lint-docs-doc-style
lint-docs-doc-style: $(LINT_DOCS_DOC_STYLE)
lint-docs-manpages:
$(QUIET_GEN)./lint-manpages.sh
@ -539,12 +510,7 @@ lint-docs-meson:
awk "/^manpages = {$$/ {flag=1 ; next } /^}$$/ { flag=0 } flag { gsub(/^ \047/, \"\"); gsub(/\047 : [157],\$$/, \"\"); print }" meson.build | \
grep -v -e '#' -e '^$$' | \
sort >tmp-meson-diff/meson.adoc && \
ls git*.adoc scalar.adoc | \
grep -v -e git-bisect-lk2009.adoc \
-e git-pack-redundant.adoc \
-e git-tools.adoc \
-e git-whatchanged.adoc \
>tmp-meson-diff/actual.adoc && \
ls git*.adoc scalar.adoc | grep -v -e git-bisect-lk2009.adoc -e git-pack-redundant.adoc -e git-tools.adoc >tmp-meson-diff/actual.adoc && \
if ! cmp tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; then \
echo "Meson man pages differ from actual man pages:"; \
diff -u tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; \
@ -557,8 +523,6 @@ lint-docs: lint-docs-fsck-msgids
lint-docs: lint-docs-gitlink
lint-docs: lint-docs-man-end-blurb
lint-docs: lint-docs-man-section-order
lint-docs: lint-docs-delimited-sections
lint-docs: lint-docs-doc-style
lint-docs: lint-docs-manpages
lint-docs: lint-docs-meson

View File

@ -52,15 +52,6 @@ respond to you. It's better to ask your questions in the channel so that you
can be answered if you disconnect and so that others can learn from the
conversation.
==== https://discord.gg/GRFVkzgxRd[#discord] on Discord
This is an unofficial Git Discord server for everyone, from people just
starting out with Git to those who develop it. It's a great place to ask
questions, share tips, and connect with the broader Git community in real time.
The server has channels for general discussions and specific channels for those
who use Git and those who develop it. The server's search functionality also
allows you to find previous conversations and answers to common questions.
[[getting-started]]
== Getting Started
@ -917,13 +908,10 @@ Now you should be able to go and check out your newly created branch on GitHub.
=== Sending a PR to GitGitGadget
In order to have your code tested and formatted for review, you need to start by
opening a Pull Request against either `gitgitgadget/git` or `git/git`. Head to
https://github.com/gitgitgadget/git or https://github.com/git/git and open a PR
either with the "New pull request" button or the convenient "Compare & pull
request" button that may appear with the name of your newly pushed branch.
The differences between using `gitgitgadget/git` and `git/git` as your base can
be found [here](https://gitgitgadget.github.io/#should-i-use-gitgitgadget-on-gitgitgadgets-git-fork-or-on-gits-github-mirror)
opening a Pull Request against `gitgitgadget/git`. Head to
https://github.com/gitgitgadget/git and open a PR either with the "New pull
request" button or the convenient "Compare & pull request" button that may
appear with the name of your newly pushed branch.
Review the PR's title and description, as they're used by GitGitGadget
respectively as the subject and body of the cover letter for your change. Refer
@ -1153,11 +1141,6 @@ NOTE: When you are sending a real patch, it will go to git@vger.kernel.org - but
please don't send your patchset from the tutorial to the real mailing list! For
now, you can send it to yourself, to make sure you understand how it will look.
NOTE: After sending your patches, you can confirm that they reached the mailing
list by visiting https://lore.kernel.org/git/. Use the search bar to find your
name or the subject of your patch. If it appears, your email was successfully
delivered.
After you run the command above, you will be presented with an interactive
prompt for each patch that's about to go out. This gives you one last chance to
edit or quit sending something (but again, don't edit code this way). Once you

View File

@ -43,7 +43,7 @@ Open up a new file `builtin/walken.c` and set up the command handler:
#include "builtin.h"
#include "trace.h"
int cmd_walken(int argc, const char **argv, const char *prefix, struct repository *repo)
int cmd_walken(int argc, const char **argv, const char *prefix)
{
trace_printf(_("cmd_walken incoming...\n"));
return 0;
@ -83,36 +83,23 @@ int cmd_walken(int argc, const char **argv, const char *prefix)
}
----
Also add the relevant line in `builtin.h` near `cmd_version()`:
Also add the relevant line in `builtin.h` near `cmd_whatchanged()`:
----
int cmd_walken(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_walken(int argc, const char **argv, const char *prefix);
----
Include the command in `git.c` in `commands[]` near the entry for `version`,
Include the command in `git.c` in `commands[]` near the entry for `whatchanged`,
maintaining alphabetical ordering:
----
{ "walken", cmd_walken, RUN_SETUP },
----
Add an entry for the new command in the both the Make and Meson build system,
before the entry for `worktree`:
Add it to the `Makefile` near the line for `builtin/worktree.o`:
- In the `Makefile`:
----
...
BUILTIN_OBJS += builtin/walken.o
...
----
- In the `meson.build` file:
----
builtin_sources = [
...
'builtin/walken.c',
...
]
----
Build and test out your command, without forgetting to ensure the `DEVELOPER`
@ -206,7 +193,7 @@ initialization functions.
Next, we should have a look at any relevant configuration settings (i.e.,
settings readable and settable from `git config`). This is done by providing a
callback to `repo_config()`; within that callback, you can also invoke methods
callback to `git_config()`; within that callback, you can also invoke methods
from other components you may need that need to intercept these options. Your
callback will be invoked once per each configuration value which Git knows about
(global, local, worktree, etc.).
@ -234,14 +221,14 @@ static int git_walken_config(const char *var, const char *value,
}
----
Make sure to invoke `repo_config()` with it in your `cmd_walken()`:
Make sure to invoke `git_config()` with it in your `cmd_walken()`:
----
int cmd_walken(int argc, const char **argv, const char *prefix, struct repository *repo)
int cmd_walken(int argc, const char **argv, const char *prefix)
{
...
repo_config(repo, git_walken_config, NULL);
git_config(git_walken_config, NULL);
...
}
@ -263,14 +250,14 @@ We'll also need to include the `revision.h` header:
...
int cmd_walken(int argc, const char **argv, const char *prefix, struct repository *repo)
int cmd_walken(int argc, const char **argv, const char *prefix)
{
/* This can go wherever you like in your declarations.*/
struct rev_info rev;
...
/* This should go after the repo_config() call. */
repo_init_revisions(repo, &rev, prefix);
/* This should go after the git_config() call. */
repo_init_revisions(the_repository, &rev, prefix);
...
}
@ -318,7 +305,7 @@ Then let's invoke `final_rev_info_setup()` after the call to
`repo_init_revisions()`:
----
int cmd_walken(int argc, const char **argv, const char *prefix, struct repository *repo)
int cmd_walken(int argc, const char **argv, const char *prefix)
{
...

View File

@ -37,4 +37,3 @@ exec >/var/tmp/1
echo O=$(git describe maint)
O=v1.6.2.3-38-g318b847
git shortlog --no-merges $O..maint
---

View File

@ -1,73 +0,0 @@
Git v2.43.7 Release Notes
=========================
This release includes fixes for CVE-2025-27613, CVE-2025-27614,
CVE-2025-46334, CVE-2025-46835, CVE-2025-48384, CVE-2025-48385, and
CVE-2025-48386.
Fixes since v2.43.6
-------------------
* CVE-2025-27613, Gitk:
When a user clones an untrusted repository and runs Gitk without
additional command arguments, any writable file can be created and
truncated. The option "Support per-file encoding" must have been
enabled. The operation "Show origin of this line" is affected as
well, regardless of the option being enabled or not.
* CVE-2025-27614, Gitk:
A Git repository can be crafted in such a way that a user who has
cloned the repository can be tricked into running any script
supplied by the attacker by invoking `gitk filename`, where
`filename` has a particular structure.
* CVE-2025-46334, Git GUI (Windows only):
A malicious repository can ship versions of sh.exe or typical
textconv filter programs such as astextplain. On Windows, path
lookup can find such executables in the worktree. These programs
are invoked when the user selects "Git Bash" or "Browse Files" from
the menu.
* CVE-2025-46835, Git GUI:
When a user clones an untrusted repository and is tricked into
editing a file located in a maliciously named directory in the
repository, then Git GUI can create and overwrite any writable
file.
* CVE-2025-48384, Git:
When reading a config value, Git strips any trailing carriage
return and line feed (CRLF). When writing a config entry, values
with a trailing CR are not quoted, causing the CR to be lost when
the config is later read. When initializing a submodule, if the
submodule path contains a trailing CR, the altered path is read
resulting in the submodule being checked out to an incorrect
location. If a symlink exists that points the altered path to the
submodule hooks directory, and the submodule contains an executable
post-checkout hook, the script may be unintentionally executed
after checkout.
* CVE-2025-48385, Git:
When cloning a repository Git knows to optionally fetch a bundle
advertised by the remote server, which allows the server-side to
offload parts of the clone to a CDN. The Git client does not
perform sufficient validation of the advertised bundles, which
allows the remote side to perform protocol injection.
This protocol injection can cause the client to write the fetched
bundle to a location controlled by the adversary. The fetched
content is fully controlled by the server, which can in the worst
case lead to arbitrary code execution.
* CVE-2025-48386, Git:
The wincred credential helper uses a static buffer (`target`) as a
unique key for storing and comparing against internal storage. This
credential helper does not properly bounds check the available
space remaining in the buffer before appending to it with
`wcsncat()`, leading to potential buffer overflows.

View File

@ -1,7 +0,0 @@
Git v2.44.4 Release Notes
=========================
This release merges up the fixes that appears in v2.43.7 to address
the following CVEs: CVE-2025-27613, CVE-2025-27614, CVE-2025-46334,
CVE-2025-46835, CVE-2025-48384, CVE-2025-48385, and CVE-2025-48386.
See the release notes for v2.43.7 for details.

View File

@ -1,7 +0,0 @@
Git v2.45.4 Release Notes
=========================
This release merges up the fixes that appears in v2.43.7, and v2.44.4
to address the following CVEs: CVE-2025-27613, CVE-2025-27614,
CVE-2025-46334, CVE-2025-46835, CVE-2025-48384, CVE-2025-48385, and
CVE-2025-48386. See the release notes for v2.43.7 for details.

View File

@ -1,7 +0,0 @@
Git v2.46.4 Release Notes
=========================
This release merges up the fixes that appears in v2.43.7, v2.44.4, and
v2.45.4 to address the following CVEs: CVE-2025-27613, CVE-2025-27614,
CVE-2025-46334, CVE-2025-46835, CVE-2025-48384, CVE-2025-48385, and
CVE-2025-48386. See the release notes for v2.43.7 for details.

View File

@ -1,8 +0,0 @@
Git v2.47.3 Release Notes
=========================
This release merges up the fixes that appears in v2.43.7, v2.44.4,
v2.45.4, and v2.46.4 to address the following CVEs: CVE-2025-27613,
CVE-2025-27614, CVE-2025-46334, CVE-2025-46835, CVE-2025-48384,
CVE-2025-48385, and CVE-2025-48386. See the release notes for v2.43.7
for details.

View File

@ -1,8 +0,0 @@
Git v2.48.2 Release Notes
=========================
This release merges up the fixes that appears in v2.43.7, v2.44.4,
v2.45.4, v2.46.4, and v2.47.3 to address the following CVEs:
CVE-2025-27613, CVE-2025-27614, CVE-2025-46334, CVE-2025-46835,
CVE-2025-48384, CVE-2025-48385, and CVE-2025-48386. See the release
notes for v2.43.7 for details.

View File

@ -1,12 +0,0 @@
Git v2.49.1 Release Notes
=========================
This release merges up the fixes that appear in v2.43.7, v2.44.4,
v2.45.4, v2.46.4, v2.47.3, and v2.48.2 to address the following CVEs:
CVE-2025-27613, CVE-2025-27614, CVE-2025-46334, CVE-2025-46835,
CVE-2025-48384, CVE-2025-48385, and CVE-2025-48386. See the release
notes for v2.43.7 for details.
It also contains some updates to various CI bits to work around
and/or to adjust to the deprecation of use of Ubuntu 20.04 GitHub
Actions CI, updates to to Fedora base image.

View File

@ -1,8 +0,0 @@
Git v2.50.1 Release Notes
=========================
This release merges up the fixes that appear in v2.43.7, v2.44.4,
v2.45.4, v2.46.4, v2.47.3, v2.48.2, and v2.49.1 to address the
following CVEs: CVE-2025-27613, CVE-2025-27614, CVE-2025-46334,
CVE-2025-46835, CVE-2025-48384, CVE-2025-48385, and
CVE-2025-48386. See the release notes for v2.43.7 for details.

View File

@ -1,341 +0,0 @@
Git v2.51 Release Notes
=======================
UI, Workflows & Features
------------------------
* Userdiff patterns for the R language have been added.
* Documentation for "git send-email" has been updated with a bit more
credential helper and OAuth information.
* "git cat-file --batch" learns to understand %(objectmode) atom to
allow the caller to tell missing objects (due to repository
corruption) and submodules (whose commit objects are OK to be
missing) apart.
* "git diff --no-index dirA dirB" can limit the comparison with
pathspec at the end of the command line, just like normal "git
diff".
* "git subtree" (in contrib/) learned to grok GPG signing its commits.
* "git whatchanged" that is longer to type than "git log --raw"
which is its modern rough equivalent has outlived its usefulness
more than 10 years ago. Plan to deprecate and remove it.
* An interchange format for stash entries is defined, and subcommand
of "git stash" to import/export has been added.
* "git merge/pull" has been taught the "--compact-summary" option to
use the compact-summary format, intead of diffstat, when showing
the summary of the incoming changes.
* "git imap-send" has been broken for a long time, which has been
resurrected and then taught to talk OAuth2.0 etc.
* Some error messages from "git imap-send" has been updated.
* When "git daemon" sees a signal while attempting to accept() a new
client, instead of retrying, it skipped it by mistake, which has
been corrected.
* The reftable ref backend has matured enough; Git 3.0 will make it
the default format in a newly created repositories by default.
* "netrc" credential helper has been improved to understand textual
service names (like smtp) in addition to the numeric port numbers
(like 25).
* Lift the limitation to use changed-path filter in "git log" so that
it can be used for a pathspec with multiple literal paths.
* Clean up the way how signature on commit objects are exported to
and imported from fast-import stream.
* Remove unsupported, unused, and unsupportable old option from "git
log".
* Document recently added "git imap-send --list" with an example.
* "git pull" learned to pay attention to pull.autostash configuration
variable, which overrides rebase/merge.autostash.
* "git for-each-ref" learns "--start-after" option to help
applications that want to page its output.
* "git switch" and "git restore" are declared to be no longer
experimental.
* "git -c alias.foo=bar foo -h baz" reported "'foo' is aliased to
'bar'" and then went on to run "git foo -h baz", which was
unexpected. Tighten the rule so that alias expansion is reported
only when "-h" is the sole option.
Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
* "git pack-objects" learned to find delta bases from blobs at the
same path, using the --path-walk API.
* CodingGuidelines update.
* Add settings for Solaris 10 & 11.
* Meson-based build/test framework now understands TAP output
generated by our tests.
* "Do not explicitly initialize to zero" rule has been clarified in
the CodingGuidelines document.
* A test helper "test_seq" function learned the "-f <fmt>" option,
which allowed us to simplify a lot of test scripts.
* A lot of stale stuff has been removed from the contrib/ hierarchy.
* "git push" and "git fetch" are taught to update refs in batches to
gain performance.
* Some code paths in "git prune" used to ignore the passed-in
repository object and used the `the_repository` singleton instance
instead, which has been corrected.
* Update ".clang-format" and ".editorconfig" to match our style guide
a bit better.
* "make coccicheck" succeeds even when spatch made suggestions, which
has been updated to fail in such a case.
* Code clean-up around object access API.
* Define .precision to more canned parse-options type to avoid bugs
coming from using a variable with a wrong type to capture the
parsed values.
* Flipping the default hash function to SHA-256 at Git 3.0 boundary
is planned.
* Declare weather-balloon we raised for "bool" type 18 months ago a
success and officially allow using the type in our codebase.
* GIT_TEST_INSTALLED was not honored in the recent topic related to
SHA256 hashes, which has been corrected.
* The pop_most_recent_commit() function can have quite expensive
worst case performance characteristics, which has been optimized by
using prio-queue data structure.
* Move structure definition from unrelated header file to where it
belongs.
* To help our developers, document what C99 language features are
being considered for adoption, in addition to what past experiments
have already decided.
* The reftable unit tests are now ported to the "clar" unit testing
framework.
* Redefine where the multi-pack-index sits in the object subsystem,
which recently was restructured to allow multiple backends that
support a single object source that belongs to one repository. A
MIDX does span multiple "object sources".
* Reduce implicit assumption and dependence on the_repository in the
object-file subsystem.
Fixes since v2.50
-----------------
Unless otherwise noted, all the changes in 2.50.X maintenance track,
including security updates, are included in this release.
* A memory-leak in an error code path has been plugged.
(merge 7082da85cb ly/commit-graph-graph-write-leakfix later to maint).
* A memory-leak in an error code path has been plugged.
(merge aedebdb6b9 ly/fetch-pack-leakfix later to maint).
* Some leftover references to documentation source files that no
longer exist, due to recent ".txt" -> ".adoc" renaming, have been
corrected.
(merge 3717a5775a jw/doc-txt-to-adoc-refs later to maint).
* "git stash -p <pathspec>" improvements.
(merge 468817bab2 pw/stash-p-pathspec-fixes later to maint).
* "git send-email" incremented its internal message counter when a
message was edited, which made logic that treats the first message
specially misbehave, which has been corrected.
(merge 2cc27b3501 ag/send-email-edit-threading-fix later to maint).
* "git stash" recorded a wrong branch name when submodules are
present in the current checkout, which has been corrected.
(merge ffb36c64f2 kj/stash-onbranch-submodule-fix later to maint).
* When asking to apply mailmap to both author and committer field
while showing a commit object, the field that appears later was not
correctly parsed and replaced, which has been corrected.
(merge abf94a283f sa/multi-mailmap-fix later to maint).
* "git maintenance" lacked the care "git gc" had to avoid holding
onto the repository lock for too long during packing refs, which
has been remedied.
(merge 1b5074e614 ps/maintenance-ref-lock later to maint).
* Avoid regexp_constraint and instead use comparison_constraint when
listing functions to exclude from application of coccinelle rules,
as spatch can be built with different regexp engine X-<.
(merge f2ad545813 jc/cocci-avoid-regexp-constraint later to maint).
* Updating submodules from the upstream did not work well when
submodule's HEAD is detached, which has been improved.
(merge ca62f524c1 jk/submodule-remote-lookup-cleanup later to maint).
* Remove unnecessary check from "git daemon" code.
(merge 0c856224d2 cb/daemon-fd-check-fix later to maint).
* Use of sysctl() system call to learn the total RAM size used on
BSDs has been corrected.
(merge 781c1cf571 cb/total-ram-bsd-fix later to maint).
* Drop FreeBSD 4 support and declare that we support only FreeBSD 12
or later, which has memmem() supported.
(merge 0392f976a7 bs/config-mak-freebsd later to maint).
* A diff-filter with negative-only specification like "git log
--diff-filter=d" did not trigger correctly, which has been fixed.
(merge 375ac087c5 jk/all-negative-diff-filter-fix later to maint).
* A failure to open the index file for writing due to conflicting
access did not state what went wrong, which has been corrected.
(merge 9455397a5c hy/read-cache-lock-error-fix later to maint).
* Tempfile removal fix in the codepath to sign commits with SSH keys.
(merge 4498127b04 re/ssh-sign-buffer-fix later to maint).
* Code and test clean-up around string-list API.
(merge 6e5b26c3ff sj/string-list later to maint).
* "git apply -N" should start from the current index and register
only new files, but it instead started from an empty index, which
has been corrected.
(merge 2b49d97fcb rp/apply-intent-to-add-fix later to maint).
* Leakfix with a new and a bit invasive test on pack-bitmap files.
(merge bfd5522e98 ly/load-bitmap-leakfix later to maint).
* "git fetch --prune" used to be O(n^2) expensive when there are many
refs, which has been corrected.
(merge 87d8d8c5d0 ph/fetch-prune-optim later to maint).
* When a ref creation at refs/heads/foo/bar fails, the files backend
now removes refs/heads/foo/ if the directory is otherwise not used.
(merge a3a7f20516 ps/refs-files-remove-empty-parent later to maint).
* "pack-objects" has been taught to avoid pointing into objects in
cruft packs from midx.
* "git remote" now detects remote names that overlap with each other
(e.g., remote nickname "outer" and "outer/inner" are used at the
same time), as it will lead to overlapping remote-tracking
branches.
(merge a5a727c448 jk/remote-avoid-overlapping-names later to maint).
* The gpg.program configuration variable, which names a pathname to
the (custom) GPG compatible program, can now be spelled with ~tilde
expansion.
(merge 7d275cd5c0 jb/gpg-program-variable-is-a-pathname later to maint).
* Our <sane-ctype.h> header file relied on that the system-supplied
<ctype.h> header is not later included, which would override our
macro definitions, but "amazon linux" broke this assumption. Fix
this by preemptively including <ctype.h> near the beginning of
<sane-ctype.h> ourselves.
(merge 9d3b33125f ps/sane-ctype-workaround later to maint).
* Clean-up compat/bswap.h mess.
(merge f4ac32c03a ss/compat-bswap-revamp later to maint).
* Meson-based build did not handle libexecdir setting correctly,
which has been corrected.
(merge 056dbe8612 rj/meson-libexecdir-fix later to maint).
* Document that we do not require "real" name when signing your
patches off.
(merge 1f0fed312a bc/contribution-under-non-real-names later to maint).
* "git commit" that concludes a conflicted merge failed to notice and remove
existing comment added automatically (like "# Conflicts:") when the
core.commentstring is set to 'auto'.
(merge 92b7c7c9f5 ac/auto-comment-char-fix later to maint).
* "git rebase -i" with bogus rebase.instructionFormat configuration
failed to produce the todo file after recording the state files,
leading to confused "git status"; this has been corrected.
(merge ade14bffd7 ow/rebase-verify-insn-fmt-before-initializing-state later to maint).
* A few file descriptors left unclosed upon program completion in a
few test helper programs are now closed.
(merge 0f1b33815b hl/test-helper-fd-close later to maint).
* Interactive prompt code did not correctly strip CRLF from the end
of line on Windows.
(merge 711a20827b js/prompt-crlf-fix later to maint).
* The config API had a set of convenience wrapper functions that
implicitly use the_repository instance; they have been removed and
inlined at the calling sites.
* "git add/etc -p" now honor the diff.context configuration variable,
and also they learn to honor the -U<n> command-line option.
(merge 2b3ae04011 lm/add-p-context later to maint).
* The case where a new submodule takes a path where there used to be a
completely different subproject is now dealt with a bit better than
before.
(merge 5ed8c5b465 kj/renamed-submodule later to maint).
* The deflate codepath in "git archive --format=zip" had a
longstanding bug coming from misuse of zlib API, which has been
corrected.
* Other code cleanup, docfix, build fix, etc.
(merge b257adb571 lo/my-first-ow-doc-update later to maint).
(merge 8b34b6a220 ly/sequencer-update-squash-is-fixup-only later to maint).
(merge 5dceb8bd05 ly/do-not-localize-bug-messages later to maint).
(merge 61372dd613 ly/commit-buffer-reencode-leakfix later to maint).
(merge 81cd1eef7d ly/pack-bitmap-root-leakfix later to maint).
(merge bfc9f9cc64 ly/submodule-update-failure-leakfix later to maint).
(merge 65dff89c6b ma/doc-diff-cc-headers later to maint).
(merge efb61591ee jm/bundle-uri-debug-output-to-fp later to maint).
(merge a3d278bb64 ly/prepare-show-merge-leakfix later to maint).
(merge 1fde1c5daf ac/preload-index-wo-the-repository later to maint).
(merge 855cfc65ae rm/t2400-modernize later to maint).
(merge 2939494284 ly/run-builtin-use-passed-in-repo later to maint).
(merge ff73f375bb jg/mailinfo-leakfix later to maint).
(merge 996f14c02b jj/doc-branch-markup-fix later to maint).
(merge 1e77de1864 cb/ci-freebsd-update-to-14.3 later to maint).
(merge b0e9d25865 jk/fix-leak-send-pack later to maint).
(merge f3a9558c8c bs/remote-helpers-doc-markup-fix later to maint).
(merge c4e9775c60 kh/doc-config-subcommands later to maint).
(merge de404249ab ps/perlless-test-fixes later to maint).
(merge 953049eed8 ts/merge-orig-head-doc-fix later to maint).
(merge 0c83bbc704 rj/freebsd-sysinfo-build-fix later to maint).
(merge ad7780b38f ps/doc-pack-refs-auto-with-files-backend-fix later to maint).
(merge f4fa8a3687 rh/doc-glob-pathspec-fix later to maint).
(merge b27be108c8 ja/doc-git-log-markup later to maint).
(merge 14d7583beb pw/config-kvi-remove-path later to maint).
(merge f31abb421d jc/do-not-scan-argv-without-parsing later to maint).
(merge 26552cb62a jk/unleak-reflog-expire-entry later to maint).
(merge 339d95fda9 jc/ci-print-test-failures-fix later to maint).
(merge 8c3add51a8 cb/meson-avoid-broken-macos-pcre2 later to maint).
(merge 5247da07b8 ps/meson-clar-decls-fix later to maint).
(merge f3ef347bb2 ch/t7450-recursive-clone-test-fix later to maint).
(merge 4ac3302a1a jc/doc-release-vs-clear later to maint).
(merge 3bdd897413 ms/meson-with-ancient-git-wo-ls-files-dedup later to maint).
(merge cca758d324 kh/doc-fast-import-historical later to maint).
(merge 9b0781196a jc/test-hashmap-is-still-here later to maint).
(merge 1bad05bacc jk/revert-squelch-compiler-warning later to maint).
(merge 3a7e783d9c dl/squelch-maybe-uninitialized later to maint).

View File

@ -1,99 +0,0 @@
Git 2.51.1 Release Notes
========================
There shouldn't be anything exciting to see here. This is primarily
to flush the "do you still use it?" improvements that has landed on
the master front, together with a handful of low-hanging, low-impact
fixes that should be safe.
Fixes since Git 2.51.0
----------------------
* The "do you still use it?" message given by a command that is
deeply deprecated and allow us to suggest alternatives has been
updated.
* The compatObjectFormat extension is used to hide an incomplete
feature that is not yet usable for any purpose other than
developing the feature further. Document it as such to discourage
its use by mere mortals.
* Manual page for "gitk" is updated with the current maintainer's
name.
* Update the instructions for using GGG in the MyFirstContribution
document to say that a GitHub PR could be made against `git/git`
instead of `gitgitgadget/git`.
* Clang-format update to let our control macros be formatted the way we
had them traditionally, e.g., "for_each_string_list_item()" without
space before the parentheses.
* A few places where a size_t value was cast to curl_off_t without
checking has been updated to use the existing helper function.
* The start_delayed_progress() function in the progress eye-candy API
did not clear its internal state, making an initial delay value
larger than 1 second ineffective, which has been corrected.
* Makefile tried to run multiple "cargo build" which would not work
very well; serialize their execution to work around this problem.
* Adjust to the way newer versions of cURL selectively enable tracing
options, so that our tests can continue to work.
* During interactive rebase, using 'drop' on a merge commit led to
an error, which has been corrected.
* "git refs migrate" to migrate the reflog entries from a refs
backend to another had a handful of bugs squashed.
* "git push" had a code path that led to BUG() but it should have
been a die(), as it is a response to a usual but invalid end-user
action to attempt pushing an object that does not exist.
* Various bugs about rename handling in "ort" merge strategy have
been fixed.
* "git diff --no-index" run inside a subdirectory under control of a
Git repository operated at the top of the working tree and stripped
the prefix from the output, and oddballs like "-" (stdin) did not
work correctly because of it. Correct the set-up by undoing what
the set-up sequence did to cwd and prefix.
* Various options to "git diff" that make comparison ignore certain
aspects of the differences (like "space changes are ignored",
"differences in lines that match these regular expressions are
ignored") did not work well with "--name-only" and friends.
* Under a race against another process that is repacking the
repository, especially a partially cloned one, "git fetch" may
mistakenly think some objects we do have are missing, which has
been corrected.
* "git repack --path-walk" lost objects in some corner cases, which
has been corrected.
cf. <CABPp-BHFxxGrqKc0m==TjQNjDGdO=H5Rf6EFsf2nfE1=TuraOQ@mail.gmail.com>
* Fixes multiple crashes around midx write-out codepaths.
* A broken or malicious "git fetch" can say that it has the same
object for many many times, and the upload-pack serving it can
exhaust memory storing them redundantly, which has been corrected.
* A corner case bug in "git log -L..." has been corrected.
* Some among "git add -p" and friends ignored color.diff and/or
color.ui configuration variables, which is an old regression, which
has been corrected.
* "git rebase -i" failed to clean-up the commit log message when the
command commits the final one in a chain of "fixup" commands, which
has been corrected.
* Deal more gracefully with directory / file conflicts when the files
backend is used for ref storage, by failing only the ones that are
involved in the conflict while allowing others.
Also contains various documentation updates, code cleanups and minor fixups.

View File

@ -1,45 +0,0 @@
Git 2.51.2 Release Notes
========================
In addition to fixes for an unfortunate regression introduced in Git
2.51.1 that caused "git diff --quiet -w" to be not so quiet when there
are additions, deletions and conflicts, this maintenance release merges
more fixes/improvements that have landed on the master front, primarily
to make the CI part of the system a bit more robust.
Fixes since Git 2.51.1
----------------------
* Recently we attempted to improve "git diff -w --quiet" and friends
to handle cases where patch output would be suppressed, but it
introduced a bug that emits unnecessary output, which has been
corrected.
* The code to squelch output from "git diff -w --name-status"
etc. for paths that "git diff -w -p" would have stayed silent
leaked output from dry-run patch generation, which has been
corrected.
* Windows "real-time monitoring" interferes with the execution of
tests and affects negatively in both correctness and performance,
which has been disabled in Gitlab CI.
* An earlier addition to "git diff --no-index A B" to limit the
output with pathspec after the two directories misbehaved when
these directories were given with a trailing slash, which has been
corrected.
* The "--short" option of "git status" that meant output for humans
and "-z" option to show NUL delimited output format did not mix
well, and colored some but not all things. The command has been
updated to color all elements consistently in such a case.
* Unicode width table update.
* Recent OpenSSH creates the Unix domain socket to communicate with
ssh-agent under $HOME instead of /tmp, which causes our test to
fail doe to overly long pathname in our test environment, which has
been worked around by using "ssh-agent -T".
Also contains various documentation updates, code cleanups and minor fixups.

View File

@ -1,454 +0,0 @@
Git v2.52 Release Notes
=======================
UI, Workflows & Features
------------------------
* The "list" subcommand of "git refs" acts as a front-end for
"git for-each-ref".
* "git cmd --help-all" now works outside repositories.
* "git diff-tree" learned "--max-depth" option.
* A new subcommand "git repo" gives users a way to grab various
repository characteristics.
* A new command "git last-modified" has been added to show the closest
ancestor commit that touched each path.
* The "git refs exists" command that works like "git show-ref --exists"
has been added.
* "git repo info" learns the short-hand option "-z" that is the same as
"--format=nul", and learns to report the objects format used in the
repository.
* "core.commentChar=auto" that attempts to dynamically pick a
suitable comment character is non-workable, as it is too much
trouble to support for little benefit, and is marked as deprecated.
* "git send-email" learned to drive "git imap-send" to store already
sent e-mails in an IMAP folder.
* The "promisor-remote" capability mechanism has been updated to
allow the "partialCloneFilter" settings and the "token" value to be
communicated from the server side.
* Declare that "git init" that is not otherwise configured uses
'main' as the initial branch, not 'master', starting Git 3.0.
* Keep giving hint about the default initial branch name for users
who may be surprised after Git 3.0 switch-over.
* The stash.index configuration variable can be set to make "git stash
pop/apply" pretend that it was invoked with "--index".
* "git fast-import" learned that "--signed-commits=<how>" option that
corresponds to that of "git fast-export".
* Marking a hunk 'selected' in "git add -p" and then splitting made
all the split pieces 'selected'; this has been changed to make them
all 'undecided', which gives better end-user experience.
* Configuration variables that take a pathname as a value
(e.g. blame.ignorerevsfile) can be marked as optional by prefixing
":(optional)" before its value.
* Show 'P'ipe command in "git add -p".
* "git sparse-checkout" subcommand learned a new "clean" action to
prune otherwise unused working-tree files that are outside the
areas of interest.
* "git fast-import" is taught to handle signed tags, just like it
recently learned to handle signed commits, in different ways.
* A new configuration variable commitGraph.changedPaths allows to
turn "--changed-paths" on by default for "git commit-graph".
* "Symlink symref" has been added to the list of things that will
disappear at Git 3.0 boundary.
* "git maintenance" command learns the "geometric" strategy where it
avoids doing maintenance tasks that rebuilds everything from
scratch.
* "git repo structure", a new command.
* The help text and manual page of "git bisect" command have been
made consistent with each other.
Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
* string_list_split*() family of functions have been extended to
simplify common use cases.
* Arrays of strbuf is often a wrong data structure to use, and
strbuf_split*() family of functions that create them often have
better alternatives. Update several code paths and replace
strbuf_split*().
* Revision traversal limited with pathspec, like "git log dir/*",
used to ignore changed-paths Bloom filter when the pathspec
contained wildcards; now they take advantage of the filter when
they can.
* Doc lint updates to encourage the newer and easier-to-use
`synopsis` format, with fixes to a handful of existing uses.
* Remove dependency on the_repository and other globals from the
commit-graph code, and other changes unrelated to de-globaling.
* Discord has been added to the first contribution documentation as
another way to ask for help.
* Inspired by Ezekiel's recent effort to showcase Rust interface, the
hash function implementation used to hash lines have been updated
to the one used for ELF symbol lookup by Glibc.
* Instead of scanning for the remaining items to see if there are
still commits to be explored in the queue, use khash to remember
which items are still on the queue (an unacceptable alternative is
to reserve one object flag bits).
* The bulk-checkin code used to depend on a file-scope static
singleton variable, which has been updated to pass an instance
throughout the callchain.
* The work to build on the bulk-checkin infrastructure to create many
objects at once in a transaction and to abstract it into the
generic object layer continues.
* CodingGuidelines now spells out how bitfields are to be written.
* Adjust to the way newer versions of cURL selectively enable tracing
options, so that our tests can continue to work.
* The clear_alloc_state() API function was not fully clearing the
structure for reuse, but since nobody reuses it, replace it with a
variant that frees the structure as well, making the callers simpler.
* "git range-diff" learned a way to limit the memory consumed by
O(N*N) cost matrix.
* Some places in the code confused a variable that is *not* a boolean
to enable color but is an enum that records what the user requested
to do about color. A couple of bugs of this sort have been fixed,
while the code has been cleaned up to prevent similar bugs in the
future.
* The build procedure based on meson learned a target to only build
documentation, similar to "make doc".
(merge ff4ec8ded0 ps/meson-build-docs later to maint).
* Dip our toes a bit to (optionally) use Rust implemented helper
called from our C code.
* Documentation for "git log --pretty" options has been updated
to make it easier to translate.
* Instead of three library archives (one for git, one for reftable,
and one for xdiff), roll everything into a single libgit.a archive.
This would help later effort to FFI into Rust.
* The beginning of SHA1-SHA256 interoperability work.
* Build procedure for a few credential helpers (in contrib/) have
been updated.
* CI improvements to handle the recent Rust integration better.
* The code in "git repack" machinery has been cleaned up to prepare
for incremental update of midx files.
* Two slightly different ways to get at "all the packfiles" in API
has been cleaned up.
* The code to walk revision graph to compute merge base has been
optimized.
* AI guidelines has been added to our documentation set.
* Contributed credential helpers (obviously in contrib/) now have "cd
$there && make install" target.
* The "MyFirstContribution" tutorial tells the reader how to send out
their patches; the section gained a hint to verify the message
reached the mailing list.
* The "debug" ref-backend was missing a method implementation, which
has been corrected.
* Build procedure for Wincred credential helper has been updated.
* The build procedure based on meson learned to allow builders to
specify the directory to install HTML documents.
* Building "git contacts" script (in contrib/) left the resulting
file unexecutable, which has been corrected.
Fixes since v2.51
-----------------
Unless otherwise noted, all the changes in 2.51.X maintenance track,
including security updates, are included in this release.
* During interactive rebase, using 'drop' on a merge commit lead to
an error, which was incorrect.
* "git refs migrate" to migrate the reflog entries from a refs
backend to another had a handful of bugs squashed.
* "git remote rename origin upstream" failed to move origin/HEAD to
upstream/HEAD when origin/HEAD is unborn and performed other
renames extremely inefficiently, which has been corrected.
(merge 16c4fa26b9 ps/remote-rename-fix later to maint).
* "git describe" has been optimized by using better data structure.
(merge 08bb69d70f rs/describe-with-prio-queue later to maint).
* "git push" had a code path that led to BUG() but it should have
been a die(), as it is a response to a usual but invalid end-user
action to attempt pushing an object that does not exist.
* Various bugs about rename handling in "ort" merge strategy have
been fixed.
* "git jump" (in contrib/) fails to parse the diff header correctly
when a file has a space in its name, which has been corrected.
(merge 621ce9c1c6 gh/git-jump-pathname-with-sp later to maint).
* "git diff --no-index" run inside a subdirectory under control of a
Git repository operated at the top of the working tree and stripped
the prefix from the output, and oddballs like "-" (stdin) did not
work correctly because of it. Correct the set-up by undoing what
the set-up sequence did to cwd and prefix.
* Various options to "git diff" that makes comparison ignore certain
aspects of the differences (like "space changes are ignored",
"differences in lines that match these regular expressions are
ignored") did not work well with "--name-only" and friends.
(merge b55e6d36eb ly/diff-name-only-with-diff-from-content later to maint).
* The above caused regressions, which has been corrected.
* Documentation for "git rebase" has been updated.
(merge 3f7f2b0359 je/doc-rebase later to maint).
* The start_delayed_progress() function in the progress eye-candy API
did not clear its internal state, making an initial delay value
larger than 1 second ineffective, which has been corrected.
* The compatObjectFormat extension is used to hide an incomplete
feature that is not yet usable for any purpose other than
developing the feature further. Document it as such to discourage
its use by mere mortals.
* "git log -L..." compared trees of multiple parents with the tree of the
merge result in an unnecessarily inefficient way.
(merge 0a15bb634c sg/line-log-merge-optim later to maint).
* Under a race against another process that is repacking the
repository, especially a partially cloned one, "git fetch" may
mistakenly think some objects we do have are missing, which has
been corrected.
* "git fetch" can clobber a symref that is dangling when the
remote-tracking HEAD is set to auto update, which has been
corrected.
* "git describe <blob>" misbehaves and/or crashes in some corner
cases, which has been taught to exit with failure gracefully.
(merge 7c10e48e81 jk/describe-blob later to maint).
* Manual page for "gitk" is updated with the current maintainer's
name.
* Update the instructions for using GGG in the MyFirstContribution
document to say that a GitHub PR could be made against `git/git`
instead of `gitgitgadget/git`.
* Makefile tried to run multiple "cargo build" which would not work
very well; serialize their execution to work around this problem.
* "git repack --path-walk" lost objects in some corner cases, which
has been corrected.
* "git ls-files <pathspec>..." should not necessarily have to expand
the index fully if a sparsified directory is excluded by the
pathspec; the code is taught to expand the index on demand to avoid
this.
(merge 681f26bccc ds/ls-files-lazy-unsparse later to maint).
* Windows "real-time monitoring" interferes with the execution of
tests and affects negatively in both correctness and performance,
which has been disabled in Gitlab CI.
* A broken or malicious "git fetch" can say that it has the same
object for many many times, and the upload-pack serving it can
exhaust memory storing them redundantly, which has been corrected.
* A corner case bug in "git log -L..." has been corrected.
* "git rev-parse --short" and friends failed to disambiguate two
objects with object names that share common prefix longer than 32
characters, which has been fixed.
(merge 8655908b9e jc/longer-disambiguation-fix later to maint).
* Some among "git add -p" and friends ignored color.diff and/or
color.ui configuration variables, which is an old regression, which
has been corrected.
* "git subtree" (in contrib/) did not work correctly when splitting
squashed subtrees, which has been improved.
* Import a newer version of the clar unit testing framework.
(merge 93dbb6b3c5 ps/clar-updates later to maint).
* "git send-email --compose --reply-to=<address>" used to add
duplicated Reply-To: header, which made mailservers unhappy. This
has been corrected.
(merge f448f65719 nb/send-email-no-dup-reply-to later to maint).
* "git rebase -i" failed to clean-up the commit log message when the
command commits the final one in a chain of "fixup" commands, which
has been corrected.
* There are double frees and leaks around setup_revisions() API used
in "git stash show", which has been fixed, and setup_revisions()
API gained a wrapper to make it more ergonomic when using it with
strvec-manged argc/argv pairs.
(merge a04bc71725 jk/setup-revisions-freefix later to maint).
* Deal more gracefully with directory / file conflicts when the files
backend is used for ref storage, by failing only the ones that are
involved in the conflict while allowing others.
* "git last-modified" operating in non-recursive mode used to trigger
a BUG(), which has been corrected.
* The use of "git config get" command to learn how ANSI color
sequence is for a particular type, e.g., "git config get
--type=color --default=reset no.such.thing", isn't very ergonomic.
(merge e4dabf4fd6 ps/config-get-color-fixes later to maint).
* The "do you still use it?" message given by a command that is
deeply deprecated and allow us to suggest alternatives has been
updated.
* Clang-format update to let our control macros be formatted the way we
had them traditionally, e.g., "for_each_string_list_item()" without
space before the parentheses.
* A few places where a size_t value was cast to curl_off_t without
checking has been updated to use the existing helper function.
* "git reflog write" did not honor the configured user.name/email
which has been corrected.
* Handling of an empty subdirectory of .git/refs/ in the ref-files
backend has been corrected.
* Our CI script requires "sudo" that can be told to preserve
environment, but Ubuntu replaced with "sudo" with an implementation
that lacks the feature. Work this around by reinstalling the
original version.
* The reftable backend learned to sanity check its on-disk data more
carefully.
(merge 466a3a1afd kn/reftable-consistency-checks later to maint).
* A lot of code clean-up of xdiff.
Split out of a larger topic.
(merge 8b9c5d2e3a en/xdiff-cleanup later to maint).
* "git format-patch --range-diff=... --notes=..." did not drive the
underlying range-diff with correct --notes parameter, ending up
comparing with different set of notes from its main patch output
you would get from "git format-patch --notes=..." for a singleton
patch.
* The code in "git add -p" and friends to iterate over hunks was
riddled with bugs, which has been corrected.
* A few more things that patch authors can do to help maintainer to
keep track of their topics better.
(merge 1a41698841 tb/doc-submitting-patches later to maint).
* An earlier addition to "git diff --no-index A B" to limit the
output with pathspec after the two directories misbehaved when
these directories were given with a trailing slash, which has been
corrected.
* The "--short" option of "git status" that meant output for humans
and "-z" option to show NUL delimited output format did not mix
well, and colored some but not all things. The command has been
updated to color all elements consistently in such a case.
* Unicode width table update.
* GPG signing test set-up has been broken for a year, which has been
corrected.
(merge 516bf45749 jc/t1016-setup-fix later to maint).
* Recent OpenSSH creates the Unix domain socket to communicate with
ssh-agent under $HOME instead of /tmp, which causes our test to
fail doe to overly long pathname in our test environment, which has
been worked around by using "ssh-agent -T".
* strbuf_split*() to split a string into multiple strbufs is often a
wrong API to use. A few uses of it have been removed by
simplifying the code.
(merge 2ab72a16d9 ob/gpg-interface-cleanup later to maint).
* "git shortlog" knows "--committer" and "--author" options, which
the command line completion (in contrib/) did not handle well,
which has been corrected.
(merge c568fa8e1c kf/log-shortlog-completion-fix later to maint).
* "git bisect" command did not react correctly to "git bisect help"
and "git bisect unknown", which has been corrected.
(merge 2bb3a012f3 rz/bisect-help-unknown later to maint).
* The 'q'(uit) command in "git add -p" has been improved to quit
without doing any meaningless work before leaving, and giving EOF
(typically control-D) to the prompt is made to behave the same way.
* The wildmatch code had a corner case bug that mistakenly makes
"foo**/bar" match with "foobar", which has been corrected.
(merge 1940a02dc1 jk/match-pathname-fix later to maint).
* Tests did not set up GNUPGHOME correctly, which is fixed but some
flaky tests are exposed in t1016, which needs to be addressed
before this topic can move forward.
(merge 6cd8369ef3 tz/test-prepare-gnupghome later to maint).
* The patterns used in the .gitignore files use backslash in the way
documented for fnmatch(3); document as such to reduce confusion.
(merge 8a6d158a1d jk/doc-backslash-in-exclude later to maint).
* The version of macos image used in GitHub CI has been updated to
macos-14, as the macos-13 that we have been using got deprecated.
Perforce binary used there has been changed to arm64 version to
match.
(merge 73b9cdb7c4 jc/ci-use-macos-14 later to maint).
(merge ffff0bb0da jc/ci-use-arm64-p4-on-macos later to maint).
* Other code cleanup, docfix, build fix, etc.
(merge 529a60a885 ua/t1517-short-help-tests later to maint).
(merge 22d421fed9 ac/deglobal-fmt-merge-log-config later to maint).
(merge a60203a015 dk/t7005-editor-updates later to maint).
(merge 16684b6fae ps/reftable-libgit2-cleanup later to maint).
(merge e5c27bd3d8 je/doc-add later to maint).
(merge 13296ac909 ps/object-store-midx-dedup-info later to maint).
(merge f9a6705d9a tc/t0450-harden later to maint).
(merge a66fc22bf9 rs/get-oid-with-flags-cleanup later to maint).
(merge 15b8abde07 js/mingw-includes-cleanup later to maint).
(merge 2cebca0582 tb/cat-file-objectmode-update later to maint).
(merge 8f487db07a kh/doc-patch-id-1 later to maint).
(merge f711f37b05 eb/t1016-hash-transition-fix later to maint).
(merge 85333aa1af jk/test-delete-gpgsig-leakfix later to maint).

View File

@ -1,265 +0,0 @@
Git v2.53 Release Notes
=======================
UI, Workflows & Features
------------------------
* "git maintenance" command learned "is-needed" subcommand to tell if
it is necessary to perform various maintenance tasks.
* "git replay" (experimental) learned to perform ref updates itself
in a transaction by default, instead of emitting where each refs
should point at and leaving the actual update to another command.
* "git blame" learns "--diff-algorithm=<algo>" option.
* "git repo info" learned "--all" option.
* Both "git apply" and "git diff" learn a new whitespace error class,
"incomplete-line".
* Add a new manual that describes the data model.
* "git fast-import" learns "--strip-if-invalid" option to drop
invalid cryptographic signature from objects.
* The use of "revision" (a connected set of commits) has been
clarified in the "git replay" documentation.
* A help message from "git branch" now mentions "git help" instead of
"man" when suggesting to read some documentation.
* "git repo struct" learned to take "-z" as a synonym to "--format=nul".
* More object database related information are shown in "git repo
structure" output.
Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
* The list of packfiles used in a running Git process is moved from
the packed_git structure into the packfile store.
* Some ref backend storage can hold not just the object name of an
annotated tag, but the object name of the object the tag points at.
The code to handle this information has been streamlined.
* As "git diff --quiet" only cares about the existence of any
changes, disable rename/copy detection to skip more expensive
processing whose result will be discarded anyway.
* A part of code paths that deals with loose objects has been cleaned
up.
* "make strip" has been taught to strip "scalar" as well as "git".
* Dockerised jobs at the GitHub Actions CI have been taught to show
more details of failed tests.
* Code refactoring around object database sources.
* Halve the memory consumed by artificial filepairs created during
"git diff --find-copioes-harder", also making the operation run
faster.
* The "git_istream" abstraction has been revamped to make it easier
to interface with pluggable object database design.
* Rewrite the only use of "mktemp()" that is subject to TOCTOU race
and Stop using the insecure "mktemp()" function.
(merge 10bba537c4 rs/ban-mktemp later to maint).
* In-code comment update to clarify that single-letter options are
outside of the scope of command line completion script.
(merge dc8a00fafe jc/completion-no-single-letter-options later to maint).
* MEMZERO_ARRAY() helper is introduced to avoid clearing only the
first N bytes of an N-element array whose elements are larger than
a byte.
* "git diff-files -R --find-copies-harder" has been taught to use
the potential copy sources from the index correctly.
* Require C99 style flexible array member support from all platforms.
* The code path that enumerates promisor objects have been optimized
to skip pointlessly parsing blob objects.
* Prepare test suite for Git for Windows that supports symbolic
links.
* Use hook API to replace ad-hoc invocation of hook scripts with the
run_command() API.
Fixes since v2.52
-----------------
* Ever since we added whitespace rules for this project, we misspelt
an entry, which has been corrected.
(merge 358e94dc70 jc/gitattributes-whitespace-no-indent-fix later to maint).
* The code to expand attribute macros has been rewritten to avoid
recursion to avoid running out of stack space in an uncontrolled
way.
(merge 42ed046866 jk/attr-macroexpand-wo-recursion later to maint).
* Adding a repository that uses a different hash function is a no-no,
but "git submodule add" did nt prevent it, which has been corrected.
(merge 6fe288bfbc bc/submodule-force-same-hash later to maint).
* An earlier check added to osx keychain credential helper to avoid
storing the credential itself supplied was overeager and rejected
credential material supplied by other helper backends that it would
have wanted to store, which has been corrected.
(merge 4580bcd235 kn/osxkeychain-idempotent-store-fix later to maint).
* The "git repo structure" subcommand tried to align its output but
mixed up byte count and display column width, which has been
corrected.
(merge 7a03a10a3a jx/repo-struct-utf8width-fix later to maint).
* Yet another corner case fix around renames in the "ort" merge
strategy.
(merge a562d90a35 en/ort-rename-another-fix later to maint).
* Test leakfix.
(merge 14b561e768 jk/test-mktemp-leakfix later to maint).
* Update a version of action used at the GitHub Actrions CI.
(merge cd99203f86 js/ci-github-setup-go-update later to maint).
* The "return errno = EFOO, -1" construct, which is heavily used in
compat/mingw.c and triggers warnings under "-Wcomma", has been
rewritten to avoid the warnings.
(merge af3919816f js/mingw-assign-comma-fix later to maint).
* Makefile based build have recently been updated to build a
libgit.a that also has reftable and xdiff objects; CMake based
build procedure has been updated to match.
(merge b0d5c88cca js/cmake-libgit-fix later to maint).
* Under-allocation fix.
(merge d22a488482 js/wincred-get-credential-alloc-fix later to maint).
* "git worktree list" attempts to show paths to worktrees while
aligning them, but miscounted display columns for the paths when
non-ASCII characters were involved, which has been corrected.
(merge 08dfa59835 pw/worktree-list-display-width-fix later to maint).
* "Windows+meson" job at the GitHub Actions CI was hard to debug, as
it did not show and save failed test artifacts, which has been
corrected.
(merge 17bd1108ea jk/ci-windows-meson-test-fix later to maint).
* Emulation code clean-up.
(merge 2367c6bcd6 gf/win32-pthread-cond-wait-err later to maint).
* Various issues detected by Asan have been corrected.
(merge a031b6181a jk/asan-bonanza later to maint).
* "git config get --path" segfaulted on an ":(optional)path" that
does not exist, which has been corrected.
(merge 0bd16856ff jc/optional-path later to maint).
* The "--committer-date-is-author-date" option of "git am/rebase" is
a misguided one. The documentation is updated to discourage its
use.
(merge fbf3d0669f kh/doc-committer-date-is-author-date later to maint).
* The option help text given by "git config unset -h" described
the "--all" option to "replace", not "unset", multiple variables,
which has been corrected.
(merge 18bf67b753 rs/config-unset-opthelp-fix later to maint).
* The error message given by "git config set", when the variable
being updated has more than one values defined, used old style "git
config" syntax with an incorrect option in its hint, both of which
have been corrected.
(merge df963f0df4 rs/config-set-multi-error-message-fix later to maint).
* "git replay" forgot to omit the "gpgsig-sha256" extended header
from the resulting commit the same way it omits "gpgsig", which has
been corrected.
(merge 9f3a115087 pw/replay-exclude-gpgsig-fix later to maint).
* A few tests have been updated to work under the shell compatible
mode of zsh.
(merge a92f243a94 bc/zsh-testsuite later to maint).
* The way patience diff finds LCS has been optimized.
(merge c7e3b8085b yc/xdiff-patience-optim later to maint).
* Recent optimization to "last-modified" command introduced use of
uninitialized block of memory, which has been corrected.
(merge fe4e60759b tc/last-modified-active-paths-optimization later to maint).
* "git last-modified" used to mishandle "--" to mark the beginning of
pathspec, which has been corrected.
(merge 05491b90ce js/last-modified-with-sparse-checkouts later to maint).
* Emulation code clean-up.
(merge 42aa7603aa gf/win32-pthread-cond-init later to maint).
* "git submodule add" to add a submodule under <name> segfaulted,
when a submodule.<name>.something is already in .gitmodules file
without defining where its submodule.<name>.path is, which has been
corrected.
(merge dd8e8c786e jc/submodule-add later to maint).
* "git fetch" that involves fetching tags, when a tag being fetched
needs to overwrite existing one, failed to fetch other tags, which
has been corrected.
(merge b7b17ec8a6 kn/fix-fetch-backfill-tag-with-batched-ref-updates later to maint).
* Document "rev-list --filter-provided-objects" better.
(merge 6d8dc99478 jt/doc-rev-list-filter-provided-objects later to maint).
* Even when there is no changes in the packfile and no need to
recompute bitmaps, "git repack" recomputed and updated the MIDX
file, which has been corrected.
(merge 6ce9d558ce ps/repack-avoid-noop-midx-rewrite later to maint).
* Update HTTP tests to adjust for changes in curl 8.18.0
(merge 17f4b01da7 jk/test-curl-updates later to maint).
* Workaround the "iconv" shipped as part of macOS, which is broken
handling stateful ISO/IEC 2022 encoded strings.
(merge cee341e9dd rs/macos-iconv-workaround later to maint).
* Running "git diff" with "--name-only" and other options that allows
us not to look at the blob contents, while objects that are lazily
fetched from a promisor remote, caused use-after-free, which has
been corrected.
* The ort merge machinery hit an assertion failure in a history with
criss-cross merges renamed a directory and a non-directory, which
has been corrected.
(merge 979ee83e8a en/ort-recursive-d-f-conflict-fix later to maint).
* Other code cleanup, docfix, build fix, etc.
(merge 46207a54cc qj/doc-http-bad-want-response later to maint).
(merge df90eccd93 kh/doc-commit-extra-references later to maint).
(merge f18aa68861 rs/xmkstemp-simplify later to maint).
(merge fddba8f737 ja/doc-synopsis-style later to maint).
(merge 22ce0cb639 en/xdiff-cleanup-2 later to maint).
(merge 8ef7355a8f je/doc-pull later to maint).
(merge 48176f953f jc/capability-leak later to maint).
(merge 8cbbdc92f7 kh/doc-pre-commit-fix later to maint).
(merge d4bc39a4d9 mh/doc-config-gui-gcwarning later to maint).
(merge 41d425008a kh/doc-send-email-paragraph-fix later to maint).
(merge d4b732899e jc/macports-darwinports later to maint).
(merge bab391761d kj/pull-options-decl-cleanup later to maint).
(merge 007b8994d4 rs/t4014-git-version-string-fix later to maint).
(merge 4ce170c522 ds/doc-scalar-config later to maint).
(merge a0c813951a jc/doc-commit-signoff-config later to maint).
(merge 8ee262985a ja/doc-misc-fixes later to maint).
(merge 1722c2244b mh/doc-core-attributesfile later to maint).
(merge c469ca26c5 dk/ci-rust-fix later to maint).
(merge 12f0be0857 gf/clear-path-cache-cleanup later to maint).
(merge 949df6ed6b js/test-func-comment-fix later to maint).
(merge 93f894c001 bc/checkout-error-message-fix later to maint).
(merge abf05d856f rs/show-branch-prio-queue later to maint).
(merge 06188ea5f3 rs/parse-config-expiry-simplify later to maint).
(merge 861dbb1586 dd/t5403-modernise later to maint).

View File

@ -408,15 +408,8 @@ your patch differs from project to project, so it may be different
from that of the project you are accustomed to.
[[real-name]]
Please use a known identity in the `Signed-off-by` trailer, since we cannot
accept anonymous contributions. It is common, but not required, to use some form
of your real name. We realize that some contributors are not comfortable doing
so or prefer to contribute under a pseudonym or preferred name and we can accept
your patch either way, as long as the name and email you use are distinctive,
identifying, and not misleading.
The goal of this policy is to allow us to have sufficient information to contact
you if questions arise about your contribution.
Also notice that a real name is used in the `Signed-off-by` trailer. Please
don't hide your real name.
[[commit-trailers]]
If you like, you can put extra trailers at the end:
@ -446,34 +439,6 @@ highlighted above.
Only capitalize the very first letter of the trailer, i.e. favor
"Signed-off-by" over "Signed-Off-By" and "Acked-by:" over "Acked-By".
[[ai]]
=== Use of Artificial Intelligence (AI)
The Developer's Certificate of Origin requires contributors to certify
that they know the origin of their contributions to the project and
that they have the right to submit it under the project's license.
It's not yet clear that this can be legally satisfied when submitting
significant amount of content that has been generated by AI tools.
Another issue with AI generated content is that AIs still often
hallucinate or just produce bad code, commit messages, documentation
or output, even when you point out their mistakes.
To avoid these issues, we will reject anything that looks AI
generated, that sounds overly formal or bloated, that looks like AI
slop, that looks good on the surface but makes no sense, or that
senders dont understand or cannot explain.
We strongly recommend using AI tools carefully and responsibly.
Contributors would often benefit more from AI by using it to guide and
help them step by step towards producing a solution by themselves
rather than by asking for a full solution that they would then mostly
copy-paste. They can also use AI to help with debugging, or with
checking for obvious mistakes, things that can be improved, things
that dont match our style, guidelines or our feedback, before sending
it to us.
[[git-tools]]
=== Generate your patch using Git tools out of your commits.
@ -607,27 +572,14 @@ line via `git format-patch --notes`.
[[the-topic-summary]]
*This is EXPERIMENTAL*.
When sending a topic, you can optionally propose a topic name and/or a
one-paragraph summary that should appear in the "What's cooking"
report when it is picked up to explain the topic. If you choose to do
so, please write a 2-5 line paragraph that will fit well in our
release notes (see many bulleted entries in the
Documentation/RelNotes/* files for examples), and make it the first
(or second, if including a suggested topic name) paragraph of the
cover letter. If suggesting a topic name, use the format
"XX/your-topic-name", where "XX" is a stand-in for the primary
author's initials, and "your-topic-name" is a brief, dash-delimited
description of what your topic does. For a single-patch series, use
the space between the three-dash line and the diffstat, as described
earlier.
[[multi-series-efforts]]
If your patch series is part of a larger effort spanning multiple
patch series, briefly describe the broader goal, and state where the
current series fits into that goal. If you are suggesting a topic
name as in <<the-topic-summary, section above>>, consider
"XX/the-broader-goal-part-one", "XX/the-broader-goal-part-two", and so
on.
When sending a topic, you can propose a one-paragraph summary that
should appear in the "What's cooking" report when it is picked up to
explain the topic. If you choose to do so, please write a 2-5 line
paragraph that will fit well in our release notes (see many bulleted
entries in the Documentation/RelNotes/* files for examples), and make
it the first paragraph of the cover letter. For a single-patch
series, use the space between the three-dash line and the diffstat, as
described earlier.
[[attachment]]
Do not attach the patch as a MIME attachment, compressed or not.

View File

@ -43,7 +43,7 @@ ifdef::doctype-book[]
endif::doctype-book[]
[literal-inlinemacro]
{eval:re.sub(r'(&lt;[-a-zA-Z0-9.]+&gt;)', r'<emphasis>\1</emphasis>', re.sub(r'([\[\s|()>]|^|\]|&gt;)(\.?([-a-zA-Z0-9:+=~@\\\*\/_^\$%]+\.?)+|,)',r'\1<literal>\2</literal>', re.sub(r'(\.\.\.?)([^\]$.])', r'<literal>\1</literal>\2', macros.passthroughs[int(attrs['passtext'][1:-1])] if attrs['passtext'][1:-1].isnumeric() else attrs['passtext'][1:-1])))}
{eval:re.sub(r'(&lt;[-a-zA-Z0-9.]+&gt;)', r'<emphasis>\1</emphasis>', re.sub(r'([\[\s|()>]|^|\]|&gt;)(\.?([-a-zA-Z0-9:+=~@\\\*\/_^\$]+\.?)+|,)',r'\1<literal>\2</literal>', re.sub(r'(\.\.\.?)([^\]$.])', r'<literal>\1</literal>\2', macros.passthroughs[int(attrs['passtext'][1:-1])] if attrs['passtext'][1:-1].isnumeric() else attrs['passtext'][1:-1])))}
endif::backend-docbook[]

View File

@ -73,7 +73,7 @@ module Git
elsif type == :monospaced
node.text.gsub(/(\.\.\.?)([^\]$\.])/, '<literal>\1</literal>\2')
.gsub(/^\.\.\.?$/, '<literal>\0</literal>')
.gsub(%r{([\[\s|()>.]|^|\]|&gt;)(\.?([-a-zA-Z0-9:+=~@/_^\$\\\*%]+\.{0,2})+|,)}, '\1<literal>\2</literal>')
.gsub(%r{([\[\s|()>.]|^|\]|&gt;)(\.?([-a-zA-Z0-9:+=~@/_^\$\\\*]+\.{0,2})+|,)}, '\1<literal>\2</literal>')
.gsub(/(&lt;[-a-zA-Z0-9.]+&gt;)/, '<emphasis>\1</emphasis>')
else
open, close, supports_phrase = QUOTE_TAGS[type]
@ -102,7 +102,7 @@ module Git
if node.type == :monospaced
node.text.gsub(/(\.\.\.?)([^\]$.])/, '<code>\1</code>\2')
.gsub(/^\.\.\.?$/, '<code>\0</code>')
.gsub(%r{([\[\s|()>.]|^|\]|&gt;)(\.?([-a-zA-Z0-9:+=~@,/_^\$\\\*%]+\.{0,2})+)}, '\1<code>\2</code>')
.gsub(%r{([\[\s|()>.]|^|\]|&gt;)(\.?([-a-zA-Z0-9:+=~@,/_^\$\\\*]+\.{0,2})+)}, '\1<code>\2</code>')
.gsub(/(&lt;[-a-zA-Z0-9.]+&gt;)/, '<em>\1</em>')
else

View File

@ -75,8 +75,7 @@ include::line-range-format.adoc[]
iso format is used. For supported values, see the discussion
of the --date option at linkgit:git-log[1].
--progress::
--no-progress::
--[no-]progress::
Progress status is reported on the standard error stream
by default when it is attached to a terminal. This flag
enables progress reporting even if not attached to a

View File

@ -114,7 +114,8 @@ whose format and meaning depends on the keyword. Supported keywords
are:
`gitdir`::
The data that follows the keyword `gitdir` and a colon is used as a glob
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.
+
@ -147,7 +148,7 @@ refer to linkgit:gitignore[5] for details. For convenience:
case-insensitively (e.g. on case-insensitive file systems)
`onbranch`::
The data that follows the keyword `onbranch` and a colon is taken to be a
The data that follows the keyword `onbranch:` is taken to be a
pattern with standard globbing wildcards and two additional
ones, `**/` and `/**`, that can match multiple path components.
If we are in a worktree where the name of the branch that is
@ -160,8 +161,8 @@ all branches that begin with `foo/`. This is useful if your branches are
organized hierarchically and you would like to apply a configuration to
all the branches in that hierarchy.
`hasconfig:remote.*.url`::
The data that follows this keyword and a colon is taken to
`hasconfig:remote.*.url:`::
The data that follows this keyword is taken to
be a pattern with standard globbing wildcards and two
additional ones, `**/` and `/**`, that can match multiple
components. The first time this keyword is seen, the rest of
@ -357,9 +358,7 @@ compiled without runtime prefix support, the compiled-in prefix will be
substituted instead. In the unlikely event that a literal path needs to
be specified that should _not_ be expanded, it needs to be prefixed by
`./`, like so: `./%(prefix)/bin`.
+
If prefixed with `:(optional)`, the configuration variable is treated
as if it does not exist, if the named path does not exist.
Variables
~~~~~~~~~

View File

@ -3,8 +3,7 @@ alias.*::
after defining `alias.last = cat-file commit HEAD`, the invocation
`git last` is equivalent to `git cat-file commit HEAD`. To avoid
confusion and troubles with script usage, aliases that
hide existing Git commands are ignored except for deprecated
commands. Arguments are split by
hide existing Git commands are ignored. Arguments are split by
spaces, the usual shell quoting and escaping are supported.
A quote pair or a backslash can be used to quote them.
+
@ -39,6 +38,6 @@ it will be treated as a shell command. For example, defining
** A convenient way to deal with this is to write your script
operations in an inline function that is then called with any
arguments from the command-line. For example `alias.cmd = "!c() {
echo $1 | grep $2 ; }; c"` will correctly execute the prior example.
echo $1 | grep $2 ; }; c" will correctly execute the prior example.
** Setting `GIT_TRACE=1` can help you debug the command being run for
your alias.

View File

@ -69,9 +69,9 @@ This option defaults to `never`.
`git fetch`) to lookup the default branch for merging. Without
this option, `git pull` defaults to merge the first refspec fetched.
Specify multiple values to get an octopus merge.
If you wish to setup `git pull` so that it merges into _<name>_ from
If you wish to setup `git pull` so that it merges into <name> from
another branch in the local repository, you can point
`branch.<name>.merge` to the desired branch, and use the relative path
branch.<name>.merge to the desired branch, and use the relative path
setting `.` (a period) for `branch.<name>.remote`.
`branch.<name>.mergeOptions`::

View File

@ -8,17 +8,6 @@ commitGraph.maxNewFilters::
Specifies the default value for the `--max-new-filters` option of `git
commit-graph write` (c.f., linkgit:git-commit-graph[1]).
commitGraph.changedPaths::
If true, then `git commit-graph write` will compute and write
changed-path Bloom filters by default, equivalent to passing
`--changed-paths`. If false or unset, changed-paths Bloom filters will
be written during `git commit-graph write` only if the filters already
exist in the current commit-graph file. This matches the default
behavior of `git commit-graph write` without any `--[no-]changed-paths`
option. To rewrite a commit-graph file without any filters, use the
`--no-changed-paths` option. Command-line option `--[no-]changed-paths`
always takes precedence over this configuration. Defaults to unset.
commitGraph.readChangedPaths::
Deprecated. Equivalent to commitGraph.changedPathsVersion=-1 if true, and
commitGraph.changedPathsVersion=0 if false. (If commitGraph.changedPathVersion

View File

@ -75,8 +75,8 @@ The built-in file system monitor is currently available only on a
limited set of supported platforms. Currently, this includes Windows
and MacOS.
+
Otherwise, this variable contains the pathname of the "fsmonitor"
hook command.
Otherwise, this variable contains the pathname of the "fsmonitor"
hook command.
+
This hook command is used to identify all files that may have changed
since the requested date/time. This information is used to speed up
@ -290,9 +290,6 @@ core.preferSymlinkRefs::
and other symbolic reference files, use symbolic links.
This is sometimes needed to work with old scripts that
expect HEAD to be a symbolic link.
+
This configuration is deprecated and will be removed in Git 3.0. Symbolic refs
will always be written as textual symrefs.
core.alternateRefsCommand::
When advertising tips of available history from an alternate, use the shell to
@ -492,9 +489,10 @@ core.askPass::
command-line argument and write the password on its STDOUT.
core.attributesFile::
Specifies the pathname to the file that contains attributes (see
linkgit:gitattributes[5]), in addition to `.gitattributes` (per-directory)
and `.git/info/attributes`. Its default value is
In addition to `.gitattributes` (per-directory) and
`.git/info/attributes`, Git looks into this file for attributes
(see linkgit:gitattributes[5]). Path expansions are made the same
way as for `core.excludesFile`. Its default value is
`$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not
set or empty, `$HOME/.config/git/attributes` is used instead.
@ -533,25 +531,9 @@ core.commentString::
commented, and removes them after the editor returns
(default '#').
+
ifndef::with-breaking-changes[]
If set to "auto", `git-commit` will select a character that is not
If set to "auto", `git-commit` would select a character that is not
the beginning character of any line in existing commit messages.
Support for this value is deprecated and will be removed in Git 3.0
due to the following limitations:
+
--
* It is incompatible with adding comments in a commit message
template. This includes the conflicts comments added to
the commit message by `cherry-pick`, `merge`, `rebase` and
`revert`.
* It is incompatible with adding comments to the commit message
in the `prepare-commit-msg` hook.
* It is incompatible with the `fixup` and `squash` commands when
rebasing,
* It is not respected by `git notes`
--
+
endif::with-breaking-changes[]
Note that these two variables are aliases of each other, and in modern
versions of Git you are free to use a string (e.g., `//` or `⁑⁕⁑`) with
`commentChar`. Versions of Git prior to v2.45.0 will ignore
@ -628,8 +610,6 @@ core.whitespace::
part of the line terminator, i.e. with it, `trailing-space`
does not trigger if the character before such a carriage-return
is not a whitespace (not enabled by default).
* `incomplete-line` treats the last line of a file that is missing the
newline at the end as an error (not enabled by default).
* `tabwidth=<n>` tells how many character positions a tab occupies; this
is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
errors. The default tab width is 8. Allowed values are 1 to 63.
@ -716,6 +696,12 @@ core.unsetenvvars::
Defaults to `PERL5LIB` to account for the fact that Git for
Windows insists on using its own Perl interpreter.
core.restrictinheritedhandles::
Windows-only: override whether spawned processes inherit only standard
file handles (`stdin`, `stdout` and `stderr`) or all handles. Can be
`auto`, `true` or `false`. Defaults to `auto`, which means `true` on
Windows 7 and later, and `false` on older Windows versions.
core.createObject::
You can set this to 'link', in which case a hardlink followed by
a delete of the source are used to make sure that object creation

View File

@ -3,7 +3,8 @@ extensions.*::
`core.repositoryFormatVersion` is not `1`. See
linkgit:gitrepository-layout[5].
+
compatObjectFormat:::
--
compatObjectFormat::
Specify a compatibility hash algorithm to use. The acceptable values
are `sha1` and `sha256`. The value specified must be different from the
value of `extensions.objectFormat`. This allows client level
@ -13,23 +14,19 @@ compatObjectFormat:::
compatObjectFormat. As well as being able to use oids encoded in
compatObjectFormat in addition to oids encoded with objectFormat to
locally specify objects.
+
Note that the functionality enabled by this extension is incomplete and subject
to change. It currently exists only to allow development and testing of
the underlying feature and is not designed to be enabled by end users.
noop:::
noop::
This extension does not change git's behavior at all. It is useful only
for testing format-1 compatibility.
+
For historical reasons, this extension is respected regardless of the
`core.repositoryFormatVersion` setting.
noop-v1:::
noop-v1::
This extension does not change git's behavior at all. It is useful only
for testing format-1 compatibility.
objectFormat:::
objectFormat::
Specify the hash algorithm to use. The acceptable values are `sha1` and
`sha256`. If not specified, `sha1` is assumed.
+
@ -37,7 +34,7 @@ Note that this setting should only be set by linkgit:git-init[1] or
linkgit:git-clone[1]. Trying to change it after initialization will not
work and will produce hard-to-diagnose issues.
partialClone:::
partialClone::
When enabled, indicates that the repo was created with a partial clone
(or later performed a partial fetch) and that the remote may have
omitted sending certain unwanted objects. Such a remote is called a
@ -49,31 +46,30 @@ The value of this key is the name of the promisor remote.
For historical reasons, this extension is respected regardless of the
`core.repositoryFormatVersion` setting.
preciousObjects:::
preciousObjects::
If enabled, indicates that objects in the repository MUST NOT be deleted
(e.g., by `git-prune` or `git repack -d`).
+
For historical reasons, this extension is respected regardless of the
`core.repositoryFormatVersion` setting.
refStorage:::
refStorage::
Specify the ref storage format to use. The acceptable values are:
+
--
include::../ref-storage-format.adoc[]
--
+
Note that this setting should only be set by linkgit:git-init[1] or
linkgit:git-clone[1]. Trying to change it after initialization will not
work and will produce hard-to-diagnose issues.
relativeWorktrees:::
relativeWorktrees::
If enabled, indicates at least one worktree has been linked with
relative paths. Automatically set if a worktree has been created or
repaired with either the `--relative-paths` option or with the
`worktree.useRelativePaths` config set to `true`.
worktreeConfig:::
worktreeConfig::
If enabled, then worktrees will load config settings from the
`$GIT_DIR/config.worktree` file in addition to the
`$GIT_COMMON_DIR/config` file. Note that `$GIT_COMMON_DIR` and
@ -87,12 +83,11 @@ When enabling this extension, you must be careful to move
certain values from the common config file to the main working tree's
`config.worktree` file, if present:
+
--
* `core.worktree` must be moved from `$GIT_COMMON_DIR/config` to
`$GIT_COMMON_DIR/config.worktree`.
* If `core.bare` is true, then it must be moved from `$GIT_COMMON_DIR/config`
to `$GIT_COMMON_DIR/config.worktree`.
--
+
It may also be beneficial to adjust the locations of `core.sparseCheckout`
and `core.sparseCheckoutCone` depending on your desire for customizable
@ -105,3 +100,4 @@ details.
+
For historical reasons, this extension is respected regardless of the
`core.repositoryFormatVersion` setting.
--

View File

@ -20,16 +20,6 @@ walking fewer objects.
+
* `pack.allowPackReuse=multi` may improve the time it takes to create a pack by
reusing objects from multiple packs instead of just one.
+
* `pack.usePathWalk` may speed up packfile creation and make the packfiles be
significantly smaller in the presence of certain filename collisions with Git's
default name-hash.
+
* `init.defaultRefFormat=reftable` causes newly initialized repositories to use
the reftable format for storing references. This new format solves issues with
case-insensitive filesystems, compresses better and performs significantly
better with many use cases. Refer to Documentation/technical/reftable.adoc for
more information on this new storage format.
feature.manyFiles::
Enable config options that optimize for repos with many files in the

View File

@ -1,32 +1,32 @@
`fetch.recurseSubmodules`::
fetch.recurseSubmodules::
This option controls whether `git fetch` (and the underlying fetch
in `git pull`) will recursively fetch into populated submodules.
This option can be set either to a boolean value or to `on-demand`.
This option can be set either to a boolean value or to 'on-demand'.
Setting it to a boolean changes the behavior of fetch and pull to
recurse unconditionally into submodules when set to true or to not
recurse at all when set to false. When set to `on-demand`, fetch and
recurse at all when set to false. When set to 'on-demand', fetch and
pull will only recurse into a populated submodule when its
superproject retrieves a commit that updates the submodule's
reference.
Defaults to `on-demand`, or to the value of `submodule.recurse` if set.
Defaults to 'on-demand', or to the value of 'submodule.recurse' if set.
`fetch.fsckObjects`::
fetch.fsckObjects::
If it is set to true, git-fetch-pack will check all fetched
objects. See `transfer.fsckObjects` for what's
checked. Defaults to `false`. If not set, the value of
checked. Defaults to false. If not set, the value of
`transfer.fsckObjects` is used instead.
`fetch.fsck.<msg-id>`::
fetch.fsck.<msg-id>::
Acts like `fsck.<msg-id>`, but is used by
linkgit:git-fetch-pack[1] instead of linkgit:git-fsck[1]. See
the `fsck.<msg-id>` documentation for details.
`fetch.fsck.skipList`::
fetch.fsck.skipList::
Acts like `fsck.skipList`, but is used by
linkgit:git-fetch-pack[1] instead of linkgit:git-fsck[1]. See
the `fsck.skipList` documentation for details.
`fetch.unpackLimit`::
fetch.unpackLimit::
If the number of objects fetched over the Git native
transfer is below this
limit, then the objects will be unpacked into loose object
@ -37,12 +37,12 @@
especially on slow filesystems. If not set, the value of
`transfer.unpackLimit` is used instead.
`fetch.prune`::
fetch.prune::
If true, fetch will automatically behave as if the `--prune`
option was given on the command line. See also `remote.<name>.prune`
and the PRUNING section of linkgit:git-fetch[1].
`fetch.pruneTags`::
fetch.pruneTags::
If true, fetch will automatically behave as if the
`refs/tags/*:refs/tags/*` refspec was provided when pruning,
if not set already. This allows for setting both this option
@ -50,41 +50,41 @@
refs. See also `remote.<name>.pruneTags` and the PRUNING
section of linkgit:git-fetch[1].
`fetch.all`::
fetch.all::
If true, fetch will attempt to update all available remotes.
This behavior can be overridden by passing `--no-all` or by
explicitly specifying one or more remote(s) to fetch from.
Defaults to `false`.
Defaults to false.
`fetch.output`::
fetch.output::
Control how ref update status is printed. Valid values are
`full` and `compact`. Default value is `full`. See the
OUTPUT section in linkgit:git-fetch[1] for details.
`fetch.negotiationAlgorithm`::
fetch.negotiationAlgorithm::
Control how information about the commits in the local repository
is sent when negotiating the contents of the packfile to be sent by
the server. Set to `consecutive` to use an algorithm that walks
over consecutive commits checking each one. Set to `skipping` to
the server. Set to "consecutive" to use an algorithm that walks
over consecutive commits checking each one. Set to "skipping" to
use an algorithm that skips commits in an effort to converge
faster, but may result in a larger-than-necessary packfile; or set
to `noop` to not send any information at all, which will almost
to "noop" to not send any information at all, which will almost
certainly result in a larger-than-necessary packfile, but will skip
the negotiation step. Set to `default` to override settings made
the negotiation step. Set to "default" to override settings made
previously and use the default behaviour. The default is normally
`consecutive`, but if `feature.experimental` is `true`, then the
default is `skipping`. Unknown values will cause `git fetch` to
"consecutive", but if `feature.experimental` is true, then the
default is "skipping". Unknown values will cause 'git fetch' to
error out.
+
See also the `--negotiate-only` and `--negotiation-tip` options to
linkgit:git-fetch[1].
`fetch.showForcedUpdates`::
Set to `false` to enable `--no-show-forced-updates` in
fetch.showForcedUpdates::
Set to false to enable `--no-show-forced-updates` in
linkgit:git-fetch[1] and linkgit:git-pull[1] commands.
Defaults to `true`.
Defaults to true.
`fetch.parallel`::
fetch.parallel::
Specifies the maximal number of fetch operations to be run in parallel
at a time (submodules, or remotes when the `--multiple` option of
linkgit:git-fetch[1] is in effect).
@ -94,16 +94,16 @@ A value of 0 will give some reasonable default. If unset, it defaults to 1.
For submodules, this setting can be overridden using the `submodule.fetchJobs`
config setting.
`fetch.writeCommitGraph`::
fetch.writeCommitGraph::
Set to true to write a commit-graph after every `git fetch` command
that downloads a pack-file from a remote. Using the `--split` option,
most executions will create a very small commit-graph file on top of
the existing commit-graph file(s). Occasionally, these files will
merge and the write may take longer. Having an updated commit-graph
file helps performance of many Git commands, including `git merge-base`,
`git push -f`, and `git log --graph`. Defaults to `false`.
`git push -f`, and `git log --graph`. Defaults to false.
`fetch.bundleURI`::
fetch.bundleURI::
This value stores a URI for downloading Git object data from a bundle
URI before performing an incremental fetch from the origin Git server.
This is similar to how the `--bundle-uri` option behaves in
@ -115,9 +115,9 @@ If you modify this value and your repository has a `fetch.bundleCreationToken`
value, then remove that `fetch.bundleCreationToken` value before fetching from
the new bundle URI.
`fetch.bundleCreationToken`::
fetch.bundleCreationToken::
When using `fetch.bundleURI` to fetch incrementally from a bundle
list that uses the "`creationToken`" heuristic, this config value
list that uses the "creationToken" heuristic, this config value
stores the maximum `creationToken` value of the downloaded bundles.
This value is used to prevent downloading bundles in the future
if the advertised `creationToken` is not strictly larger than this

View File

@ -68,15 +68,9 @@ format.encodeEmailHeaders::
Defaults to true.
format.pretty::
ifndef::with-breaking-changes[]
The default pretty format for log/show/whatchanged command.
See linkgit:git-log[1], linkgit:git-show[1],
linkgit:git-whatchanged[1].
endif::with-breaking-changes[]
ifdef::with-breaking-changes[]
The default pretty format for log/show command.
See linkgit:git-log[1], linkgit:git-show[1].
endif::with-breaking-changes[]
format.thread::
The default threading style for 'git format-patch'. Can be

View File

@ -1,5 +1,5 @@
gpg.program::
Pathname of the program to use instead of "`gpg`" when
Use this custom program instead of "`gpg`" found on `$PATH` when
making or verifying a PGP signature. The program must support the
same command-line interface as GPG, namely, to verify a detached
signature, "`gpg --verify $signature - <$file`" is run, and the

View File

@ -55,8 +55,3 @@ gui.blamehistoryctx::
linkgit:gitk[1] for the selected commit, when the `Show History
Context` menu item is invoked from 'git gui blame'. If this
variable is set to zero, the whole history is shown.
gui.GCWarning::
Determines whether linkgit:git-gui[1] should prompt for garbage
collection when git detects a large number of loose objects in
the repository. The default value is "true".

View File

@ -1,9 +1,7 @@
imap.folder::
The folder to drop the mails into, which is typically the Drafts
folder. For example: `INBOX.Drafts`, `INBOX/Drafts` or
`[Gmail]/Drafts`. The IMAP folder to interact with MUST be specified;
the value of this configuration variable is used as the fallback
default value when the `--folder` option is not given.
folder. For example: "INBOX.Drafts", "INBOX/Drafts" or
"[Gmail]/Drafts". Required.
imap.tunnel::
Command used to set up a tunnel to the IMAP server through which
@ -42,6 +40,5 @@ imap.authMethod::
Specify the authentication method for authenticating with the IMAP server.
If Git was built with the NO_CURL option, or if your curl version is older
than 7.34.0, or if you're running git-imap-send with the `--no-curl`
option, the only supported methods are `PLAIN`, `CRAM-MD5`, `OAUTHBEARER`
and `XOAUTH2`. If this is not set then `git imap-send` uses the basic IMAP
plaintext `LOGIN` command.
option, the only supported method is 'CRAM-MD5'. If this is not set
then 'git imap-send' uses the basic IMAP plaintext LOGIN command.

View File

@ -1,76 +1,64 @@
`log.abbrevCommit`::
If `true`, make
ifndef::with-breaking-changes[]
linkgit:git-log[1], linkgit:git-show[1], and
linkgit:git-whatchanged[1]
endif::with-breaking-changes[]
ifdef::with-breaking-changes[]
linkgit:git-log[1] and linkgit:git-show[1]
endif::with-breaking-changes[]
assume `--abbrev-commit`. You may
log.abbrevCommit::
If true, makes linkgit:git-log[1], linkgit:git-show[1], and
linkgit:git-whatchanged[1] assume `--abbrev-commit`. You may
override this option with `--no-abbrev-commit`.
`log.date`::
Set the default date-time mode for the `log` command.
Setting a value for log.date is similar to using `git log`'s
log.date::
Set the default date-time mode for the 'log' command.
Setting a value for log.date is similar to using 'git log''s
`--date` option. See linkgit:git-log[1] for details.
+
If the format is set to "auto:foo" and the pager is in use, format
"foo" will be used for the date format. Otherwise, "default" will
be used.
`log.decorate`::
log.decorate::
Print out the ref names of any commits that are shown by the log
command. Possible values are:
+
--
`short`;; the ref name prefixes `refs/heads/`, `refs/tags/` and
`refs/remotes/` are not printed.
`full`;; the full ref name (including prefix) are printed.
`auto`;; if the output is going to a terminal,
the ref names are shown as if `short` were given, otherwise no ref
names are shown.
--
+
This is the same as the `--decorate` option of the `git log`.
command. If 'short' is specified, the ref name prefixes 'refs/heads/',
'refs/tags/' and 'refs/remotes/' will not be printed. If 'full' is
specified, the full ref name (including prefix) will be printed.
If 'auto' is specified, then if the output is going to a terminal,
the ref names are shown as if 'short' were given, otherwise no ref
names are shown. This is the same as the `--decorate` option
of the `git log`.
`log.initialDecorationSet`::
log.initialDecorationSet::
By default, `git log` only shows decorations for certain known ref
namespaces. If 'all' is specified, then show all refs as
decorations.
`log.excludeDecoration`::
log.excludeDecoration::
Exclude the specified patterns from the log decorations. This is
similar to the `--decorate-refs-exclude` command-line option, but
the config option can be overridden by the `--decorate-refs`
option.
`log.diffMerges`::
log.diffMerges::
Set diff format to be used when `--diff-merges=on` is
specified, see `--diff-merges` in linkgit:git-log[1] for
details. Defaults to `separate`.
`log.follow`::
log.follow::
If `true`, `git log` will act as if the `--follow` option was used when
a single <path> is given. This has the same limitations as `--follow`,
i.e. it cannot be used to follow multiple files and does not work well
on non-linear history.
`log.graphColors`::
log.graphColors::
A list of colors, separated by commas, that can be used to draw
history lines in `git log --graph`.
`log.showRoot`::
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.
Tools like linkgit:git-log[1] or linkgit:git-whatchanged[1], which
normally hide the root commit will now show it. True by default.
`log.showSignature`::
log.showSignature::
If true, makes linkgit:git-log[1], linkgit:git-show[1], and
linkgit:git-whatchanged[1] assume `--show-signature`.
`log.mailmap`::
log.mailmap::
If true, makes linkgit:git-log[1], linkgit:git-show[1], and
linkgit:git-whatchanged[1] assume `--use-mailmap`, otherwise
assume `--no-use-mailmap`. True by default.

View File

@ -16,36 +16,19 @@ detach.
maintenance.strategy::
This string config option provides a way to specify one of a few
recommended strategies for repository maintenance. This affects
which tasks are run during `git maintenance run`, provided no
`--task=<task>` arguments are provided. This setting impacts manual
maintenance, auto-maintenance as well as scheduled maintenance. The
tasks that run may be different depending on the maintenance type.
recommended schedules for background maintenance. This only affects
which tasks are run during `git maintenance run --schedule=X`
commands, provided no `--task=<task>` arguments are provided.
Further, if a `maintenance.<task>.schedule` config value is set,
then that value is used instead of the one provided by
`maintenance.strategy`. The possible strategy strings are:
+
The maintenance strategy can be further tweaked by setting
`maintenance.<task>.enabled` and `maintenance.<task>.schedule`. If set, these
values are used instead of the defaults provided by `maintenance.strategy`.
+
The possible strategies are:
+
* `none`: This strategy implies no tasks are run at all. This is the default
strategy for scheduled maintenance.
* `gc`: This strategy runs the `gc` task. This is the default strategy for
manual maintenance.
* `geometric`: This strategy performs geometric repacking of packfiles and
keeps auxiliary data structures up-to-date. The strategy expires data in the
reflog and removes worktrees that cannot be located anymore. When the
geometric repacking strategy would decide to do an all-into-one repack, then
the strategy generates a cruft pack for all unreachable objects. Objects that
are already part of a cruft pack will be expired.
+
This repacking strategy is a full replacement for the `gc` strategy and is
recommended for large repositories.
* `none`: This default setting implies no tasks are run at any schedule.
* `incremental`: This setting optimizes for performing small maintenance
activities that do not delete any data. This does not schedule the `gc`
task, but runs the `prefetch` and `commit-graph` tasks hourly, the
`loose-objects` and `incremental-repack` tasks daily, and the `pack-refs`
task weekly. Manual repository maintenance uses the `gc` task.
task weekly.
maintenance.<task>.enabled::
This boolean config option controls whether the maintenance task
@ -92,22 +75,6 @@ maintenance.incremental-repack.auto::
number of pack-files not in the multi-pack-index is at least the value
of `maintenance.incremental-repack.auto`. The default value is 10.
maintenance.geometric-repack.auto::
This integer config option controls how often the `geometric-repack`
task should be run as part of `git maintenance run --auto`. If zero,
then the `geometric-repack` task will not run with the `--auto`
option. A negative value will force the task to run every time.
Otherwise, a positive value implies the command should run either when
there are packfiles that need to be merged together to retain the
geometric progression, or when there are at least this many loose
objects that would be written into a new packfile. The default value is
100.
maintenance.geometric-repack.splitFactor::
This integer config option controls the factor used for the geometric
sequence. See the `--geometric=` option in linkgit:git-repack[1] for
more details. Defaults to `2`.
maintenance.reflog-expire.auto::
This integer config option controls how often the `reflog-expire` task
should be run as part of `git maintenance run --auto`. If zero, then

View File

@ -81,18 +81,8 @@ as `false`. Defaults to `conflict`.
attributes" in linkgit:gitattributes[5].
`merge.stat`::
What, if anything, to print between `ORIG_HEAD` and the merge result
at the end of the merge. Possible values are:
+
--
`false`;; Show nothing.
`true`;; Show `git diff --diffstat --summary ORIG_HEAD`.
`compact`;; Show `git diff --compact-summary ORIG_HEAD`.
--
+
but any unrecognised value (e.g., a value added by a future version of
Git) is taken as `true` instead of triggering an error. Defaults to
`true`.
Whether to print the diffstat between `ORIG_HEAD` and the merge result
at the end of the merge. True by default.
`merge.autoStash`::
When set to `true`, automatically create a temporary stash entry

View File

@ -65,7 +65,7 @@ endif::[]
During a merge, Git will automatically resolve as many conflicts as
possible and write the `$MERGED` file containing conflict markers around
any conflicts that it cannot resolve; `$LOCAL` and `$REMOTE` normally
are the versions of the file from before Git's conflict
are the versions of the file from before Git`s conflict
resolution. This flag causes `$LOCAL` and `$REMOTE` to be overwritten so
that only the unresolved conflicts are presented to the merge tool. Can
be configured per-tool via the `mergetool.<tool>.hideResolved`

View File

@ -155,10 +155,6 @@ pack.useSparse::
commits contain certain types of direct renames. Default is
`true`.
pack.usePathWalk::
Enable the `--path-walk` option by default for `git pack-objects`
processes. See linkgit:git-pack-objects[1] for full details.
pack.preferBitmapTips::
When selecting which commits will receive bitmaps, prefer a
commit at the tip of any reference that is a suffix of any value

View File

@ -9,28 +9,6 @@ promisor.advertise::
"false", which means the "promisor-remote" capability is not
advertised.
promisor.sendFields::
A comma or space separated list of additional remote related
field names. A server sends these field names and the
associated field values from its configuration when
advertising its promisor remotes using the "promisor-remote"
capability, see linkgit:gitprotocol-v2[5]. Currently, only the
"partialCloneFilter" and "token" field names are supported.
+
`partialCloneFilter`:: contains the partial clone filter
used for the remote.
+
`token`:: contains an authentication token for the remote.
+
When a field name is part of this list and a corresponding
"remote.foo.<field-name>" config variable is set on the server to a
non-empty value, then the field name and value are sent when
advertising the promisor remote "foo".
+
This list has no effect unless the "promisor.advertise" config
variable is set to "true", and the "name" and "url" fields are always
advertised regardless of this setting.
promisor.acceptFromServer::
If set to "all", a client will accept all the promisor remotes
a server might advertise using the "promisor-remote"
@ -50,42 +28,3 @@ promisor.acceptFromServer::
lazily fetchable from this promisor remote from its responses
to "fetch" and "clone" requests from the client. Name and URL
comparisons are case sensitive. See linkgit:gitprotocol-v2[5].
promisor.checkFields::
A comma or space separated list of additional remote related
field names. A client checks if the values of these fields
transmitted by a server correspond to the values of these
fields in its own configuration before accepting a promisor
remote. Currently, "partialCloneFilter" and "token" are the
only supported field names.
+
If one of these field names (e.g., "token") is being checked for an
advertised promisor remote (e.g., "foo"), three conditions must be met
for the check of this specific field to pass:
+
1. The corresponding local configuration (e.g., `remote.foo.token`)
must be set.
2. The server must advertise the "token" field for remote "foo".
3. The value of the locally configured `remote.foo.token` must exactly
match the value advertised by the server for the "token" field.
+
If any of these conditions is not met for any field name listed in
`promisor.checkFields`, the advertised remote "foo" is rejected.
+
For the "partialCloneFilter" field, this allows the client to ensure
that the server's filter matches what it expects locally, preventing
inconsistencies in filtering behavior. For the "token" field, this can
be used to verify that authentication credentials match expected
values.
+
Field values are compared case-sensitively.
+
The "name" and "url" fields are always checked according to the
`promisor.acceptFromServer` policy, independently of this setting.
+
The field names and values should be passed by the server through the
"promisor-remote" capability by using the `promisor.sendFields` config
variable. The fields are checked only if the
`promisor.acceptFromServer` config variable is not set to "None". If
set to "None", this config variable has no effect. See
linkgit:gitprotocol-v2[5].

View File

@ -29,21 +29,5 @@ pull.octopus::
The default merge strategy to use when pulling multiple branches
at once.
pull.autoStash::
When set to true, automatically create a temporary stash entry
to record the local changes before the operation begins, and
restore them after the operation completes. When your "git
pull" rebases (instead of merges), this may be convenient, since
unlike merging pull that tolerates local changes that do not
interfere with the merge, rebasing pull refuses to work with any
local changes.
+
If `pull.autostash` is set (either to true or false),
`merge.autostash` and `rebase.autostash` are ignored. If
`pull.autostash` is not set at all, depending on the value of
`pull.rebase`, `merge.autostash` or `rebase.autostash` is used
instead. Can be overridden by the `--[no-]autostash` command line
option.
pull.twohead::
The default merge strategy to use when pulling a single branch.

View File

@ -1,15 +1,15 @@
`push.autoSetupRemote`::
If set to `true` assume `--set-upstream` on default push when no
push.autoSetupRemote::
If set to "true" assume `--set-upstream` on default push when no
upstream tracking exists for the current branch; this option
takes effect with `push.default` options `simple`, `upstream`,
and `current`. It is useful if by default you want new branches
takes effect with push.default options 'simple', 'upstream',
and 'current'. It is useful if by default you want new branches
to be pushed to the default remote (like the behavior of
`push.default=current`) and you also want the upstream tracking
'push.default=current') and you also want the upstream tracking
to be set. Workflows most likely to benefit from this option are
`simple` central workflows where all branches are expected to
'simple' central workflows where all branches are expected to
have the same name on the remote.
`push.default`::
push.default::
Defines the action `git push` should take if no refspec is
given (whether from the command-line, config, or elsewhere).
Different values are well-suited for
@ -18,28 +18,24 @@
`upstream` is probably what you want. Possible values are:
+
--
`nothing`;;
do not push anything (error out) unless a refspec is
given. This is primarily meant for people who want to
avoid mistakes by always being explicit.
`current`;;
push the current branch to update a branch with the same
name on the receiving end. Works in both central and non-central
workflows.
* `nothing` - do not push anything (error out) unless a refspec is
given. This is primarily meant for people who want to
avoid mistakes by always being explicit.
`upstream`;;
push the current branch back to the branch whose
changes are usually integrated into the current branch (which is
called `@{upstream}`). This mode only makes sense if you are
pushing to the same repository you would normally pull from
(i.e. central workflow).
* `current` - push the current branch to update a branch with the same
name on the receiving end. Works in both central and non-central
workflows.
`tracking`;;
this is a deprecated synonym for `upstream`.
* `upstream` - push the current branch back to the branch whose
changes are usually integrated into the current branch (which is
called `@{upstream}`). This mode only makes sense if you are
pushing to the same repository you would normally pull from
(i.e. central workflow).
`simple`;;
push the current branch with the same name on the remote.
* `tracking` - This is a deprecated synonym for `upstream`.
* `simple` - push the current branch with the same name on the remote.
+
If you are working on a centralized workflow (pushing to the same repository you
pull from, which is typically `origin`), then you need to configure an upstream
@ -48,17 +44,16 @@ branch with the same name.
This mode is the default since Git 2.0, and is the safest option suited for
beginners.
`matching`;;
push all branches having the same name on both ends.
This makes the repository you are pushing to remember the set of
branches that will be pushed out (e.g. if you always push `maint`
and `master` there and no other branches, the repository you push
to will have these two branches, and your local `maint` and
`master` will be pushed there).
* `matching` - push all branches having the same name on both ends.
This makes the repository you are pushing to remember the set of
branches that will be pushed out (e.g. if you always push 'maint'
and 'master' there and no other branches, the repository you push
to will have these two branches, and your local 'maint' and
'master' will be pushed there).
+
To use this mode effectively, you have to make sure _all_ the
branches you would push out are ready to be pushed out before
running `git push`, as the whole point of this mode is to allow you
running 'git push', as the whole point of this mode is to allow you
to push all of the branches in one go. If you usually finish work
on only one branch and push out the result, while other branches are
unfinished, this mode is not for you. Also this mode is not
@ -71,24 +66,24 @@ new default).
--
`push.followTags`::
push.followTags::
If set to true, enable `--follow-tags` option by default. You
may override this configuration at time of push by specifying
`--no-follow-tags`.
`push.gpgSign`::
May be set to a boolean value, or the string `if-asked`. A true
push.gpgSign::
May be set to a boolean value, or the string 'if-asked'. A true
value causes all pushes to be GPG signed, as if `--signed` is
passed to linkgit:git-push[1]. The string `if-asked` causes
passed to linkgit:git-push[1]. The string 'if-asked' causes
pushes to be signed if the server supports it, as if
`--signed=if-asked` is passed to `git push`. A false value may
`--signed=if-asked` is passed to 'git push'. A false value may
override a value from a lower-priority config file. An explicit
command-line flag always overrides this config option.
`push.pushOption`::
push.pushOption::
When no `--push-option=<option>` argument is given from the
command line, `git push` behaves as if each _<option>_ of
this variable is given as `--push-option=<option>`.
command line, `git push` behaves as if each <value> of
this variable is given as `--push-option=<value>`.
+
This is a multi-valued variable, and an empty value can be used in a
higher priority configuration file (e.g. `.git/config` in a
@ -114,26 +109,26 @@ This will result in only b (a and c are cleared).
----
`push.recurseSubmodules`::
May be `check`, `on-demand`, `only`, or `no`, with the same behavior
as that of `push --recurse-submodules`.
If not set, `no` is used by default, unless `submodule.recurse` is
set (in which case a `true` value means `on-demand`).
push.recurseSubmodules::
May be "check", "on-demand", "only", or "no", with the same behavior
as that of "push --recurse-submodules".
If not set, 'no' is used by default, unless 'submodule.recurse' is
set (in which case a 'true' value means 'on-demand').
`push.useForceIfIncludes`::
If set to `true`, it is equivalent to specifying
push.useForceIfIncludes::
If set to "true", it is equivalent to specifying
`--force-if-includes` as an option to linkgit:git-push[1]
in the command line. Adding `--no-force-if-includes` at the
time of push overrides this configuration setting.
`push.negotiate`::
If set to `true`, attempt to reduce the size of the packfile
push.negotiate::
If set to "true", attempt to reduce the size of the packfile
sent by rounds of negotiation in which the client and the
server attempt to find commits in common. If `false`, Git will
server attempt to find commits in common. If "false", Git will
rely solely on the server's ref advertisement to find commits
in common.
`push.useBitmaps`::
If set to `false`, disable use of bitmaps for `git push` even if
`pack.useBitmaps` is `true`, without preventing other git operations
from using bitmaps. Default is `true`.
push.useBitmaps::
If set to "false", disable use of bitmaps for "git push" even if
`pack.useBitmaps` is "true", without preventing other git operations
from using bitmaps. Default is true.

View File

@ -39,10 +39,3 @@ repack.cruftThreads::
a cruft pack and the respective parameters are not given over
the command line. See similarly named `pack.*` configuration
variables for defaults and meaning.
repack.midxMustContainCruft::
When set to true, linkgit:git-repack[1] will unconditionally include
cruft pack(s), if any, in the multi-pack index when invoked with
`--write-midx`. When false, cruft packs are only included in the MIDX
when necessary (e.g., because they might be required to form a
reachability closure with MIDX bitmaps). Defaults to true.

View File

@ -1,11 +0,0 @@
replay.refAction::
Specifies the default mode for handling reference updates in
`git replay`. The value can be:
+
--
* `update`: Update refs directly using an atomic transaction (default behavior).
* `print`: Output update-ref commands for pipeline use.
--
+
This setting can be overridden with the `--ref-action` command-line option.
When not configured, `git replay` defaults to `update` mode.

View File

@ -1,38 +1,38 @@
sendemail.identity::
A configuration identity. When given, causes values in the
`sendemail.<identity>` subsection to take precedence over
values in the `sendemail` section. The default identity is
'sendemail.<identity>' subsection to take precedence over
values in the 'sendemail' section. The default identity is
the value of `sendemail.identity`.
sendemail.smtpEncryption::
See linkgit:git-send-email[1] for description. Note that this
setting is not subject to the `identity` mechanism.
setting is not subject to the 'identity' mechanism.
sendemail.smtpSSLCertPath::
Path to ca-certificates (either a directory or a single file).
Set it to an empty string to disable certificate verification.
sendemail.<identity>.*::
Identity-specific versions of the `sendemail.*` parameters
Identity-specific versions of the 'sendemail.*' parameters
found below, taking precedence over those when this
identity is selected, through either the command-line or
`sendemail.identity`.
sendemail.multiEdit::
If `true` (default), a single editor instance will be spawned to edit
If true (default), a single editor instance will be spawned to edit
files you have to edit (patches when `--annotate` is used, and the
summary when `--compose` is used). If `false`, files will be edited one
summary when `--compose` is used). If false, files will be edited one
after the other, spawning a new editor each time.
sendemail.confirm::
Sets the default for whether to confirm before sending. Must be
one of `always`, `never`, `cc`, `compose`, or `auto`. See `--confirm`
one of 'always', 'never', 'cc', 'compose', or 'auto'. See `--confirm`
in the linkgit:git-send-email[1] documentation for the meaning of these
values.
sendemail.mailmap::
If `true`, makes linkgit:git-send-email[1] assume `--mailmap`,
otherwise assume `--no-mailmap`. `False` by default.
If true, makes linkgit:git-send-email[1] assume `--mailmap`,
otherwise assume `--no-mailmap`. False by default.
sendemail.mailmap.file::
The location of a linkgit:git-send-email[1] specific augmenting
@ -51,7 +51,7 @@ sendemail.aliasesFile::
sendemail.aliasFileType::
Format of the file(s) specified in sendemail.aliasesFile. Must be
one of `mutt`, `mailrc`, `pine`, `elm`, `gnus`, or `sendmail`.
one of 'mutt', 'mailrc', 'pine', 'elm', 'gnus', or 'sendmail'.
+
What an alias file in each format looks like can be found in
the documentation of the email program of the same name. The
@ -88,8 +88,6 @@ sendemail.smtpServer::
sendemail.smtpServerPort::
sendemail.smtpServerOption::
sendemail.smtpUser::
sendemail.imapSentFolder::
sendemail.useImapOnly::
sendemail.thread::
sendemail.transferEncoding::
sendemail.validate::
@ -98,17 +96,12 @@ sendemail.xmailer::
linkgit:git-send-email[1] command-line options. See its
documentation for details.
sendemail.outlookidfix::
If `true`, makes linkgit:git-send-email[1] assume `--outlook-id-fix`,
and if `false` assume `--no-outlook-id-fix`. If not specified, it will
behave the same way as if `--outlook-id-fix` is not specified.
sendemail.signedOffCc (deprecated)::
Deprecated alias for `sendemail.signedOffByCc`.
sendemail.smtpBatchSize::
Number of messages to be sent per connection, after that a relogin
will happen. If the value is `0` or undefined, send all messages in
will happen. If the value is 0 or undefined, send all messages in
one connection.
See also the `--batch-size` option of linkgit:git-send-email[1].
@ -118,5 +111,5 @@ sendemail.smtpReloginDelay::
sendemail.forbidSendmailVariables::
To avoid common misconfiguration mistakes, linkgit:git-send-email[1]
will abort with a warning if any configuration options for `sendmail`
will abort with a warning if any configuration options for "sendmail"
exist. Set this variable to bypass the check.

View File

@ -1,32 +1,14 @@
ifndef::git-stash[]
:see-show: See the description of the 'show' command in linkgit:git-stash[1].
endif::git-stash[]
ifdef::git-stash[]
:see-show:
endif::git-stash[]
`stash.index`::
If this is set to true, `git stash apply` and `git stash pop` will
behave as if `--index` was supplied. Defaults to false.
ifndef::git-stash[]
See the descriptions in linkgit:git-stash[1].
+
This also affects invocations of linkgit:git-stash[1] via `--autostash` from
commands like linkgit:git-merge[1], linkgit:git-rebase[1], and
linkgit:git-pull[1].
endif::git-stash[]
`stash.showIncludeUntracked`::
stash.showIncludeUntracked::
If this is set to true, the `git stash show` command will show
the untracked files of a stash entry. Defaults to false. {see-show}
the untracked files of a stash entry. Defaults to false. See
the description of the 'show' command in linkgit:git-stash[1].
`stash.showPatch`::
stash.showPatch::
If this is set to true, the `git stash show` command without an
option will show the stash entry in patch form. Defaults to false.
{see-show}
See the description of the 'show' command in linkgit:git-stash[1].
`stash.showStat`::
stash.showStat::
If this is set to true, the `git stash show` command without an
option will show a diffstat of the stash entry. Defaults to true.
{see-show}
See the description of the 'show' command in linkgit:git-stash[1].

View File

@ -1,23 +1,17 @@
`tag.forceSignAnnotated`::
tag.forceSignAnnotated::
A boolean to specify whether annotated tags created should be GPG signed.
If `--annotate` is specified on the command line, it takes
precedence over this option.
`tag.sort`::
ifdef::git-tag[]
This variable controls the sort ordering of tags when displayed by `git-tag`.
endif::git-tag[]
ifndef::git-tag[]
This variable controls the sort ordering of tags when displayed by
linkgit:git-tag[1].
endif::git-tag[]
Without the `--sort=<value>` option provided, the value of this variable will
be used as the default.
tag.sort::
This variable controls the sort ordering of tags when displayed by
linkgit:git-tag[1]. Without the "--sort=<value>" option provided, the
value of this variable will be used as the default.
`tag.gpgSign`::
tag.gpgSign::
A boolean to specify whether all tags should be GPG signed.
Use of this option when running in an automated script can
result in a large number of tags being signed. It is therefore
convenient to use an agent to avoid typing your GPG passphrase
convenient to use an agent to avoid typing your gpg passphrase
several times. Note that this option doesn't affect tag signing
behavior enabled by `-u <keyid>` or `--local-user=<keyid>` options.
behavior enabled by "-u <keyid>" or "--local-user=<keyid>" options.

View File

@ -1,4 +1,4 @@
`worktree.guessRemote`::
worktree.guessRemote::
If no branch is specified and neither `-b` nor `-B` nor
`--detach` is used, then `git worktree add` defaults to
creating a new branch from HEAD. If `worktree.guessRemote` is
@ -6,14 +6,14 @@
branch whose name uniquely matches the new branch name. If
such a branch exists, it is checked out and set as "upstream"
for the new branch. If no such match can be found, it falls
back to creating a new branch from the current `HEAD`.
back to creating a new branch from the current HEAD.
`worktree.useRelativePaths`::
Link worktrees using relative paths (when "`true`") or absolute
paths (when "`false`"). This is particularly useful for setups
worktree.useRelativePaths::
Link worktrees using relative paths (when "true") or absolute
paths (when "false"). This is particularly useful for setups
where the repository and worktrees may be moved between
different locations or environments. Defaults to "`false`".
different locations or environments. Defaults to "false".
+
Note that setting `worktree.useRelativePaths` to "`true`" implies enabling the
`extensions.relativeWorktrees` config (see linkgit:git-config[1]),
Note that setting `worktree.useRelativePaths` to "true" implies enabling the
`extension.relativeWorktrees` config (see linkgit:git-config[1]),
thus making it incompatible with older versions of Git.

View File

@ -1,20 +0,0 @@
`--diff-algorithm=(patience|minimal|histogram|myers)`::
Choose a diff algorithm. The variants are as follows:
+
--
`default`;;
`myers`;;
The basic greedy diff algorithm. Currently, this is the default.
`minimal`;;
Spend extra time to make sure the smallest possible diff is
produced.
`patience`;;
Use "patience diff" algorithm when generating patches.
`histogram`;;
This algorithm extends the patience algorithm to "support
low-occurrence common elements".
--
+
For instance, if you configured the `diff.algorithm` variable to a
non-default value and want to use the default one, then you
have to use `--diff-algorithm=default` option.

View File

@ -1,10 +0,0 @@
`-U<n>`::
`--unified=<n>`::
Generate diffs with _<n>_ lines of context. Defaults to `diff.context`
or 3 if the config option is unset.
`--inter-hunk-context=<n>`::
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.

View File

@ -103,7 +103,6 @@ if the file was renamed on any side of history. With
followed by the name of the path in the merge commit.
Examples for `-c` and `--cc` without `--combined-all-paths`:
------------------------------------------------
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c
::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh

View File

@ -138,7 +138,7 @@ or like this (when the `--cc` option is used):
+
[synopsis]
index <hash>,<hash>..<hash>
mode <mode>,<mode>..<mode>
mode <mode>,<mode>`..`<mode>
new file mode <mode>
deleted file mode <mode>,<mode>
+

View File

@ -37,32 +37,32 @@ endif::git-diff[]
endif::git-format-patch[]
ifdef::git-log[]
`-m`::
-m::
Show diffs for merge commits in the default format. This is
similar to `--diff-merges=on`, except `-m` will
produce no output unless `-p` is given as well.
`-c`::
-c::
Produce combined diff output for merge commits.
Shortcut for `--diff-merges=combined -p`.
`--cc`::
--cc::
Produce dense combined diff output for merge commits.
Shortcut for `--diff-merges=dense-combined -p`.
`--dd`::
--dd::
Produce diff with respect to first parent for both merge and
regular commits.
Shortcut for `--diff-merges=first-parent -p`.
`--remerge-diff`::
--remerge-diff::
Produce remerge-diff output for merge commits.
Shortcut for `--diff-merges=remerge -p`.
`--no-diff-merges`::
--no-diff-merges::
Synonym for `--diff-merges=off`.
`--diff-merges=<format>`::
--diff-merges=<format>::
Specify diff format to be used for merge commits. Default is
{diff-merges-default} unless `--first-parent` is in use, in
which case `first-parent` is the default.
@ -70,54 +70,48 @@ ifdef::git-log[]
The following formats are supported:
+
--
`off`::
`none`::
off, none::
Disable output of diffs for merge commits. Useful to override
implied value.
`on`::
`m`::
on, m::
Make diff output for merge commits to be shown in the default
format. The default format can be changed using
`log.diffMerges` configuration variable, whose default value
is `separate`.
`first-parent`::
`1`::
first-parent, 1::
Show full diff with respect to first parent. This is the same
format as `--patch` produces for non-merge commits.
`separate`::
separate::
Show full diff with respect to each of parents.
Separate log entry and diff is generated for each parent.
`combined`::
`c`::
combined, c::
Show differences from each of the parents to the merge
result simultaneously instead of showing pairwise diff between
a parent and the result one at a time. Furthermore, it lists
only files which were modified from all parents.
`dense-combined`::
`cc`::
dense-combined, cc::
Further compress output produced by `--diff-merges=combined`
by omitting uninteresting hunks whose contents in the parents
have only two variants and the merge result picks one of them
without modification.
`remerge`::
`r`:: Remerge two-parent merge commits to create a temporary tree
remerge, r::
Remerge two-parent merge commits to create a temporary tree
object--potentially containing files with conflict markers
and such. A diff is then shown between that temporary tree
and the actual merge commit.
--
+
The output emitted when this option is used is subject to change, and
so is its interaction with other options (unless explicitly
documented).
--
`--combined-all-paths`::
--combined-all-paths::
Cause combined diffs (used for merge commits) to
list the name of the file from all parents. It thus only has
effect when `--diff-merges=[dense-]combined` is in use, and
@ -197,7 +191,26 @@ and starts with _<text>_, this algorithm attempts to prevent it from
appearing as a deletion or addition in the output. It uses the "patience
diff" algorithm internally.
include::diff-algorithm-option.adoc[]
`--diff-algorithm=(patience|minimal|histogram|myers)`::
Choose a diff algorithm. The variants are as follows:
+
--
`default`;;
`myers`;;
The basic greedy diff algorithm. Currently, this is the default.
`minimal`;;
Spend extra time to make sure the smallest possible diff is
produced.
`patience`;;
Use "patience diff" algorithm when generating patches.
`histogram`;;
This algorithm extends the patience algorithm to "support
low-occurrence common elements".
--
+
For instance, if you configured the `diff.algorithm` variable to a
non-default value and want to use the default one, then you
have to use `--diff-algorithm=default` option.
`--stat[=<width>[,<name-width>[,<count>]]]`::
Generate a diffstat. By default, as much space as necessary
@ -486,8 +499,7 @@ endif::git-format-patch[]
Turn off rename detection, even when the configuration
file gives the default to do so.
`--rename-empty`::
`--no-rename-empty`::
`--[no-]rename-empty`::
Whether to use empty blobs as rename source.
ifndef::git-format-patch[]
@ -875,33 +887,5 @@ endif::git-format-patch[]
reverted with `--ita-visible-in-index`. Both options are
experimental and could be removed in future.
--max-depth=<depth>::
For each pathspec given on command line, descend at most `<depth>`
levels of directories. A value of `-1` means no limit.
Cannot be combined with wildcards in the pathspec.
Given a tree containing `foo/bar/baz`, the following list shows the
matches generated by each set of options:
+
--
- `--max-depth=0 -- foo`: `foo`
- `--max-depth=1 -- foo`: `foo/bar`
- `--max-depth=1 -- foo/bar`: `foo/bar/baz`
- `--max-depth=1 -- foo foo/bar`: `foo/bar/baz`
- `--max-depth=2 -- foo`: `foo/bar/baz`
--
+
If no pathspec is given, the depth is measured as if all
top-level entries were specified. Note that this is different
than measuring from the root, in that `--max-depth=0` would
still return `foo`. This allows you to still limit depth while
asking for a subset of the top-level entries.
+
Note that this option is only supported for diffs between tree objects,
not against the index or working tree.
For more detailed explanation on these common options, see also
linkgit:gitdiffcore[7].

View File

@ -1,41 +1,40 @@
`--all`::
`--no-all`::
--[no-]all::
Fetch all remotes, except for the ones that has the
`remote.<name>.skipFetchAll` configuration variable set.
This overrides the configuration variable `fetch.all`.
This overrides the configuration variable fetch.all`.
`-a`::
`--append`::
-a::
--append::
Append ref names and object names of fetched refs to the
existing contents of `.git/FETCH_HEAD`. Without this
option old data in `.git/FETCH_HEAD` will be overwritten.
`--atomic`::
--atomic::
Use an atomic transaction to update local refs. Either all refs are
updated, or on error, no refs are updated.
`--depth=<depth>`::
--depth=<depth>::
Limit fetching to the specified number of commits from the tip of
each remote branch history. If fetching to a 'shallow' repository
created by `git clone` with `--depth=<depth>` option (see
linkgit:git-clone[1]), deepen or shorten the history to the specified
number of commits. Tags for the deepened commits are not fetched.
`--deepen=<depth>`::
Similar to `--depth`, except it specifies the number of commits
--deepen=<depth>::
Similar to --depth, except it specifies the number of commits
from the current shallow boundary instead of from the tip of
each remote branch history.
`--shallow-since=<date>`::
--shallow-since=<date>::
Deepen or shorten the history of a shallow repository to
include all reachable commits after _<date>_.
include all reachable commits after <date>.
`--shallow-exclude=<ref>`::
--shallow-exclude=<ref>::
Deepen or shorten the history of a shallow repository to
exclude commits reachable from a specified remote branch or tag.
This option can be specified multiple times.
`--unshallow`::
--unshallow::
If the source repository is complete, convert a shallow
repository to a complete one, removing all the limitations
imposed by shallow repositories.
@ -43,13 +42,13 @@
If the source repository is shallow, fetch as much as possible so that
the current repository has the same history as the source repository.
`--update-shallow`::
--update-shallow::
By default when fetching from a shallow repository,
`git fetch` refuses refs that require updating
`.git/shallow`. This option updates `.git/shallow` and accepts such
.git/shallow. This option updates .git/shallow and accepts such
refs.
`--negotiation-tip=(<commit>|<glob>)`::
--negotiation-tip=<commit|glob>::
By default, Git will report, to the server, commits reachable
from all local refs to find common commits in an attempt to
reduce the size of the to-be-received packfile. If specified,
@ -69,28 +68,27 @@ See also the `fetch.negotiationAlgorithm` and `push.negotiate`
configuration variables documented in linkgit:git-config[1], and the
`--negotiate-only` option below.
`--negotiate-only`::
--negotiate-only::
Do not fetch anything from the server, and instead print the
ancestors of the provided `--negotiation-tip=` arguments,
ancestors of the provided `--negotiation-tip=*` arguments,
which we have in common with the server.
+
This is incompatible with `--recurse-submodules=(yes|on-demand)`.
This is incompatible with `--recurse-submodules=[yes|on-demand]`.
Internally this is used to implement the `push.negotiate` option, see
linkgit:git-config[1].
`--dry-run`::
--dry-run::
Show what would be done, without making any changes.
`--porcelain`::
--porcelain::
Print the output to standard output in an easy-to-parse format for
scripts. See section OUTPUT in linkgit:git-fetch[1] for details.
+
This is incompatible with `--recurse-submodules=(yes|on-demand)` and takes
This is incompatible with `--recurse-submodules=[yes|on-demand]` and takes
precedence over the `fetch.output` config option.
ifndef::git-pull[]
`--write-fetch-head`::
`--no-write-fetch-head`::
--[no-]write-fetch-head::
Write the list of remote refs fetched in the `FETCH_HEAD`
file directly under `$GIT_DIR`. This is the default.
Passing `--no-write-fetch-head` from the command line tells
@ -98,65 +96,61 @@ ifndef::git-pull[]
file is never written.
endif::git-pull[]
`-f`::
`--force`::
-f::
--force::
When 'git fetch' is used with `<src>:<dst>` refspec, it may
refuse to update the local branch as discussed
ifdef::git-pull[]
When `git fetch` is used with `<src>:<dst>` refspec, it may
refuse to update the local branch as discussed
in the _<refspec>_ part of the linkgit:git-fetch[1]
documentation.
in the `<refspec>` part of the linkgit:git-fetch[1]
documentation.
endif::git-pull[]
ifndef::git-pull[]
When `git fetch` is used with `<src>:<dst>` refspec, it may
refuse to update the local branch as discussed in the _<refspec>_ part below.
in the `<refspec>` part below.
endif::git-pull[]
This option overrides that check.
This option overrides that check.
`-k`::
`--keep`::
-k::
--keep::
Keep downloaded pack.
ifndef::git-pull[]
`--multiple`::
Allow several _<repository>_ and _<group>_ arguments to be
specified. No __<refspec>__s may be specified.
--multiple::
Allow several <repository> and <group> arguments to be
specified. No <refspec>s may be specified.
`--auto-maintenance`::
`--no-auto-maintenance`::
`--auto-gc`::
`--no-auto-gc`::
--[no-]auto-maintenance::
--[no-]auto-gc::
Run `git maintenance run --auto` at the end to perform automatic
repository maintenance if needed.
repository maintenance if needed. (`--[no-]auto-gc` is a synonym.)
This is enabled by default.
`--write-commit-graph`::
`--no-write-commit-graph`::
--[no-]write-commit-graph::
Write a commit-graph after fetching. This overrides the config
setting `fetch.writeCommitGraph`.
endif::git-pull[]
`--prefetch`::
--prefetch::
Modify the configured refspec to place all refs into the
`refs/prefetch/` namespace. See the `prefetch` task in
linkgit:git-maintenance[1].
`-p`::
`--prune`::
-p::
--prune::
Before fetching, remove any remote-tracking references that no
longer exist on the remote. Tags are not subject to pruning
if they are fetched only because of the default tag
auto-following or due to a `--tags` option. However, if tags
auto-following or due to a --tags option. However, if tags
are fetched due to an explicit refspec (either on the command
line or in the remote configuration, for example if the remote
was cloned with the `--mirror` option), then they are also
was cloned with the --mirror option), then they are also
subject to pruning. Supplying `--prune-tags` is a shorthand for
providing the tag refspec.
ifndef::git-pull[]
+
See the PRUNING section below for more details.
`-P`::
`--prune-tags`::
-P::
--prune-tags::
Before fetching, remove any local tags that no longer exist on
the remote if `--prune` is enabled. This option should be used
more carefully, unlike `--prune` it will remove any local
@ -169,17 +163,17 @@ See the PRUNING section below for more details.
endif::git-pull[]
ifndef::git-pull[]
`-n`::
-n::
endif::git-pull[]
`--no-tags`::
--no-tags::
By default, tags that point at objects that are downloaded
from the remote repository are fetched and stored locally.
This option disables this automatic tag following. The default
behavior for a remote may be specified with the `remote.<name>.tagOpt`
behavior for a remote may be specified with the remote.<name>.tagOpt
setting. See linkgit:git-config[1].
ifndef::git-pull[]
`--refetch`::
--refetch::
Instead of negotiating with the server to avoid transferring commits and
associated objects that are already present locally, this option fetches
all objects as a fresh clone would. Use this to reapply a partial clone
@ -188,29 +182,29 @@ ifndef::git-pull[]
object database pack consolidation to remove any duplicate objects.
endif::git-pull[]
`--refmap=<refspec>`::
--refmap=<refspec>::
When fetching refs listed on the command line, use the
specified refspec (can be given more than once) to map the
refs to remote-tracking branches, instead of the values of
`remote.<name>.fetch` configuration variables for the remote
repository. Providing an empty _<refspec>_ to the
`remote.*.fetch` configuration variables for the remote
repository. Providing an empty `<refspec>` to the
`--refmap` option causes Git to ignore the configured
refspecs and rely entirely on the refspecs supplied as
command-line arguments. See section on "Configured Remote-tracking
Branches" for details.
`-t`::
`--tags`::
-t::
--tags::
Fetch all tags from the remote (i.e., fetch remote tags
`refs/tags/*` into local tags with the same name), in addition
to whatever else would otherwise be fetched. Using this
option alone does not subject tags to pruning, even if `--prune`
option alone does not subject tags to pruning, even if --prune
is used (though tags may be pruned anyway if they are also the
destination of an explicit refspec; see `--prune`).
ifndef::git-pull[]
`--recurse-submodules[=(yes|on-demand|no)]`::
Control if and under what conditions new commits of
--recurse-submodules[=(yes|on-demand|no)]::
This option controls if and under what conditions new commits of
submodules should be fetched too. When recursing through submodules,
`git fetch` always attempts to fetch "changed" submodules, that is, a
submodule that has commits that are referenced by a newly fetched
@ -220,19 +214,19 @@ ifndef::git-pull[]
adds a new submodule, that submodule cannot be fetched until it is
cloned e.g. by `git submodule update`.
+
When set to `on-demand`, only changed submodules are fetched. When set
to `yes`, all populated submodules are fetched and submodules that are
both unpopulated and changed are fetched. When set to `no`, submodules
When set to 'on-demand', only changed submodules are fetched. When set
to 'yes', all populated submodules are fetched and submodules that are
both unpopulated and changed are fetched. When set to 'no', submodules
are never fetched.
+
When unspecified, this uses the value of `fetch.recurseSubmodules` if it
is set (see linkgit:git-config[1]), defaulting to `on-demand` if unset.
When this option is used without any value, it defaults to `yes`.
is set (see linkgit:git-config[1]), defaulting to 'on-demand' if unset.
When this option is used without any value, it defaults to 'yes'.
endif::git-pull[]
`-j <n>`::
`--jobs=<n>`::
Parallelize all forms of fetching up to _<n>_ jobs at a time.
-j::
--jobs=<n>::
Number of parallel children to be used for all forms of fetching.
+
If the `--multiple` option was specified, the different remotes will be fetched
in parallel. If multiple submodules are fetched, they will be fetched in
@ -243,12 +237,12 @@ Typically, parallel recursive and multi-remote fetches will be faster. By
default fetches are performed sequentially, not in parallel.
ifndef::git-pull[]
`--no-recurse-submodules`::
--no-recurse-submodules::
Disable recursive fetching of submodules (this has the same effect as
using the `--recurse-submodules=no` option).
endif::git-pull[]
`--set-upstream`::
--set-upstream::
If the remote is fetched successfully, add upstream
(tracking) reference, used by argument-less
linkgit:git-pull[1] and other commands. For more information,
@ -256,57 +250,57 @@ endif::git-pull[]
linkgit:git-config[1].
ifndef::git-pull[]
`--submodule-prefix=<path>`::
Prepend _<path>_ to paths printed in informative messages
--submodule-prefix=<path>::
Prepend <path> to paths printed in informative messages
such as "Fetching submodule foo". This option is used
internally when recursing over submodules.
`--recurse-submodules-default=(yes|on-demand)`::
--recurse-submodules-default=[yes|on-demand]::
This option is used internally to temporarily provide a
non-negative default value for the `--recurse-submodules`
non-negative default value for the --recurse-submodules
option. All other methods of configuring fetch's submodule
recursion (such as settings in linkgit:gitmodules[5] and
linkgit:git-config[1]) override this option, as does
specifying `--[no-]recurse-submodules` directly.
specifying --[no-]recurse-submodules directly.
`-u`::
`--update-head-ok`::
By default `git fetch` refuses to update the head which
-u::
--update-head-ok::
By default 'git fetch' refuses to update the head which
corresponds to the current branch. This flag disables the
check. This is purely for the internal use for `git pull`
to communicate with `git fetch`, and unless you are
check. This is purely for the internal use for 'git pull'
to communicate with 'git fetch', and unless you are
implementing your own Porcelain you are not supposed to
use it.
endif::git-pull[]
`--upload-pack <upload-pack>`::
--upload-pack <upload-pack>::
When given, and the repository to fetch from is handled
by `git fetch-pack`, `--exec=<upload-pack>` is passed to
by 'git fetch-pack', `--exec=<upload-pack>` is passed to
the command to specify non-default path for the command
run on the other end.
ifndef::git-pull[]
`-q`::
`--quiet`::
Pass `--quiet` to `git-fetch-pack` and silence any other internally
-q::
--quiet::
Pass --quiet to git-fetch-pack and silence any other internally
used git commands. Progress is not reported to the standard error
stream.
`-v`::
`--verbose`::
-v::
--verbose::
Be verbose.
endif::git-pull[]
`--progress`::
--progress::
Progress status is reported on the standard error stream
by default when it is attached to a terminal, unless `-q`
by default when it is attached to a terminal, unless -q
is specified. This flag forces progress status even if the
standard error stream is not directed to a terminal.
`-o <option>`::
`--server-option=<option>`::
-o <option>::
--server-option=<option>::
Transmit the given string to the server when communicating using
protocol version 2. The given string must not contain a _NUL_ or _LF_
protocol version 2. The given string must not contain a NUL or LF
character. The server's handling of server options, including
unknown ones, is server-specific.
When multiple `--server-option=<option>` are given, they are all
@ -315,23 +309,23 @@ endif::git-pull[]
the values of configuration variable `remote.<name>.serverOption`
are used instead.
`--show-forced-updates`::
--show-forced-updates::
By default, git checks if a branch is force-updated during
fetch. This can be disabled through `fetch.showForcedUpdates`, but
the `--show-forced-updates` option guarantees this check occurs.
fetch. This can be disabled through fetch.showForcedUpdates, but
the --show-forced-updates option guarantees this check occurs.
See linkgit:git-config[1].
`--no-show-forced-updates`::
--no-show-forced-updates::
By default, git checks if a branch is force-updated during
fetch. Pass `--no-show-forced-updates` or set `fetch.showForcedUpdates`
fetch. Pass --no-show-forced-updates or set fetch.showForcedUpdates
to false to skip this check for performance reasons. If used during
`git-pull` the `--ff-only` option will still check for forced updates
'git-pull' the --ff-only option will still check for forced updates
before attempting a fast-forward update. See linkgit:git-config[1].
`-4`::
`--ipv4`::
-4::
--ipv4::
Use IPv4 addresses only, ignoring IPv6 addresses.
`-6`::
`--ipv6`::
-6::
--ipv6::
Use IPv6 addresses only, ignoring IPv4 addresses.

View File

@ -1,85 +0,0 @@
`<pattern>...`::
If one or more _<pattern>_ parameters are given, only refs are shown that
match against at least one pattern, either using `fnmatch`(3) or
literally, in the latter case matching completely or from the
beginning up to a slash.
`--stdin`::
The list of patterns is read from standard input instead of from
the argument list.
`--count=<count>`::
Stop after showing _<count>_ refs.
`--sort=<key>`::
Sort on the field name _<key>_. Prefix `-` to sort in
descending order of the value. When unspecified,
`refname` is used. You may use the `--sort=<key>` option
multiple times, in which case the last key becomes the primary
key.
`--format[=<format>]`::
A string that interpolates `%(fieldname)` from a ref being shown and
the object it points at. In addition, the string literal `%%`
renders as `%` and `%xx` - where `xx` are hex digits - renders as
the character with hex code `xx`. For example, `%00` interpolates to
`\0` (_NUL_), `%09` to `\t` (_TAB_), and `%0a` to `\n` (_LF_).
When unspecified, _<format>_ defaults to `%(objectname) SPC %(objecttype)
TAB %(refname)`.
`--color[=<when>]`::
Respect any colors specified in the `--format` option. The
_<when__ field must be one of `always`, `never`, or `auto` (if
`<when>` is absent, behave as if `always` was given).
`--shell`::
`--perl`::
`--python`::
`--tcl`::
If given, strings that substitute `%(fieldname)`
placeholders are quoted as string literals suitable for
the specified host language. This is meant to produce
a scriptlet that can directly be "eval"ed.
`--points-at=<object>`::
Only list refs which points at the given object.
`--merged[=<object>]`::
Only list refs whose tips are reachable from the
specified commit (`HEAD` if not specified).
`--no-merged[=<object>]`::
Only list refs whose tips are not reachable from _<object>_(`HEAD` if not
specified).
`--contains[=<object>]`::
Only list refs which contain _<object>_(`HEAD` if not specified).
`--no-contains[=<object>]`::
Only list refs which don't contain _<object>_ (`HEAD`
if not specified).
`--ignore-case`::
Sorting and filtering refs are case insensitive.
`--omit-empty`::
Do not print a newline after formatted refs where the format expands
to the empty string.
`--exclude=<excluded-pattern>`::
If one or more `--exclude` options are given, only refs which do not
match any _<excluded-pattern>_ parameters are shown. Matching is done
using the same rules as _<pattern>_ above.
`--include-root-refs`::
List root refs (`HEAD` and pseudorefs) apart from regular refs.
`--start-after=<marker>`::
Allows paginating the output by skipping references up to and including the
specified marker. When paging, it should be noted that references may be
deleted, modified or added between invocations. Output will only yield those
references which follow the marker lexicographically. Output begins from the
first reference that would come after the marker alphabetically. Cannot be
used with `--sort=<key>` or `--stdin` options, or the _<pattern>_ argument(s)
to limit the refs.

View File

@ -10,12 +10,6 @@
`badFilemode`::
(INFO) A tree contains a bad filemode entry.
`badGpgsig`::
(ERROR) A tag contains a bad (truncated) signature (e.g., `gpgsig`) header.
`badHeaderContinuation`::
(ERROR) A continuation header (such as for `gpgsig`) is unexpectedly truncated.
`badName`::
(ERROR) An author/committer name is empty.
@ -44,9 +38,6 @@
`badReferentName`::
(ERROR) The referent name of a symref is invalid.
`badReftableTableName`::
(WARN) A reftable table has an invalid name.
`badTagName`::
(INFO) A tag has an invalid format.
@ -113,6 +104,9 @@
`gitmodulesParse`::
(INFO) Could not parse `.gitmodules` blob.
`gitmodulesLarge`;
(ERROR) `.gitmodules` blob is too large to parse.
`gitmodulesPath`::
(ERROR) `.gitmodules` path is invalid.

View File

@ -16,18 +16,18 @@ git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [-
DESCRIPTION
-----------
Add contents of new or changed files to the index. The "index" (also
known as the "staging area") is what you use to prepare the contents of
the next commit.
This command updates the index using the current content found in
the working tree, to prepare the content staged for the next commit.
It typically adds the current content of existing paths as a whole,
but with some options it can also be used to add content with
only part of the changes made to the working tree files applied, or
remove paths that do not exist in the working tree anymore.
When you run `git commit` without any other arguments, it will only
commit staged changes. For example, if you've edited `file.c` and want
to commit your changes to that file, you can run:
git add file.c
git commit
You can also add only part of your changes to a file with `git add -p`.
The "index" holds a snapshot of the content of the working tree, and it
is this snapshot that is taken as the contents of the next commit. Thus
after making any changes to the working tree, and before running
the commit command, you must use the `add` command to add any new or
modified files to the index.
This command can be performed multiple times before a commit. It only
adds the content of the specified file(s) at the time the add command is
@ -37,10 +37,12 @@ you must run `git add` again to add the new content to the index.
The `git status` command can be used to obtain a summary of which
files have changes that are staged for the next commit.
The `git add` command will not add ignored files by default. You can
use the `--force` option to add ignored files. If you specify the exact
filename of an ignored file, `git add` will fail with a list of ignored
files. Otherwise it will silently ignore the file.
The `git add` command will not add ignored files by default. If any
ignored files were explicitly specified on the command line, `git add`
will fail with a list of ignored files. Ignored files reached by
directory recursion or filename globbing performed by Git (quote your
globs before the shell) will be silently ignored. The `git add` command can
be used to add ignored files with the `-f` (force) option.
Please see linkgit:git-commit[1] for alternative ways to add content to a
commit.
@ -102,8 +104,6 @@ This effectively runs `add --interactive`, but bypasses the
initial command menu and directly jumps to the `patch` subcommand.
See ``Interactive mode'' for details.
include::diff-context-options.adoc[]
`-e`::
`--edit`::
Open the diff vs. the index in an editor and let the user
@ -342,14 +342,13 @@ patch::
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - go to the next undecided hunk, roll over at the bottom
J - go to the next hunk, roll over at the bottom
k - go to the previous undecided hunk, roll over at the top
K - go to the previous hunk, roll over at the top
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
p - print the current hunk
P - print the current hunk using the pager
? - print help
+
After deciding the fate for all hunks, if there is any hunk

View File

@ -48,8 +48,7 @@ OPTIONS
--keep-non-patch::
Pass `-b` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]).
--keep-cr::
--no-keep-cr::
--[no-]keep-cr::
With `--keep-cr`, call 'git mailsplit' (see linkgit:git-mailsplit[1])
with the same option, to prevent it from stripping CR at the end of
lines. `am.keepcr` configuration variable can be used to specify the
@ -162,13 +161,6 @@ Valid <action> for the `--whitespace` option are:
commit creation as the committer date. This allows the
user to lie about the committer date by using the same
value as the author date.
+
WARNING: The history walking machinery assumes that commits have
non-decreasing commit timestamps. You should consider if you really need
to use this option. Then you should only use this option to override the
committer date when applying commits on top of a base which commit is
older (in terms of the commit date) than the oldest patch you are
applying.
--ignore-date::
By default the command records the date from the e-mail

View File

@ -75,14 +75,13 @@ OPTIONS
tree. If `--check` is in effect, merely check that it would
apply cleanly to the index entry.
-N::
--intent-to-add::
When applying the patch only to the working tree, mark new
files to be added to the index later (see `--intent-to-add`
option in linkgit:git-add[1]). This option is ignored if
`--index` or `--cached` are used, and has no effect outside a Git
repository. Note that `--index` could be implied by other options
such as `--3way`.
option in linkgit:git-add[1]). This option is ignored unless
running in a Git repository and `--index` is not specified.
Note that `--index` could be implied by other options such
as `--cached` or `--3way`.
-3::
--3way::

View File

@ -57,8 +57,7 @@ OPTIONS
blobs seen at a given path. The default minimum batch size is
50,000.
`--sparse`::
`--no-sparse`::
`--[no-]sparse`::
Only download objects if they appear at a path that matches the
current sparse-checkout. If the sparse-checkout feature is enabled,
then `--sparse` is assumed and can be disabled with `--no-sparse`.

View File

@ -9,22 +9,26 @@ git-bisect - Use binary search to find the commit that introduced a bug
SYNOPSIS
--------
[verse]
'git bisect' start [--term-(bad|new)=<term-new> --term-(good|old)=<term-old>]
[--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]
'git bisect' (bad|new|<term-new>) [<rev>]
'git bisect' (good|old|<term-old>) [<rev>...]
'git bisect' terms [--term-(good|old) | --term-(bad|new)]
'git bisect' skip [(<rev>|<range>)...]
'git bisect' next
'git bisect' reset [<commit>]
'git bisect' (visualize|view)
'git bisect' replay <logfile>
'git bisect' log
'git bisect' run <cmd> [<arg>...]
'git bisect' help
'git bisect' <subcommand> <options>
DESCRIPTION
-----------
The command takes various subcommands, and different options depending
on the subcommand:
git bisect start [--term-(bad|new)=<term-new> --term-(good|old)=<term-old>]
[--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]
git bisect (bad|new|<term-new>) [<rev>]
git bisect (good|old|<term-old>) [<rev>...]
git bisect terms [--term-(good|old) | --term-(bad|new)]
git bisect skip [(<rev>|<range>)...]
git bisect reset [<commit>]
git bisect (visualize|view)
git bisect replay <logfile>
git bisect log
git bisect run <cmd> [<arg>...]
git bisect help
This command uses a binary search algorithm to find which commit in
your project's history introduced a bug. You use it by first telling
it a "bad" commit that is known to contain the bug, and a "good"
@ -291,19 +295,6 @@ $ git bisect skip v2.5 v2.5..v2.6
This tells the bisect process that the commits between `v2.5` and
`v2.6` (inclusive) should be skipped.
Bisect next
~~~~~~~~~~~
Normally, after marking a revision as good or bad, Git automatically
computes and checks out the next revision to test. However, if you need to
explicitly request the next bisection step, you can use:
------------
$ git bisect next
------------
You might use this to resume the bisection process after interrupting it
by checking out a different revision.
Cutting down bisection by giving more parameters to bisect start
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -85,8 +85,6 @@ include::blame-options.adoc[]
Ignore whitespace when comparing the parent's version and
the child's to find where the lines came from.
include::diff-algorithm-option.adoc[]
--abbrev=<n>::
Instead of using the default 7+1 hexadecimal digits as the
abbreviated object name, use <m>+1 digits, where <m> is at

View File

@ -62,10 +62,8 @@ OPTIONS
or to ask for a "blob" with `<object>` being a tag object that
points at it.
--mailmap::
--no-mailmap::
--use-mailmap::
--no-use-mailmap::
--[no-]mailmap::
--[no-]use-mailmap::
Use mailmap file to map author, committer and tagger names
and email addresses to canonical real names and email addresses.
See linkgit:git-shortlog[1].
@ -309,11 +307,6 @@ newline. The available atoms are:
`objecttype`::
The type of the object (the same as `cat-file -t` reports).
`objectmode`::
If the specified object has mode information (such as a tree or
index entry), the mode expressed as an octal integer. Otherwise,
empty string.
`objectsize`::
The size, in bytes, of the object (the same as `cat-file -s`
reports).
@ -375,14 +368,6 @@ If a name is specified that might refer to more than one object (an ambiguous sh
<object> SP ambiguous LF
------------
If a name is specified that refers to a submodule entry in a tree and the
target object does not exist in the repository, then `cat-file` will ignore
any custom format and print (with the object ID of the submodule):
------------
<oid> SP submodule LF
------------
If `--follow-symlinks` is used, and a symlink in the repository points
outside the repository, then `cat-file` will ignore any custom format
and print:

View File

@ -19,8 +19,7 @@ For every pathname, this command will list if each attribute is 'unspecified',
OPTIONS
-------
-a::
--all::
-a, --all::
List all attributes that are associated with the specified
paths. If this option is used, then 'unspecified' attributes
will not be included in the output.

View File

@ -25,13 +25,11 @@ subject to exclude rules; but see `--no-index'.
OPTIONS
-------
-q::
--quiet::
-q, --quiet::
Don't output anything, just set exit status. This is only
valid with a single pathname.
-v::
--verbose::
-v, --verbose::
Instead of printing the paths that are excluded, for each path
that matches an exclude pattern, print the exclude pattern
together with the path. (Matching an exclude pattern usually
@ -51,8 +49,7 @@ linkgit:gitignore[5].
below). If `--stdin` is also given, input paths are separated
with a NUL character instead of a linefeed character.
-n::
--non-matching::
-n, --non-matching::
Show given paths which don't match any pattern. This only
makes sense when `--verbose` is enabled, otherwise it would
not be possible to distinguish between paths which match a

View File

@ -98,8 +98,7 @@ a branch.
OPTIONS
-------
--allow-onelevel::
--no-allow-onelevel::
--[no-]allow-onelevel::
Controls whether one-level refnames are accepted (i.e.,
refnames that do not contain multiple `/`-separated
components). The default is `--no-allow-onelevel`.

View File

@ -12,29 +12,25 @@ git checkout [-q] [-f] [-m] [<branch>]
git checkout [-q] [-f] [-m] --detach [<branch>]
git checkout [-q] [-f] [-m] [--detach] <commit>
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new-branch>] [<start-point>]
git checkout <tree-ish> [--] <pathspec>...
git checkout <tree-ish> --pathspec-from-file=<file> [--pathspec-file-nul]
git checkout [-f] <tree-ish> [--] <pathspec>...
git checkout [-f] <tree-ish> --pathspec-from-file=<file> [--pathspec-file-nul]
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [--] <pathspec>...
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] --pathspec-from-file=<file> [--pathspec-file-nul]
git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>...]
DESCRIPTION
-----------
`git checkout` has two main modes:
1. **Switch branches**, with `git checkout <branch>`
2. **Restore a different version of a file**, for example with
`git checkout <commit> <filename>` or `git checkout <filename>`
See ARGUMENT DISAMBIGUATION below for how Git decides which one to do.
Updates files in the working tree to match the version in the index
or the specified tree. If no pathspec was given, `git checkout` will
also update `HEAD` to set the specified branch as the current
branch.
`git checkout [<branch>]`::
Switch to _<branch>_. This sets the current branch to _<branch>_ and
updates the files in your working directory. The checkout will fail
if there are uncommitted changes to any files where _<branch>_ and
your current commit have different content. Uncommitted changes will
otherwise be kept.
To prepare for working on _<branch>_, switch to it by updating
the index and the files in the working tree, and by pointing
`HEAD` at the branch. Local modifications to the files in the
working tree are kept, so that they can be committed to the
_<branch>_.
+
If _<branch>_ is not found but there does exist a tracking branch in
exactly one remote (call it _<remote>_) with a matching name and
@ -44,63 +40,68 @@ exactly one remote (call it _<remote>_) with a matching name and
$ git checkout -b <branch> --track <remote>/<branch>
------------
+
Running `git checkout` without specifying a branch has no effect except
to print out the tracking information for the current branch.
You could omit _<branch>_, in which case the command degenerates to
"check out the current branch", which is a glorified no-op with
rather expensive side-effects to show only the tracking information,
if it exists, for the current branch.
`git checkout -b <new-branch> [<start-point>]`::
`git checkout (-b|-B) <new-branch> [<start-point>]`::
Create a new branch named _<new-branch>_, start it at _<start-point>_
(defaults to the current commit), and check out the new branch.
You can use the `--track` or `--no-track` options to set the branch's
upstream tracking information.
Specifying `-b` causes a new branch to be created as if
linkgit:git-branch[1] were called and then checked out. In
this case you can use the `--track` or `--no-track` options,
which will be passed to `git branch`. As a convenience,
`--track` without `-b` implies branch creation; see the
description of `--track` below.
+
This will fail if there's an error checking out _<new-branch>_, for
example if checking out the `<start-point>` commit would overwrite your
uncommitted changes.
`git checkout -B <branch> [<start-point>]`::
The same as `-b`, except that if the branch already exists it
resets _<branch>_ to the start point instead of failing.
If `-B` is given, _<new-branch>_ is created if it doesn't exist; otherwise, it
is reset. This is the transactional equivalent of
+
------------
$ git branch -f <branch> [<start-point>]
$ git checkout <branch>
------------
+
that is to say, the branch is not reset/created unless "git checkout" is
successful (e.g., when the branch is in use in another worktree, not
just the current branch stays the same, but the branch is not reset to
the start-point, either).
`git checkout --detach [<branch>]`::
`git checkout [--detach] <commit>`::
The same as `git checkout <branch>`, except that instead of pointing
`HEAD` at the branch, it points `HEAD` at the commit ID.
See the "DETACHED HEAD" section below for more.
Prepare to work on top of _<commit>_, by detaching `HEAD` at it
(see "DETACHED HEAD" section), and updating the index and the
files in the working tree. Local modifications to the files
in the working tree are kept, so that the resulting working
tree will be the state recorded in the commit plus the local
modifications.
+
When the _<commit>_ argument is a branch name, the `--detach` option can
be used to detach `HEAD` at the tip of the branch (`git checkout
<branch>` would check out that branch without detaching `HEAD`).
+
Omitting _<branch>_ detaches `HEAD` at the tip of the current branch.
`git checkout <tree-ish> [--] <pathspec>...`::
`git checkout <tree-ish> --pathspec-from-file=<file> [--pathspec-file-nul]`::
`git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <pathspec>...`::
`git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] --pathspec-from-file=<file> [--pathspec-file-nul]`::
Replace the specified files and/or directories with the version from
the given commit or tree and add them to the index
(also known as "staging area").
Overwrite the contents of the files that match the pathspec.
When the _<tree-ish>_ (most often a commit) is not given,
overwrite working tree with the contents in the index.
When the _<tree-ish>_ is given, overwrite both the index and
the working tree with the contents at the _<tree-ish>_.
+
For example, `git checkout main file.txt` will replace `file.txt`
with the version from `main`.
`git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [--] <pathspec>...`::
`git checkout [-f|--ours|--theirs|-m|--conflict=<style>] --pathspec-from-file=<file> [--pathspec-file-nul]`::
Replace the specified files and/or directories with the version from
the index.
+
For example, if you check out a commit, edit `file.txt`, and then
decide those changes were a mistake, `git checkout file.txt` will
discard any unstaged changes to `file.txt`.
+
This will fail if the file has a merge conflict and you haven't yet run
`git add file.txt` (or something equivalent) to mark it as resolved.
You can use `-f` to ignore the unmerged files instead of failing, use
`--ours` or `--theirs` to replace them with the version from a specific
side of the merge, or use `-m` to replace them with the original
conflicted merge result.
The index may contain unmerged entries because of a previous failed merge.
By default, if you try to check out such an entry from the index, the
checkout operation will fail and nothing will be checked out.
Using `-f` will ignore these unmerged entries. The contents from a
specific side of the merge can be checked out of the index by
using `--ours` or `--theirs`. With `-m`, changes made to the working tree
file can be discarded to re-create the original conflicted merge result.
`git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>...]`::
This is similar to the previous two modes, but lets you use the
This is similar to the previous mode, but lets you use the
interactive interface to show the "diff" output and choose which
hunks to use in the result. See below for the description of
`--patch` option.
@ -154,14 +155,16 @@ of it").
see linkgit:git-branch[1] for details.
`-B <new-branch>`::
The same as `-b`, except that if the branch already exists it
resets _<branch>_ to the start point instead of failing.
Creates the branch _<new-branch>_, start it at _<start-point>_;
if it already exists, then reset it to _<start-point>_. And then
check the resulting branch out. This is equivalent to running
`git branch` with `-f` followed by `git checkout` of that branch;
see linkgit:git-branch[1] for details.
`-t`::
`--track[=(direct|inherit)]`::
When creating a new branch, set up "upstream" configuration. See
`--track` in linkgit:git-branch[1] for details. As a convenience,
--track without -b implies branch creation.
`--track` in linkgit:git-branch[1] for details.
+
If no `-b` option is given, the name of the new branch will be
derived from the remote-tracking branch, by looking at the local part of
@ -286,8 +289,6 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
Note that this option uses the no overlay mode by default (see also
`--overlay`), and currently doesn't support overlay mode.
include::diff-context-options.adoc[]
`--ignore-other-worktrees`::
`git checkout` refuses when the wanted branch is already checked
out or otherwise in use by another worktree. This option makes
@ -331,7 +332,7 @@ include::diff-context-options.adoc[]
separated with _NUL_ character and all other characters are taken
literally (including newlines and quotes).
`<branch>`::
<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
branch is checked out. Otherwise, if it refers to a valid
@ -508,18 +509,14 @@ $ git log -g -2 HEAD
ARGUMENT DISAMBIGUATION
-----------------------
When you run `git checkout <something>`, Git tries to guess whether
_<something>_ is intended to be a branch, a commit, or a set of file(s),
and then either switches to that branch or commit, or restores the
specified files.
If there's any ambiguity, Git will treat `<something>` as a branch or
commit, but you can use the double dash `--` to force Git to treat the
parameter as a list of files and/or directories, like this:
----------
git checkout -- file.txt
----------
When there is only one argument given and it is not `--` (e.g. `git
checkout abc`), and when the argument is both a valid _<tree-ish>_
(e.g. a branch `abc` exists) and a valid _<pathspec>_ (e.g. a file
or a directory whose name is "abc" exists), Git would usually ask
you to disambiguate. Because checking out a branch is so common an
operation, however, `git checkout abc` takes "abc" as a _<tree-ish>_
in such a situation. Use `git checkout -- <pathspec>` if you want
to checkout these paths out of the index.
EXAMPLES
--------

View File

@ -16,7 +16,7 @@ git clone [--template=<template-directory>]
[--depth <depth>] [--[no-]single-branch] [--[no-]tags]
[--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
[--[no-]remote-submodules] [--jobs <n>] [--sparse] [--[no-]reject-shallow]
[--filter=<filter-spec> [--also-filter-submodules]] [--] <repository>
[--filter=<filter-spec>] [--also-filter-submodules]] [--] <repository>
[<directory>]
DESCRIPTION
@ -272,8 +272,7 @@ corresponding `--mirror` and `--no-tags` options instead.
reachable from a specified remote branch or tag. This option
can be specified multiple times.
`--single-branch`::
`--no-single-branch`::
`--[no-]single-branch`::
Clone only the history leading to the tip of a single branch,
either specified by the `--branch` option or the primary
branch remote's `HEAD` points at.
@ -283,8 +282,7 @@ corresponding `--mirror` and `--no-tags` options instead.
branch when `--single-branch` clone was made, no remote-tracking
branch is created.
`--tags`::
`--no-tags`::
`--[no-]tags`::
Control whether or not tags will be cloned. When `--no-tags` is
given, the option will be become permanent by setting the
`remote.<remote>.tagOpt=--no-tags` configuration. This ensures that
@ -315,12 +313,10 @@ the clone is finished. This option is ignored if the cloned repository does
not have a worktree/checkout (i.e. if any of `--no-checkout`/`-n`, `--bare`,
or `--mirror` is given)
`--shallow-submodules`::
`--no-shallow-submodules`::
`--[no-]shallow-submodules`::
All submodules which are cloned will be shallow with a depth of 1.
`--remote-submodules`::
`--no-remote-submodules`::
`--[no-]remote-submodules`::
All submodules which are cloned will use the status of the submodule's
remote-tracking branch to update the submodule, rather than the
superproject's recorded SHA-1. Equivalent to passing `--remote` to

View File

@ -34,8 +34,7 @@ OPTIONS
object directory, `git commit-graph ...` will exit with non-zero
status.
--progress::
--no-progress::
--[no-]progress::
Turn progress on/off explicitly. If neither is specified, progress is
shown if standard error is connected to a terminal.
@ -71,7 +70,7 @@ take a while on large repositories. It provides significant performance gains
for getting history of a directory or a file with `git log -- <path>`. If
this option is given, future commit-graph writes will automatically assume
that this option was intended. Use `--no-changed-paths` to stop storing this
data. `--changed-paths` is implied by config `commitGraph.changedPaths=true`.
data.
+
With the `--max-new-filters=<n>` option, generate at most `n` new Bloom
filters (if `--changed-paths` is specified). If `n` is `-1`, no limit is

View File

@ -76,8 +76,6 @@ OPTIONS
which changes to commit. See linkgit:git-add[1] for
details.
include::diff-context-options.adoc[]
`-C <commit>`::
`--reuse-message=<commit>`::
Take an existing _<commit>_ object, and reuse the log message
@ -146,8 +144,7 @@ See linkgit:git-rebase[1] for details.
linkgit:git-status[1] for details. Implies `--dry-run`.
`--branch`::
Show the branch and tracking info even in short-format. See
linkgit:git-status[1] for details.
Show the branch and tracking info even in short-format.
`--porcelain`::
When doing a dry-run, give the output in a porcelain-ready
@ -155,13 +152,12 @@ See linkgit:git-rebase[1] for details.
`--dry-run`.
`--long`::
When doing a dry-run, give the output in the long-format. This
is the default output of linkgit:git-status[1]. Implies
`--dry-run`.
When doing a dry-run, give the output in the long-format.
Implies `--dry-run`.
`-z`::
`--null`::
When showing `short` or `porcelain` linkgit:git-status[1] output, print the
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
@ -216,8 +212,7 @@ include::signoff-option.adoc[]
each trailer would appear, and other details.
`-n`::
`--verify`::
`--no-verify`::
`--[no-]verify`::
Bypass the `pre-commit` and `commit-msg` hooks.
See also linkgit:githooks[5].
@ -284,7 +279,6 @@ variable (see linkgit:git-config[1]).
+
--
It is a rough equivalent for:
------
$ git reset --soft HEAD^
$ ... do something else to come up with the right tree ...

View File

@ -10,9 +10,9 @@ SYNOPSIS
--------
[verse]
'git config list' [<file-option>] [<display-option>] [--includes]
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<pattern>] [--fixed-value] [--default=<default>] [--url=<url>] <name>
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<pattern>] [--fixed-value] <name> <value>
'git config unset' [<file-option>] [--all] [--value=<pattern>] [--fixed-value] <name>
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<value>] [--fixed-value] [--default=<default>] <name>
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>
'git config unset' [<file-option>] [--all] [--value=<value>] [--fixed-value] <name>
'git config rename-section' [<file-option>] <old-name> <new-name>
'git config remove-section' [<file-option>] <name>
'git config edit' [<file-option>]
@ -26,7 +26,7 @@ escaped.
Multiple lines can be added to an option by using the `--append` option.
If you want to update or unset an option which can occur on multiple
lines, `--value=<pattern>` (which is an extended regular expression,
lines, a `value-pattern` (which is an extended regular expression,
unless the `--fixed-value` option is given) needs to be given. Only the
existing values that match the pattern are updated or unset. If
you want to handle the lines that do *not* match the pattern, just
@ -109,7 +109,7 @@ OPTIONS
--replace-all::
Default behavior is to replace at most one line. This replaces
all lines matching the key (and optionally `--value=<pattern>`).
all lines matching the key (and optionally the `value-pattern`).
--append::
Adds a new line to the option without altering any existing
@ -117,15 +117,15 @@ OPTIONS
--comment <message>::
Append a comment at the end of new or modified lines.
+
If _<message>_ begins with one or more whitespaces followed
by "#", it is used as-is. If it begins with "#", a space is
prepended before it is used. Otherwise, a string " # " (a
space followed by a hash followed by a space) is prepended
to it. And the resulting string is placed immediately after
the value defined for the variable. The _<message>_ must
not contain linefeed characters (no multi-line comments are
permitted).
If _<message>_ begins with one or more whitespaces followed
by "#", it is used as-is. If it begins with "#", a space is
prepended before it is used. Otherwise, a string " # " (a
space followed by a hash followed by a space) is prepended
to it. And the resulting string is placed immediately after
the value defined for the variable. The _<message>_ must
not contain linefeed characters (no multi-line comments are
permitted).
--all::
With `get`, return all values for a multi-valued key.
@ -200,19 +200,11 @@ See also <<FILES>>.
section in linkgit:gitrevisions[7] for a more complete list of
ways to spell blob names.
`--value=<pattern>`::
`--no-value`::
With `get`, `set`, and `unset`, match only against
_<pattern>_. The pattern is an extended regular expression unless
`--fixed-value` is given.
+
Use `--no-value` to unset _<pattern>_.
--fixed-value::
When used with `--value=<pattern>`, treat _<pattern>_ as
When used with the `value-pattern` argument, treat `value-pattern` as
an exact string instead of a regular expression. This will restrict
the name/value pairs that are matched to only those where the value
is exactly equal to _<pattern>_.
is exactly equal to the `value-pattern`.
--type <type>::
'git config' will ensure that any input or output is valid under the given
@ -267,12 +259,6 @@ Valid `<type>`'s include:
Output only the names of config variables for `list` or
`get`.
`--show-names`::
`--no-show-names`::
With `get`, show config keys in addition to their values. The
default is `--no-show-names` unless `--url` is given and there
are no subsections in _<name>_.
--show-origin::
Augment the output of all queried config options with the
origin type (file, standard input, blob, command line) and
@ -295,8 +281,7 @@ Valid `<type>`'s include:
When the color setting for `name` is undefined, the command uses
`color.ui` as fallback.
--includes::
--no-includes::
--[no-]includes::
Respect `include.*` directives in config files when looking up
values. Defaults to `off` when a specific file is given (e.g.,
using `--file`, `--global`, etc) and `on` when searching all

View File

@ -28,8 +28,6 @@ size: disk space consumed by loose objects, in KiB (unless -H is specified)
+
in-pack: the number of in-pack objects
+
packs: the number of pack files
+
size-pack: disk space consumed by the packs, in KiB (unless -H is specified)
+
prune-packable: the number of loose objects that are also present in

View File

@ -14,7 +14,7 @@ git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]
git diff [<options>] [--merge-base] <commit> [<commit>...] <commit> [--] [<path>...]
git diff [<options>] <commit>...<commit> [--] [<path>...]
git diff [<options>] <blob> <blob>
git diff [<options>] --no-index [--] <path> <path> [<pathspec>...]
git diff [<options>] --no-index [--] <path> <path>
DESCRIPTION
-----------
@ -31,18 +31,14 @@ files on disk.
further add to the index but you still haven't. You can
stage these changes by using linkgit:git-add[1].
`git diff [<options>] --no-index [--] <path> <path> [<pathspec>...]`::
`git diff [<options>] --no-index [--] <path> <path>`::
This form is to compare the given two paths on the
filesystem. You can omit the `--no-index` option when
running the command in a working tree controlled by Git and
at least one of the paths points outside the working tree,
or when running the command outside a working tree
controlled by Git. This form implies `--exit-code`. If both
paths point to directories, additional pathspecs may be
provided. These will limit the files included in the
difference. All such pathspecs must be relative as they
apply to both sides of the diff.
controlled by Git. This form implies `--exit-code`.
`git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]`::

View File

@ -77,8 +77,7 @@ with custom merge tool commands and has the same value as `$MERGED`.
--tool-help::
Print a list of diff tools that may be used with `--tool`.
--symlinks::
--no-symlinks::
--[no-]symlinks::
'git difftool''s default behavior is to create symlinks to the
working tree when run in `--dir-diff` mode and the right-hand
side of the comparison yields the same content as the file in
@ -95,8 +94,7 @@ instead. `--no-symlinks` is the default on Windows.
Additionally, `$BASE` is set in the environment.
-g::
--gui::
--no-gui::
--[no-]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`. This may be
@ -106,8 +104,7 @@ instead. `--no-symlinks` is the default on Windows.
fallback in the order of `merge.guitool`, `diff.tool`,
`merge.tool` until a tool is found.
--trust-exit-code::
--no-trust-exit-code::
--[no-]trust-exit-code::
Errors reported by the diff tool are ignored by default.
Use `--trust-exit-code` to make 'git-difftool' exit when an
invoked diff tool returns a non-zero exit code.

View File

@ -50,23 +50,6 @@ resulting tag will have an invalid signature.
is the same as how earlier versions of this command without
this option behaved.
+
When exported, a signature starts with:
+
gpgsig <git-hash-algo> <signature-format>
+
where <git-hash-algo> is the Git object hash so either "sha1" or
"sha256", and <signature-format> is the signature type, so "openpgp",
"x509", "ssh" or "unknown".
+
For example, an OpenPGP signature on a SHA-1 commit starts with
`gpgsig sha1 openpgp`, while an SSH signature on a SHA-256 commit
starts with `gpgsig sha256 ssh`.
+
While all the signatures of a commit are exported, an importer may
choose to accept only some of them. For example
linkgit:git-fast-import[1] currently stores at most one signature per
Git hash algorithm in each commit.
+
NOTE: This is highly experimental and the format of the data stream may
change in the future without compatibility guarantees.

View File

@ -61,31 +61,10 @@ OPTIONS
currently impacts only the `export-marks`, `import-marks`, and
`import-marks-if-exists` feature commands.
+
Only enable this option if you trust the program generating the
fast-import stream! This option is enabled automatically for
remote-helpers that use the `import` capability, as they are
already trusted to run their own code.
`--signed-tags=(verbatim|warn-verbatim|warn-strip|strip|abort)`::
Specify how to handle signed tags. Behaves in the same way as
the `--signed-commits=<mode>` below, except that the
`strip-if-invalid` mode is not yet supported. Like for signed
commits, the default mode is `verbatim`.
`--signed-commits=<mode>`::
Specify how to handle signed commits. The following <mode>s
are supported:
+
* `verbatim`, which is the default, will silently import commit
signatures.
* `warn-verbatim` will import them, but will display a warning.
* `abort` will make this program die when encountering a signed
commit.
* `strip` will silently make the commits unsigned.
* `warn-strip` will make them unsigned, but will display a warning.
* `strip-if-invalid` will check signatures and, if they are invalid,
will strip them and display a warning. The validation is performed
in the same way as linkgit:git-verify-commit[1] does it.
Only enable this option if you trust the program generating the
fast-import stream! This option is enabled automatically for
remote-helpers that use the `import` capability, as they are
already trusted to run their own code.
Options for Frontends
~~~~~~~~~~~~~~~~~~~~~
@ -132,8 +111,7 @@ Locations of Marks Files
Like --import-marks but instead of erroring out, silently
skips the file if it does not exist.
--relative-marks::
--no-relative-marks::
--[no-]relative-marks::
After specifying --relative-marks the paths specified
with --import-marks= and --export-marks= are relative
to an internal directory in the current repository.
@ -204,7 +182,7 @@ amount of memory usage and processing time. Assuming the frontend
is able to keep up with fast-import and feed it a constant stream of data,
import times for projects holding 10+ years of history and containing
100,000+ individual commits are generally completed in just 1-2
hours on quite modest hardware (~$2,000 USD in 2007).
hours on quite modest (~$2,000 USD) hardware.
Most bottlenecks appear to be in foreign source data access (the
source just cannot extract revisions fast enough) or disk IO (fast-import
@ -467,7 +445,7 @@ one).
original-oid?
('author' (SP <name>)? SP LT <email> GT SP <when> LF)?
'committer' (SP <name>)? SP LT <email> GT SP <when> LF
('gpgsig' SP <algo> SP <format> LF data)?
('gpgsig' SP <alg> LF data)?
('encoding' SP <encoding> LF)?
data
('from' SP <commit-ish> LF)?
@ -540,39 +518,13 @@ their syntax.
^^^^^^^^
The optional `gpgsig` command is used to include a PGP/GPG signature
or other cryptographic signature that signs the commit data.
that signs the commit data.
....
'gpgsig' SP <git-hash-algo> SP <signature-format> LF data
....
Here <alg> specifies which hashing algorithm is used for this
signature, either `sha1` or `sha256`.
The `gpgsig` command takes two arguments:
* `<git-hash-algo>` specifies which Git object format this signature
applies to, either `sha1` or `sha256`. This allows to know which
representation of the commit was signed (the SHA-1 or the SHA-256
version) which helps with both signature verification and
interoperability between repos with different hash functions.
* `<signature-format>` specifies the type of signature, such as
`openpgp`, `x509`, `ssh`, or `unknown`. This is a convenience for
tools that process the stream, so they don't have to parse the ASCII
armor to identify the signature type.
A commit may have at most one signature for the SHA-1 object format
(stored in the "gpgsig" header) and one for the SHA-256 object format
(stored in the "gpgsig-sha256" header).
See below for a detailed description of the `data` command which
contains the raw signature data.
Signatures are not yet checked in the current implementation
though. (Already setting the `extensions.compatObjectFormat`
configuration option might help with verifying both SHA-1 and SHA-256
object format signatures when it will be implemented.)
NOTE: This is highly experimental and the format of the `gpgsig`
command may change in the future without compatibility guarantees.
NOTE: This is highly experimental and the format of the data stream may
change in the future without compatibility guarantees.
`encoding`
^^^^^^^^^^
@ -627,11 +579,9 @@ Marks must be declared (via `mark`) before they can be used.
The special case of restarting an incremental import from the
current branch value should be written as:
----
from refs/heads/branch^0
----
The `^0` suffix is necessary as fast-import does not permit a branch to
start from itself, and the branch is created in memory before the
`from` command is even read from the input. Adding `^0` will force
@ -668,7 +618,7 @@ External data format::
+
Here usually `<dataref>` must be either a mark reference (`:<idnum>`)
set by a prior `blob` command, or a full 40-byte SHA-1 of an
existing Git blob object. If `<mode>` is `040000` then
existing Git blob object. If `<mode>` is `040000`` then
`<dataref>` must be the full 40-byte SHA-1 of an existing
Git tree object or a mark reference set with `--import-marks`.

View File

@ -8,11 +8,11 @@ git-fetch - Download objects and refs from another repository
SYNOPSIS
--------
[synopsis]
git fetch [<options>] [<repository> [<refspec>...]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository>|<group>)...]
git fetch --all [<options>]
[verse]
'git fetch' [<options>] [<repository> [<refspec>...]]
'git fetch' [<options>] <group>
'git fetch' --multiple [<options>] [(<repository> | <group>)...]
'git fetch' --all [<options>]
DESCRIPTION
@ -20,19 +20,19 @@ DESCRIPTION
Fetch branches and/or tags (collectively, "refs") from one or more
other repositories, along with the objects necessary to complete their
histories. Remote-tracking branches are updated (see the description
of _<refspec>_ below for ways to control this behavior).
of <refspec> below for ways to control this behavior).
By default, any tag that points into the histories being fetched is
also fetched; the effect is to fetch tags that
point at branches that you are interested in. This default behavior
can be changed by using the `--tags` or `--no-tags` options or by
configuring `remote.<name>.tagOpt`. By using a refspec that fetches tags
can be changed by using the --tags or --no-tags options or by
configuring remote.<name>.tagOpt. By using a refspec that fetches tags
explicitly, you can fetch tags that do not point into branches you
are interested in as well.
`git fetch` can fetch from either a single named repository or URL,
or from several repositories at once if _<group>_ is given and
there is a `remotes.<group>` entry in the configuration file.
'git fetch' can fetch from either a single named repository or URL,
or from several repositories at once if <group> is given and
there is a remotes.<group> entry in the configuration file.
(See linkgit:git-config[1]).
When no remote is specified, by default the `origin` remote will be used,
@ -48,15 +48,15 @@ include::fetch-options.adoc[]
include::pull-fetch-param.adoc[]
`--stdin`::
--stdin::
Read refspecs, one per line, from stdin in addition to those provided
as arguments. The "tag _<name>_" format is not supported.
as arguments. The "tag <name>" format is not supported.
include::urls-remotes.adoc[]
[[CRTB]]
CONFIGURED REMOTE-TRACKING BRANCHES
-----------------------------------
CONFIGURED REMOTE-TRACKING BRANCHES[[CRTB]]
-------------------------------------------
You often interact with the same remote repository by
regularly and repeatedly fetching from it. In order to keep track
@ -84,13 +84,13 @@ This configuration is used in two ways:
* When `git fetch` is run with explicit branches and/or tags
to fetch on the command line, e.g. `git fetch origin master`, the
_<refspec>s_ given on the command line determine what are to be
<refspec>s given on the command line determine what are to be
fetched (e.g. `master` in the example,
which is a short-hand for `master:`, which in turn means
"fetch the `master` branch but I do not explicitly say what
"fetch the 'master' branch but I do not explicitly say what
remote-tracking branch to update with it from the command line"),
and the example command will
fetch _only_ the `master` branch. The `remote.<repository>.fetch`
fetch _only_ the 'master' branch. The `remote.<repository>.fetch`
values determine which
remote-tracking branch, if any, is updated. When used in this
way, the `remote.<repository>.fetch` values do not have any
@ -144,9 +144,9 @@ tracking branches that are deleted, but any local tag that doesn't
exist on the remote.
This might not be what you expect, i.e. you want to prune remote
_<name>_, but also explicitly fetch tags from it, so when you fetch
`<name>`, but also explicitly fetch tags from it, so when you fetch
from it you delete all your local tags, most of which may not have
come from the _<name>_ remote in the first place.
come from the `<name>` remote in the first place.
So be careful when using this with a refspec like
`refs/tags/*:refs/tags/*`, or any other refspec which might map
@ -213,11 +213,11 @@ of the form:
<flag> <old-object-id> <new-object-id> <local-reference>
-------------------------------
The status of up-to-date refs is shown only if the `--verbose` option is
The status of up-to-date refs is shown only if the --verbose option is
used.
In compact output mode, specified with configuration variable
fetch.output, if either entire _<from>_ or _<to>_ is found in the
fetch.output, if either entire `<from>` or `<to>` is found in the
other string, it will be substituted with `*` in the other string. For
example, `master -> origin/master` becomes `master -> origin/*`.
@ -303,7 +303,7 @@ include::config/fetch.adoc[]
BUGS
----
Using `--recurse-submodules` can only fetch new commits in submodules that are
Using --recurse-submodules can only fetch new commits in submodules that are
present locally e.g. in `$GIT_DIR/modules/`. If the upstream adds a new
submodule, that submodule cannot be fetched until it is cloned e.g. by `git
submodule update`. This is expected to be fixed in a future Git version.

View File

@ -35,8 +35,7 @@ OPTIONS
Do not list one-line descriptions from the actual commits being
merged.
--summary::
--no-summary::
--[no-]summary::
Synonyms to --log and --no-log; these are deprecated and will be
removed in the future.

View File

@ -7,28 +7,106 @@ git-for-each-ref - Output information on each ref
SYNOPSIS
--------
[synopsis]
git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl]
[verse]
'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
[(--sort=<key>)...] [--format=<format>]
[--include-root-refs] [--points-at=<object>]
[--include-root-refs] [ --stdin | <pattern>... ]
[--points-at=<object>]
[--merged[=<object>]] [--no-merged[=<object>]]
[--contains[=<object>]] [--no-contains[=<object>]]
[(--exclude=<pattern>)...] [--start-after=<marker>]
[ --stdin | (<pattern>...)]
[--exclude=<pattern> ...]
DESCRIPTION
-----------
Iterate over all refs that match _<pattern>_ and show them
according to the given _<format>_, after sorting them according
to the given set of _<key>_. If _<count>_ is given, stop after
showing that many refs. The interpolated values in _<format>_
Iterate over all refs that match `<pattern>` and show them
according to the given `<format>`, after sorting them according
to the given set of `<key>`. If `<count>` is given, stop after
showing that many refs. The interpolated values in `<format>`
can optionally be quoted as string literals in the specified
host language allowing their direct evaluation in that language.
OPTIONS
-------
include::for-each-ref-options.adoc[]
<pattern>...::
If one or more patterns are given, only refs are shown that
match against at least one pattern, either using fnmatch(3) or
literally, in the latter case matching completely or from the
beginning up to a slash.
--stdin::
If `--stdin` is supplied, then the list of patterns is read from
standard input instead of from the argument list.
--count=<count>::
By default the command shows all refs that match
`<pattern>`. This option makes it stop after showing
that many refs.
--sort=<key>::
A field name to sort on. Prefix `-` to sort in
descending order of the value. When unspecified,
`refname` is used. You may use the --sort=<key> option
multiple times, in which case the last key becomes the primary
key.
--format=<format>::
A string that interpolates `%(fieldname)` from a ref being shown and
the object it points at. In addition, the string literal `%%`
renders as `%` and `%xx` - where `xx` are hex digits - renders as
the character with hex code `xx`. For example, `%00` interpolates to
`\0` (NUL), `%09` to `\t` (TAB), and `%0a` to `\n` (LF).
+
When unspecified, `<format>` defaults to `%(objectname) SPC %(objecttype)
TAB %(refname)`.
--color[=<when>]::
Respect any colors specified in the `--format` option. The
`<when>` field must be one of `always`, `never`, or `auto` (if
`<when>` is absent, behave as if `always` was given).
--shell::
--perl::
--python::
--tcl::
If given, strings that substitute `%(fieldname)`
placeholders are quoted as string literals suitable for
the specified host language. This is meant to produce
a scriptlet that can directly be `eval`ed.
--points-at=<object>::
Only list refs which points at the given object.
--merged[=<object>]::
Only list refs whose tips are reachable from the
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).
--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.
--omit-empty::
Do not print a newline after formatted refs where the format expands
to the empty string.
--exclude=<pattern>::
If one or more patterns are given, only refs which do not match
any excluded pattern(s) are shown. Matching is done using the
same rules as `<pattern>` above.
--include-root-refs::
List root refs (HEAD and pseudorefs) apart from regular refs.
FIELD NAMES
-----------
@ -39,44 +117,44 @@ keys.
For all objects, the following names can be used:
`refname`::
The name of the ref (the part after `$GIT_DIR/`).
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, strip _<n>_
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
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.
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 synonym to `lstrip`.
`objecttype`::
objecttype::
The type of the object (`blob`, `tree`, `commit`, `tag`).
`objectsize`::
objectsize::
The size of the object (the same as 'git cat-file -s' reports).
Append `:disk` to get the size, in bytes, that the object takes up on
disk. See the note about on-disk sizes in the 'CAVEATS' section below.
`objectname`::
disk. See the note about on-disk sizes in the `CAVEATS` section below.
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
`:short=<length>`, where the minimum length is MINIMUM_ABBREV. The
length may be exceeded to ensure unique object names.
`deltabase`::
deltabase::
This expands to the object name of the delta base for the
given object, if it is stored as a delta. Otherwise it
expands to the null object name (all zeroes).
`upstream`::
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
@ -98,103 +176,100 @@ 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.
`push`::
push::
The name of a local ref which represents the `@{push}`
location for the displayed ref. Respects `:short`, `:lstrip`,
`:rstrip`, `:track`, `:trackshort`, `:remotename`, and `:remoteref`
options as `upstream` does. Produces an empty string if no `@{push}`
ref is configured.
`HEAD`::
`*` if `HEAD` matches current ref (the checked out branch), ' '
HEAD::
'*' if HEAD matches current ref (the checked out branch), ' '
otherwise.
`color`::
color::
Change output color. Followed by `:<colorname>`, where color
names are described under Values in the "CONFIGURATION FILE"
section of linkgit:git-config[1]. For example,
`%(color:bold red)`.
`align`::
align::
Left-, middle-, or right-align the content between
`%(align:...)` and `%(end)`. The "`align:`" is followed by
%(align:...) and %(end). The "align:" is followed by
`width=<width>` and `position=<position>` in any order
separated by a comma, where the _<position>_ is either `left`,
`right` or `middle`, default being `left` and _<width>_ is the total
separated by a comma, where the `<position>` is either left,
right or middle, default being left and `<width>` is the total
length of the content with alignment. For brevity, the
"width=" and/or "position=" prefixes may be omitted, and bare
_<width>_ and _<position>_ used instead. For instance,
<width> and <position> used instead. For instance,
`%(align:<width>,<position>)`. If the contents length is more
than the width then no alignment is performed. If used with
`--quote` everything in between `%(align:...)` and `%(end)` is
`--quote` everything in between %(align:...) and %(end) is
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
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
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`::
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.
`signature`::
signature::
The GPG signature of a commit.
`signature:grade`::
Show
`G`;; for a good (valid) signature
`B`;; for a bad signature
`U`;; for a good signature with unknown validity
`X`;; for a good signature that has expired
`Y`;; for a good signature made by an expired key
`R`;; for a good signature made by a revoked key
`E`;; if the signature cannot be checked (e.g. missing key)
`N`;; for no signature.
signature:grade::
Show "G" for a good (valid) signature, "B" for a bad
signature, "U" for a good signature with unknown validity, "X"
for a good signature that has expired, "Y" for a good
signature made by an expired key, "R" for a good signature
made by a revoked key, "E" if the signature cannot be
checked (e.g. missing key) and "N" for no signature.
`signature:signer`::
signature:signer::
The signer of the GPG signature of a commit.
`signature:key`::
signature:key::
The key of the GPG signature of a commit.
`signature:fingerprint`::
signature:fingerprint::
The fingerprint of the GPG signature of a commit.
`signature:primarykeyfingerprint`::
signature:primarykeyfingerprint::
The primary key fingerprint of the GPG signature of a commit.
`signature:trustlevel`::
signature:trustlevel::
The trust level of the GPG signature of a commit. Possible
outputs are `ultimate`, `fully`, `marginal`, `never` and `undefined`.
`worktreepath`::
worktreepath::
The absolute path to the worktree in which the ref is checked
out, if it is checked out in any linked worktree. Empty string
otherwise.
`ahead-behind:<commit-ish>`::
ahead-behind:<committish>::
Two integers, separated by a space, demonstrating the number of
commits ahead and behind, respectively, when comparing the output
ref to the _<committish>_ specified in the format.
ref to the `<committish>` specified in the format.
`is-base:<commit-ish>`::
In at most one row, `(<commit-ish>)` will appear to indicate the ref
is-base:<committish>::
In at most one row, `(<committish>)` will appear to indicate the ref
that is most likely the ref used as a starting point for the branch
that produced _<commit-ish>_. This choice is made using a heuristic:
that produced `<committish>`. This choice is made using a heuristic:
choose the ref that minimizes the number of commits in the
first-parent history of _<commit-ish>_ and not in the first-parent
first-parent history of `<committish>` and not in the first-parent
history of the ref.
+
For example, consider the following figure of first-parent histories of
@ -228,29 +303,29 @@ common first-parent ancestor of `B` and `C` and ties are broken by the
earliest ref in the sorted order.
+
Note that this token will not appear if the first-parent history of
_<commit-ish>_ does not intersect the first-parent histories of the
`<committish>` does not intersect the first-parent histories of the
filtered refs.
`describe[:<option>,...]`::
describe[:options]::
A human-readable name, like linkgit:git-describe[1];
empty string for undescribable commits. The `describe` string may
be followed by a colon and one or more comma-separated options.
+
--
`tags=<bool-value>`;;
tags=<bool-value>;;
Instead of only considering annotated tags, consider
lightweight tags as well; see the corresponding option in
linkgit:git-describe[1] for details.
`abbrev=<number>`;;
Use at least _<number>_ hexadecimal digits; see the corresponding
abbrev=<number>;;
Use at least <number> hexadecimal digits; see the corresponding
option in linkgit:git-describe[1] for details.
`match=<pattern>`;;
Only consider tags matching the `glob`(7) _<pattern>_,
excluding the `refs/tags/` prefix; see the corresponding option
match=<pattern>;;
Only consider tags matching the given `glob(7)` pattern,
excluding the "refs/tags/" prefix; see the corresponding option
in linkgit:git-describe[1] for details.
`exclude=<pattern>`;;
Do not consider tags matching the `glob`(7) _<pattern>_,
excluding the `refs/tags/` prefix; see the corresponding option
exclude=<pattern>;;
Do not consider tags matching the given `glob(7)` pattern,
excluding the "refs/tags/" prefix; see the corresponding option
in linkgit:git-describe[1] for details.
--
@ -282,7 +357,7 @@ variable (see linkgit:gitmailmap[5]).
The raw data in an object is `raw`.
`raw:size`::
raw:size::
The raw data size of the object.
Note that `--format=%(raw)` can not be used with `--python`, `--shell`, `--tcl`,
@ -292,10 +367,10 @@ variable type.
The message in a commit or a tag object is `contents`, from which
`contents:<part>` can be used to extract various parts out of:
`contents:size`::
contents:size::
The size in bytes of the commit or tag message.
`contents:subject`::
contents:subject::
The first paragraph of the message, which typically is a
single line, is taken as the "subject" of the commit or the
tag message.
@ -303,19 +378,19 @@ The message in a commit or a tag object is `contents`, from which
obtain same results. `:sanitize` can be appended to `subject` for
subject line suitable for filename.
`contents:body`::
contents:body::
The remainder of the commit or the tag message that follows
the "subject".
`contents:signature`::
contents:signature::
The optional GPG signature of the tag.
`contents:lines=<n>`::
The first _<n>_ lines of the message.
contents:lines=N::
The first `N` lines of the message.
Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
are obtained as `trailers[:<option>,...]` (or by using the historical alias
`contents:trailers[:<option>,...]`). For valid _<option>_ values see `trailers`
are obtained as `trailers[:options]` (or by using the historical alias
`contents:trailers[:options]`). For valid [:option] values see `trailers`
section of linkgit:git-log[1].
For sorting purposes, fields with numeric values sort in numeric order
@ -335,8 +410,8 @@ option to linkgit:git-rev-list[1] takes). If this formatting is provided in
a `--sort` key, references will be sorted according to the byte-value of the
formatted string rather than the numeric value of the underlying timestamp.
Some atoms like `%(align)` and `%(if)` always require a matching `%(end)`.
We call them "opening atoms" and sometimes denote them as `%($open)`.
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
@ -354,7 +429,7 @@ An example directly producing formatted text. Show the most recent
#!/bin/sh
git for-each-ref --count=3 --sort='-*authordate' \
`--format='From: %(*authorname) %(*authoremail)
--format='From: %(*authorname) %(*authoremail)
Subject: %(*subject)
Date: %(*authordate)
Ref: %(*refname)
@ -365,7 +440,7 @@ Ref: %(*refname)
A simple example showing the use of shell eval on the output,
demonstrating the use of `--shell`. List the prefixes of all heads:
demonstrating the use of --shell. List the prefixes of all heads:
------------
#!/bin/sh
@ -433,7 +508,7 @@ eval "$eval"
------------
An example to show the usage of `%(if)...%(then)...%(else)...%(end)`.
An example to show the usage of %(if)...%(then)...%(else)...%(end).
This prefixes the current branch with a star.
------------
@ -441,7 +516,7 @@ git for-each-ref --format="%(if)%(HEAD)%(then)* %(else) %(end)%(refname:short)"
------------
An example to show the usage of `%(if)...%(then)...%(end)`.
An example to show the usage of %(if)...%(then)...%(end).
This prints the authorname, if present.
------------

View File

@ -295,8 +295,7 @@ header). Note also that `git send-email` already handles this
transformation for you, and this option should not be used if you are
feeding the result to `git send-email`.
--force-in-body-from::
--no-force-in-body-from::
--[no-]force-in-body-from::
With the e-mail sender specified via the `--from` option, by
default, an in-body "From:" to identify the real author of
the commit is added at the top of the commit log message if
@ -315,8 +314,7 @@ feeding the result to `git send-email`.
`Cc:`, and custom) headers added so far from config or command
line.
--cover-letter::
--no-cover-letter::
--[no-]cover-letter::
In addition to the patches, generate a cover letter file
containing the branch description, shortlog and the overall diffstat. You can
fill in a description in the file before sending it out.
@ -381,8 +379,7 @@ configuration options in linkgit:git-notes[1] to use this workflow).
The default is `--no-notes`, unless the `format.notes` configuration is
set.
--signature=<signature>::
--no-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
@ -414,8 +411,7 @@ you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`.
Output an all-zero hash in each patch's From header instead
of the hash of the commit.
--no-base::
--base[=<commit>]::
--[no-]base[=<commit>]::
Record the base tree information to identify the state the
patch series applies to. See the BASE TREE INFORMATION section
below for details. If <commit> is "auto", a base commit is
@ -591,19 +587,13 @@ an external editor to keep Thunderbird from mangling the patches.
Approach #1 (add-on)
^^^^^^^^^^^^^^^^^^^^
Install the Toggle Line Wrap add-on that is available from
https://addons.thunderbird.net/thunderbird/addon/toggle-line-wrap
It adds a button "Line Wrap" to the composer's toolbar
Install the Toggle Word Wrap add-on that is available from
https://addons.mozilla.org/thunderbird/addon/toggle-word-wrap/
It adds a menu entry "Enable Word Wrap" in the composer's "Options" menu
that you can tick off. Now you can compose the message as you otherwise do
(cut + paste, 'git format-patch' | 'git imap-send', etc), but you have to
insert line breaks manually in any text that you type.
As a bonus feature, the add-on can detect patch text in the composer
and warns when line wrapping has not yet been turned off.
The add-on requires a few tweaks of the advanced configuration
(about:config). These are listed on the download page.
Approach #2 (configuration)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Three steps:

View File

@ -31,8 +31,7 @@ index file, all SHA-1 references in the `refs` namespace, and all reflogs
Print out objects that exist but that aren't reachable from any
of the reference nodes.
--dangling::
--no-dangling::
--[no-]dangling::
Print objects that exist but that are never 'directly' used (default).
`--no-dangling` can be used to omit this information from the output.
@ -98,16 +97,14 @@ care about this output and want to speed it up further.
compatible with linkgit:git-rev-parse[1], e.g.
`HEAD@{1234567890}~25^2:src/`.
--progress::
--no-progress::
--[no-]progress::
Progress status is reported on the standard error stream by
default when it is attached to a terminal, unless
--no-progress or --verbose is specified. --progress forces
progress status even if the standard error stream is not
directed to a terminal.
--references::
--no-references::
--[no-]references::
Control whether to check the references database consistency
via 'git refs verify'. See linkgit:git-refs[1] for details.
The default is to check the references database.

View File

@ -53,13 +53,11 @@ configuration options such as `gc.auto` and `gc.autoPackLimit`, all
other housekeeping tasks (e.g. rerere, working trees, reflog...) will
be performed as well.
--detach::
--no-detach::
--[no-]detach::
Run in the background if the system supports it. This option overrides
the `gc.autoDetach` config.
--cruft::
--no-cruft::
--[no-]cruft::
When expiring unreachable objects, pack them separately into a
cruft pack instead of storing them as loose objects. `--cruft`
is on by default.

View File

@ -25,11 +25,8 @@ commit-id::
Either the hash or the filename under [URL]/refs/ to
pull.
-a::
-c::
-t::
-a, -c, -t::
These options are ignored for historical reasons.
-v::
Report what is downloaded.

View File

@ -9,24 +9,21 @@ git-imap-send - Send a collection of patches from stdin to an IMAP folder
SYNOPSIS
--------
[verse]
'git imap-send' [-v] [-q] [--[no-]curl] [(--folder|-f) <folder>]
'git imap-send' --list
'git imap-send' [-v] [-q] [--[no-]curl]
DESCRIPTION
-----------
This command uploads a mailbox generated with `git format-patch`
This command uploads a mailbox generated with 'git format-patch'
into an IMAP drafts folder. This allows patches to be sent as
other email is when using mail clients that cannot read mailbox
files directly. The command also works with any general mailbox
in which emails have the fields `From`, `Date`, and `Subject` in
in which emails have the fields "From", "Date", and "Subject" in
that order.
Typical usage is something like:
------
$ git format-patch --signoff --stdout --attach origin | git imap-send
------
git format-patch --signoff --stdout --attach origin | git imap-send
OPTIONS
@ -40,11 +37,6 @@ OPTIONS
--quiet::
Be quiet.
-f <folder>::
--folder=<folder>::
Specify the folder in which the emails have to saved.
For example: `--folder=[Gmail]/Drafts` or `-f INBOX/Drafts`.
--curl::
Use libcurl to communicate with the IMAP server, unless tunneling
into it. Ignored if Git was built without the USE_CURL_FOR_IMAP_SEND
@ -55,8 +47,6 @@ OPTIONS
using libcurl. Ignored if Git was built with the NO_OPENSSL option
set.
--list::
Run the IMAP LIST command to output a list of all the folders present.
CONFIGURATION
-------------
@ -68,34 +58,6 @@ include::includes/cmd-config-section-rest.adoc[]
include::config/imap.adoc[]
GETTING A LIST OF AVAILABLE FOLDERS
-----------------------------------
In order to send an email to a specific folder, you need to know the correct name of
intended folder in your mailbox. The names like "Junk", "Trash" etc. displayed by
various email clients need not be the actual names of the folders stored in the mail
server of your email provider.
In order to get the correct folder name to be used with `git imap-send`, you can run
`git imap-send --list`. This will display a list of valid folder names. An example
of such an output when run on a Gmail account is:
.........................
* LIST (\HasNoChildren) "/" "INBOX"
* LIST (\HasChildren \Noselect) "/" "[Gmail]"
* LIST (\All \HasNoChildren) "/" "[Gmail]/All Mail"
* LIST (\Drafts \HasNoChildren) "/" "[Gmail]/Drafts"
* LIST (\HasNoChildren \Important) "/" "[Gmail]/Important"
* LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail"
* LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam"
* LIST (\Flagged \HasNoChildren) "/" "[Gmail]/Starred"
* LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash"
.........................
Here, you can observe that the correct name for the "Junk" folder is `[Gmail]/Spam`
and for the "Trash" folder is `[Gmail]/Trash`. Similar logic can be used to determine
other folders as well.
EXAMPLES
--------
Using tunnel mode:
@ -140,56 +102,20 @@ Using Gmail's IMAP interface:
---------
[imap]
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
port = 993
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
port = 993
---------
Gmail does not allow using your regular password for `git imap-send`.
If you have multi-factor authentication set up on your Gmail account, you
can generate an app-specific password for use with `git imap-send`.
Visit https://security.google.com/settings/security/apppasswords to create
it. Alternatively, use OAuth2.0 authentication as described below.
[NOTE]
You might need to instead use: `folder = "[Google Mail]/Drafts"` if you get an error
that the "Folder doesn't exist". You can also run `git imap-send --list` to get a
list of available folders.
that the "Folder doesn't exist".
[NOTE]
If your Gmail account is set to another language than English, the name of the "Drafts"
folder will be localized.
If you want to use OAuth2.0 based authentication, you can specify
`OAUTHBEARER` or `XOAUTH2` mechanism in your config. It is more secure
than using app-specific passwords, and also does not enforce the need of
having multi-factor authentication. You will have to use an OAuth2.0
access token in place of your password when using this authentication.
---------
[imap]
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
port = 993
authmethod = OAUTHBEARER
---------
Using Outlook's IMAP interface:
Unlike Gmail, Outlook only supports OAuth2.0 based authentication. Also, it
supports only `XOAUTH2` as the mechanism.
---------
[imap]
folder = "Drafts"
host = imaps://outlook.office365.com
user = user@outlook.com
port = 993
authmethod = XOAUTH2
---------
Once the commits are ready to be sent, run the following command:
$ git format-patch --cover-letter -M --stdout origin/master | git imap-send
@ -198,10 +124,6 @@ Just make sure to disable line wrapping in the email client (Gmail's web
interface will wrap lines no matter what, so you need to use a real
IMAP client).
In case you are using OAuth2.0 authentication, it is easier to use credential
helpers to generate tokens. Credential helpers suggested in
linkgit:git-send-email[1] can be used for `git imap-send` as well.
CAUTION
-------
It is still your responsibility to make sure that the email message

View File

@ -36,8 +36,7 @@ OPTIONS
fails if the name of packed archive does not end
with .pack).
--rev-index::
--no-rev-index::
--[no-]rev-index::
When this flag is provided, generate a reverse index
(a `.rev` file) corresponding to the given pack. If
`--verify` is given, ensure that the existing

View File

@ -77,15 +77,9 @@ If this is a reinitialization, the repository will be moved to the specified pat
`-b <branch-name>`::
`--initial-branch=<branch-name>`::
Use _<branch-name>_ for the initial branch in the newly created
repository. If not specified, fall back to the default name
ifndef::with-breaking-changes[]
(currently `master`, but this will change to `main` when Git 3.0 is released).
endif::with-breaking-changes[]
ifdef::with-breaking-changes[]
`main`.
endif::with-breaking-changes[]
The default name can be customized via the `init.defaultBranch` configuration
variable.
repository. If not specified, fall back to the default name (currently
`master`, but this is subject to change in the future; the name can be
customized via the `init.defaultBranch` configuration variable).
`--shared[=(false|true|umask|group|all|world|everybody|<perm>)]`::

View File

@ -142,8 +142,8 @@ OPTIONS
provided with '--if-exists' overrides the `trailer.ifExists` and any
applicable `trailer.<keyAlias>.ifExists` configuration variables
and applies to all '--trailer' options until the next occurrence of
'--if-exists' or '--no-if-exists'. Upon encountering '--no-if-exists', clear the
effect of any previous use of '--if-exists', such that the relevant configuration
'--if-exists' or '--no-if-exists'. Upon encountering '--no-if-exists, clear the
effect of any previous use of '--if-exists, such that the relevant configuration
variables are no longer overridden. Possible actions are `addIfDifferent`,
`addIfDifferentNeighbor`, `add`, `replace` and `doNothing`.
@ -154,8 +154,8 @@ OPTIONS
provided with '--if-missing' overrides the `trailer.ifMissing` and any
applicable `trailer.<keyAlias>.ifMissing` configuration variables
and applies to all '--trailer' options until the next occurrence of
'--if-missing' or '--no-if-missing'. Upon encountering '--no-if-missing',
clear the effect of any previous use of '--if-missing', such that the relevant
'--if-missing' or '--no-if-missing'. Upon encountering '--no-if-missing,
clear the effect of any previous use of '--if-missing, such that the relevant
configuration variables are no longer overridden. Possible actions are `doNothing`
or `add`.

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