Compare commits
16 Commits
v2.31.0-rc
...
v2.23.4
Author | SHA1 | Date | |
---|---|---|---|
d60b6a96f0 | |||
4bd06fd490 | |||
c753e2a7a8 | |||
bcf08f33d8 | |||
c735d7470e | |||
b1726b1a38 | |||
8b1a5f33d3 | |||
804963848e | |||
9fb2a1fb08 | |||
fb049fd85b | |||
6eed462c8f | |||
9b77cec89b | |||
6b82d3eea6 | |||
22539ec3b5 | |||
0d58fef58a | |||
684dd4c2b4 |
15
.cirrus.yml
15
.cirrus.yml
@ -1,15 +0,0 @@
|
||||
env:
|
||||
CIRRUS_CLONE_DEPTH: 1
|
||||
|
||||
freebsd_12_task:
|
||||
freebsd_instance:
|
||||
image: freebsd-12-1-release-amd64
|
||||
install_script:
|
||||
pkg install -y gettext gmake perl5
|
||||
create_user_script:
|
||||
- pw useradd git
|
||||
- chown -R git:git .
|
||||
build_script:
|
||||
- su git -c gmake
|
||||
test_script:
|
||||
- su git -c 'gmake test'
|
@ -4,7 +4,7 @@ insert_final_newline = true
|
||||
|
||||
# The settings for C (*.c and *.h) files are mirrored in .clang-format. Keep
|
||||
# them in sync.
|
||||
[*.{c,h,sh,perl,pl,pm,txt}]
|
||||
[*.{c,h,sh,perl,pl,pm}]
|
||||
indent_style = tab
|
||||
tab_width = 8
|
||||
|
||||
|
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -6,7 +6,6 @@
|
||||
*.pm eol=lf diff=perl
|
||||
*.py eol=lf diff=python
|
||||
*.bat eol=crlf
|
||||
CODE_OF_CONDUCT.md -whitespace
|
||||
/Documentation/**/*.txt eol=lf
|
||||
/command-list.txt eol=lf
|
||||
/GIT-VERSION-GEN eol=lf
|
||||
|
3
.github/CONTRIBUTING.md
vendored
3
.github/CONTRIBUTING.md
vendored
@ -16,7 +16,4 @@ If you prefer video, then [this talk](https://www.youtube.com/watch?v=Q7i_qQW__q
|
||||
might be useful to you as the presenter walks you through the contribution
|
||||
process by example.
|
||||
|
||||
Or, you can follow the ["My First Contribution"](https://git-scm.com/docs/MyFirstContribution)
|
||||
tutorial for another example of the contribution process.
|
||||
|
||||
Your friendly Git community!
|
||||
|
71
.github/workflows/check-whitespace.yml
vendored
71
.github/workflows/check-whitespace.yml
vendored
@ -1,71 +0,0 @@
|
||||
name: check-whitespace
|
||||
|
||||
# Get the repo with the commits(+1) in the series.
|
||||
# Process `git log --check` output to extract just the check errors.
|
||||
# Add a comment to the pull request with the check errors.
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
jobs:
|
||||
check-whitespace:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set commit count
|
||||
shell: bash
|
||||
run: echo "COMMIT_DEPTH=$((1+$COMMITS))" >>$GITHUB_ENV
|
||||
env:
|
||||
COMMITS: ${{ github.event.pull_request.commits }}
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: ${{ env.COMMIT_DEPTH }}
|
||||
|
||||
- name: git log --check
|
||||
id: check_out
|
||||
run: |
|
||||
log=
|
||||
commit=
|
||||
while read dash etc
|
||||
do
|
||||
case "${dash}" in
|
||||
"---")
|
||||
commit="${etc}"
|
||||
;;
|
||||
"")
|
||||
;;
|
||||
*)
|
||||
if test -n "${commit}"
|
||||
then
|
||||
log="${log}\n${commit}"
|
||||
echo ""
|
||||
echo "--- ${commit}"
|
||||
fi
|
||||
commit=
|
||||
log="${log}\n${dash} ${etc}"
|
||||
echo "${dash} ${etc}"
|
||||
;;
|
||||
esac
|
||||
done <<< $(git log --check --pretty=format:"---% h% s" -${{github.event.pull_request.commits}})
|
||||
|
||||
if test -n "${log}"
|
||||
then
|
||||
echo "::set-output name=checkout::"${log}""
|
||||
exit 2
|
||||
fi
|
||||
|
||||
- name: Add Check Output as Comment
|
||||
uses: actions/github-script@v3
|
||||
id: add-comment
|
||||
env:
|
||||
log: ${{ steps.check_out.outputs.checkout }}
|
||||
with:
|
||||
script: |
|
||||
await github.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: `Whitespace errors found in workflow ${{ github.workflow }}:\n\n\`\`\`\n${process.env.log.replace(/\\n/g, "\n")}\n\`\`\``
|
||||
})
|
||||
if: ${{ failure() }}
|
357
.github/workflows/main.yml
vendored
357
.github/workflows/main.yml
vendored
@ -1,357 +0,0 @@
|
||||
name: CI/PR
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
env:
|
||||
DEVELOPER: 1
|
||||
|
||||
jobs:
|
||||
ci-config:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
enabled: ${{ steps.check-ref.outputs.enabled }}${{ steps.skip-if-redundant.outputs.enabled }}
|
||||
steps:
|
||||
- name: try to clone ci-config branch
|
||||
run: |
|
||||
git -c protocol.version=2 clone \
|
||||
--no-tags \
|
||||
--single-branch \
|
||||
-b ci-config \
|
||||
--depth 1 \
|
||||
--no-checkout \
|
||||
--filter=blob:none \
|
||||
https://github.com/${{ github.repository }} \
|
||||
config-repo &&
|
||||
cd config-repo &&
|
||||
git checkout HEAD -- ci/config || : ignore
|
||||
- id: check-ref
|
||||
name: check whether CI is enabled for ref
|
||||
run: |
|
||||
enabled=yes
|
||||
if test -x config-repo/ci/config/allow-ref &&
|
||||
! config-repo/ci/config/allow-ref '${{ github.ref }}'
|
||||
then
|
||||
enabled=no
|
||||
fi
|
||||
echo "::set-output name=enabled::$enabled"
|
||||
- name: skip if the commit or tree was already tested
|
||||
id: skip-if-redundant
|
||||
uses: actions/github-script@v3
|
||||
if: steps.check-ref.outputs.enabled == 'yes'
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
try {
|
||||
// Figure out workflow ID, commit and tree
|
||||
const { data: run } = await github.actions.getWorkflowRun({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: context.runId,
|
||||
});
|
||||
const workflow_id = run.workflow_id;
|
||||
const head_sha = run.head_sha;
|
||||
const tree_id = run.head_commit.tree_id;
|
||||
|
||||
// See whether there is a successful run for that commit or tree
|
||||
const { data: runs } = await github.actions.listWorkflowRuns({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
per_page: 500,
|
||||
status: 'success',
|
||||
workflow_id,
|
||||
});
|
||||
for (const run of runs.workflow_runs) {
|
||||
if (head_sha === run.head_sha) {
|
||||
core.warning(`Successful run for the commit ${head_sha}: ${run.html_url}`);
|
||||
core.setOutput('enabled', ' but skip');
|
||||
break;
|
||||
}
|
||||
if (run.head_commit && tree_id === run.head_commit.tree_id) {
|
||||
core.warning(`Successful run for the tree ${tree_id}: ${run.html_url}`);
|
||||
core.setOutput('enabled', ' but skip');
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
core.warning(e);
|
||||
}
|
||||
|
||||
windows-build:
|
||||
needs: ci-config
|
||||
if: needs.ci-config.outputs.enabled == 'yes'
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download git-sdk-64-minimal
|
||||
shell: bash
|
||||
run: |
|
||||
## Get artifact
|
||||
urlbase=https://dev.azure.com/git-for-windows/git/_apis/build/builds
|
||||
id=$(curl "$urlbase?definitions=22&statusFilter=completed&resultFilter=succeeded&\$top=1" |
|
||||
jq -r ".value[] | .id")
|
||||
download_url="$(curl "$urlbase/$id/artifacts" |
|
||||
jq -r '.value[] | select(.name == "git-sdk-64-minimal").resource.downloadUrl')"
|
||||
curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 240 \
|
||||
-o artifacts.zip "$download_url"
|
||||
|
||||
## Unzip and remove the artifact
|
||||
unzip artifacts.zip
|
||||
rm artifacts.zip
|
||||
- name: build
|
||||
shell: powershell
|
||||
env:
|
||||
HOME: ${{runner.workspace}}
|
||||
MSYSTEM: MINGW64
|
||||
NO_PERL: 1
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
printf '%s\n' /git-sdk-64-minimal/ >>.git/info/exclude
|
||||
|
||||
ci/make-test-artifacts.sh artifacts
|
||||
"@
|
||||
- name: upload build artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: windows-artifacts
|
||||
path: artifacts
|
||||
- name: upload git-sdk-64-minimal
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: git-sdk-64-minimal
|
||||
path: git-sdk-64-minimal
|
||||
windows-test:
|
||||
runs-on: windows-latest
|
||||
needs: [windows-build]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download build artifacts
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: windows-artifacts
|
||||
path: ${{github.workspace}}
|
||||
- name: extract build artifacts
|
||||
shell: bash
|
||||
run: tar xf artifacts.tar.gz
|
||||
- name: download git-sdk-64-minimal
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: git-sdk-64-minimal
|
||||
path: ${{github.workspace}}/git-sdk-64-minimal/
|
||||
- name: test
|
||||
shell: powershell
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
# Let Git ignore the SDK
|
||||
printf '%s\n' /git-sdk-64-minimal/ >>.git/info/exclude
|
||||
|
||||
ci/run-test-slice.sh ${{matrix.nr}} 10
|
||||
"@
|
||||
- name: ci/print-test-failures.sh
|
||||
if: failure()
|
||||
shell: powershell
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc ci/print-test-failures.sh
|
||||
- name: Upload failed tests' directories
|
||||
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: failed-tests-windows
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
vs-build:
|
||||
needs: ci-config
|
||||
if: needs.ci-config.outputs.enabled == 'yes'
|
||||
env:
|
||||
MSYSTEM: MINGW64
|
||||
NO_PERL: 1
|
||||
GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'"
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download git-sdk-64-minimal
|
||||
shell: bash
|
||||
run: |
|
||||
## Get artifact
|
||||
urlbase=https://dev.azure.com/git-for-windows/git/_apis/build/builds
|
||||
id=$(curl "$urlbase?definitions=22&statusFilter=completed&resultFilter=succeeded&\$top=1" |
|
||||
jq -r ".value[] | .id")
|
||||
download_url="$(curl "$urlbase/$id/artifacts" |
|
||||
jq -r '.value[] | select(.name == "git-sdk-64-minimal").resource.downloadUrl')"
|
||||
curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 240 \
|
||||
-o artifacts.zip "$download_url"
|
||||
|
||||
## Unzip and remove the artifact
|
||||
unzip artifacts.zip
|
||||
rm artifacts.zip
|
||||
- name: download vcpkg artifacts
|
||||
shell: powershell
|
||||
run: |
|
||||
$urlbase = "https://dev.azure.com/git/git/_apis/build/builds"
|
||||
$id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
|
||||
$downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[0].resource.downloadUrl
|
||||
(New-Object Net.WebClient).DownloadFile($downloadUrl, "compat.zip")
|
||||
Expand-Archive compat.zip -DestinationPath . -Force
|
||||
Remove-Item compat.zip
|
||||
- name: add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
- name: copy dlls to root
|
||||
shell: powershell
|
||||
run: |
|
||||
& compat\vcbuild\vcpkg_copy_dlls.bat release
|
||||
if (!$?) { exit(1) }
|
||||
- name: generate Visual Studio solution
|
||||
shell: bash
|
||||
run: |
|
||||
cmake `pwd`/contrib/buildsystems/ -DCMAKE_PREFIX_PATH=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows \
|
||||
-DMSGFMT_EXE=`pwd`/git-sdk-64-minimal/mingw64/bin/msgfmt.exe -DPERL_TESTS=OFF -DPYTHON_TESTS=OFF -DCURL_NO_CURL_CMAKE=ON
|
||||
- name: MSBuild
|
||||
run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142
|
||||
- name: bundle artifact tar
|
||||
shell: powershell
|
||||
env:
|
||||
MSVC: 1
|
||||
VCPKG_ROOT: ${{github.workspace}}\compat\vcbuild\vcpkg
|
||||
run: |
|
||||
& git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
mkdir -p artifacts &&
|
||||
eval \"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\"
|
||||
"@
|
||||
- name: upload build artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: vs-artifacts
|
||||
path: artifacts
|
||||
vs-test:
|
||||
runs-on: windows-latest
|
||||
needs: [vs-build, windows-build]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: download git-sdk-64-minimal
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: git-sdk-64-minimal
|
||||
path: ${{github.workspace}}/git-sdk-64-minimal/
|
||||
- name: download build artifacts
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: vs-artifacts
|
||||
path: ${{github.workspace}}
|
||||
- name: extract build artifacts
|
||||
shell: bash
|
||||
run: tar xf artifacts.tar.gz
|
||||
- name: test
|
||||
shell: powershell
|
||||
env:
|
||||
MSYSTEM: MINGW64
|
||||
NO_SVN_TESTS: 1
|
||||
GIT_TEST_SKIP_REBASE_P: 1
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
|
||||
# Let Git ignore the SDK and the test-cache
|
||||
printf '%s\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude
|
||||
|
||||
ci/run-test-slice.sh ${{matrix.nr}} 10
|
||||
"@
|
||||
- name: ci/print-test-failures.sh
|
||||
if: failure()
|
||||
shell: powershell
|
||||
run: |
|
||||
& .\git-sdk-64-minimal\usr\bin\bash.exe -lc ci/print-test-failures.sh
|
||||
- name: Upload failed tests' directories
|
||||
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: failed-tests-windows
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
regular:
|
||||
needs: ci-config
|
||||
if: needs.ci-config.outputs.enabled == 'yes'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
vector:
|
||||
- jobname: linux-clang
|
||||
cc: clang
|
||||
pool: ubuntu-latest
|
||||
- jobname: linux-gcc
|
||||
cc: gcc
|
||||
pool: ubuntu-latest
|
||||
- jobname: osx-clang
|
||||
cc: clang
|
||||
pool: macos-latest
|
||||
- jobname: osx-gcc
|
||||
cc: gcc
|
||||
pool: macos-latest
|
||||
- jobname: linux-gcc-default
|
||||
cc: gcc
|
||||
pool: ubuntu-latest
|
||||
env:
|
||||
CC: ${{matrix.vector.cc}}
|
||||
jobname: ${{matrix.vector.jobname}}
|
||||
runs-on: ${{matrix.vector.pool}}
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-dependencies.sh
|
||||
- run: ci/run-build-and-tests.sh
|
||||
- run: ci/print-test-failures.sh
|
||||
if: failure()
|
||||
- name: Upload failed tests' directories
|
||||
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: failed-tests-${{matrix.vector.jobname}}
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
dockerized:
|
||||
needs: ci-config
|
||||
if: needs.ci-config.outputs.enabled == 'yes'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
vector:
|
||||
- jobname: linux-musl
|
||||
image: alpine
|
||||
- jobname: Linux32
|
||||
image: daald/ubuntu32:xenial
|
||||
env:
|
||||
jobname: ${{matrix.vector.jobname}}
|
||||
runs-on: ubuntu-latest
|
||||
container: ${{matrix.vector.image}}
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-docker-dependencies.sh
|
||||
- run: ci/run-build-and-tests.sh
|
||||
- run: ci/print-test-failures.sh
|
||||
if: failure()
|
||||
- name: Upload failed tests' directories
|
||||
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: failed-tests-${{matrix.vector.jobname}}
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
static-analysis:
|
||||
needs: ci-config
|
||||
if: needs.ci-config.outputs.enabled == 'yes'
|
||||
env:
|
||||
jobname: StaticAnalysis
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-dependencies.sh
|
||||
- run: ci/run-static-analysis.sh
|
||||
documentation:
|
||||
needs: ci-config
|
||||
if: needs.ci-config.outputs.enabled == 'yes'
|
||||
env:
|
||||
jobname: Documentation
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- run: ci/install-dependencies.sh
|
||||
- run: ci/test-documentation.sh
|
16
.gitignore
vendored
16
.gitignore
vendored
@ -25,7 +25,6 @@
|
||||
/git-bisect--helper
|
||||
/git-blame
|
||||
/git-branch
|
||||
/git-bugreport
|
||||
/git-bundle
|
||||
/git-cat-file
|
||||
/git-check-attr
|
||||
@ -67,7 +66,6 @@
|
||||
/git-filter-branch
|
||||
/git-fmt-merge-msg
|
||||
/git-for-each-ref
|
||||
/git-for-each-repo
|
||||
/git-format-patch
|
||||
/git-fsck
|
||||
/git-fsck-objects
|
||||
@ -85,13 +83,13 @@
|
||||
/git-init-db
|
||||
/git-interpret-trailers
|
||||
/git-instaweb
|
||||
/git-legacy-stash
|
||||
/git-log
|
||||
/git-ls-files
|
||||
/git-ls-remote
|
||||
/git-ls-tree
|
||||
/git-mailinfo
|
||||
/git-mailsplit
|
||||
/git-maintenance
|
||||
/git-merge
|
||||
/git-merge-base
|
||||
/git-merge-index
|
||||
@ -115,6 +113,7 @@
|
||||
/git-pack-redundant
|
||||
/git-pack-objects
|
||||
/git-pack-refs
|
||||
/git-parse-remote
|
||||
/git-patch-id
|
||||
/git-prune
|
||||
/git-prune-packed
|
||||
@ -134,6 +133,8 @@
|
||||
/git-remote-ftps
|
||||
/git-remote-fd
|
||||
/git-remote-ext
|
||||
/git-remote-testpy
|
||||
/git-remote-testsvn
|
||||
/git-repack
|
||||
/git-replace
|
||||
/git-request-pull
|
||||
@ -146,16 +147,17 @@
|
||||
/git-rm
|
||||
/git-send-email
|
||||
/git-send-pack
|
||||
/git-serve
|
||||
/git-sh-i18n
|
||||
/git-sh-i18n--envsubst
|
||||
/git-sh-setup
|
||||
/git-sh-i18n
|
||||
/git-shell
|
||||
/git-shortlog
|
||||
/git-show
|
||||
/git-show-branch
|
||||
/git-show-index
|
||||
/git-show-ref
|
||||
/git-sparse-checkout
|
||||
/git-stage
|
||||
/git-stash
|
||||
/git-status
|
||||
@ -186,7 +188,6 @@
|
||||
/gitweb/gitweb.cgi
|
||||
/gitweb/static/gitweb.js
|
||||
/gitweb/static/gitweb.min.*
|
||||
/config-list.h
|
||||
/command-list.h
|
||||
*.tar.gz
|
||||
*.dsc
|
||||
@ -194,7 +195,6 @@
|
||||
/git.spec
|
||||
*.exe
|
||||
*.[aos]
|
||||
*.o.json
|
||||
*.py[co]
|
||||
.depend/
|
||||
*.gcda
|
||||
@ -216,8 +216,6 @@
|
||||
/tags
|
||||
/TAGS
|
||||
/cscope*
|
||||
/compile_commands.json
|
||||
*.hcc
|
||||
*.obj
|
||||
*.lib
|
||||
*.res
|
||||
@ -233,10 +231,10 @@
|
||||
*.ipdb
|
||||
*.dll
|
||||
.vs/
|
||||
*.manifest
|
||||
Debug/
|
||||
Release/
|
||||
/UpgradeLog*.htm
|
||||
/git.VC.VC.opendb
|
||||
/git.VC.db
|
||||
*.dSYM
|
||||
/contrib/buildsystems/out
|
||||
|
6
.mailmap
6
.mailmap
@ -18,7 +18,6 @@ Alexey Shumkin <alex.crezoff@gmail.com> <zapped@mail.ru>
|
||||
Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com>
|
||||
Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com>
|
||||
Anders Kaseorg <andersk@MIT.EDU> <andersk@mit.edu>
|
||||
Andrey Mazo <ahippo@yandex.com> Mazo, Andrey <amazo@checkvideo.com>
|
||||
Aneesh Kumar K.V <aneesh.kumar@gmail.com>
|
||||
Amos Waterland <apw@debian.org> <apw@rossby.metr.ou.edu>
|
||||
Amos Waterland <apw@debian.org> <apw@us.ibm.com>
|
||||
@ -31,7 +30,6 @@ Brandon Casey <drafnel@gmail.com> <casey@nrlssc.navy.mil>
|
||||
Brandon Williams <bwilliams.eng@gmail.com> <bmwill@google.com>
|
||||
brian m. carlson <sandals@crustytoothpaste.net>
|
||||
brian m. carlson <sandals@crustytoothpaste.net> <sandals@crustytoothpaste.ath.cx>
|
||||
brian m. carlson <sandals@crustytoothpaste.net> <bk2204@github.com>
|
||||
Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com>
|
||||
Bryan Larsen <bryan@larsen.st> <bryanlarsen@yahoo.com>
|
||||
Cheng Renquan <crquan@gmail.com>
|
||||
@ -60,9 +58,7 @@ David S. Miller <davem@davemloft.net>
|
||||
David Turner <novalis@novalis.org> <dturner@twopensource.com>
|
||||
David Turner <novalis@novalis.org> <dturner@twosigma.com>
|
||||
Derrick Stolee <dstolee@microsoft.com> <stolee@gmail.com>
|
||||
Derrick Stolee <dstolee@microsoft.com> Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
|
||||
Deskin Miller <deskinm@umich.edu>
|
||||
Đoàn Trần Công Danh <congdanhqx@gmail.com> Doan Tran Cong Danh
|
||||
Dirk Süsserott <newsletter@dirk.my1.cc>
|
||||
Eric Blake <eblake@redhat.com> <ebb9@byu.net>
|
||||
Eric Hanchrow <eric.hanchrow@gmail.com> <offby1@blarg.net>
|
||||
@ -111,7 +107,6 @@ Jim Meyering <jim@meyering.net> <meyering@redhat.com>
|
||||
Joachim Berdal Haga <cjhaga@fys.uio.no>
|
||||
Joachim Jablon <joachim.jablon@people-doc.com> <ewjoachim@gmail.com>
|
||||
Johannes Schindelin <Johannes.Schindelin@gmx.de> <johannes.schindelin@gmx.de>
|
||||
Johannes Schindelin <Johannes.Schindelin@gmx.de> Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
|
||||
Johannes Sixt <j6t@kdbg.org> <J.Sixt@eudaptics.com>
|
||||
Johannes Sixt <j6t@kdbg.org> <j.sixt@viscovery.net>
|
||||
Johannes Sixt <j6t@kdbg.org> <johannes.sixt@telecom.at>
|
||||
@ -290,7 +285,6 @@ William Pursell <bill.pursell@gmail.com>
|
||||
YONETANI Tomokazu <y0n3t4n1@gmail.com> <qhwt+git@les.ath.cx>
|
||||
YONETANI Tomokazu <y0n3t4n1@gmail.com> <y0netan1@dragonflybsd.org>
|
||||
YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
|
||||
Yi-Jyun Pan <pan93412@gmail.com>
|
||||
# the two anonymous contributors are different persons:
|
||||
anonymous <linux@horizon.com>
|
||||
anonymous <linux@horizon.net>
|
||||
|
12
.travis.yml
12
.travis.yml
@ -16,7 +16,7 @@ compiler:
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- env: jobname=linux-gcc-default
|
||||
- env: jobname=GIT_TEST_GETTEXT_POISON
|
||||
os: linux
|
||||
compiler:
|
||||
addons:
|
||||
@ -32,15 +32,7 @@ matrix:
|
||||
services:
|
||||
- docker
|
||||
before_install:
|
||||
script: ci/run-docker.sh
|
||||
- env: jobname=linux-musl
|
||||
os: linux
|
||||
compiler:
|
||||
addons:
|
||||
services:
|
||||
- docker
|
||||
before_install:
|
||||
script: ci/run-docker.sh
|
||||
script: ci/run-linux32-docker.sh
|
||||
- env: jobname=StaticAnalysis
|
||||
os: linux
|
||||
compiler:
|
||||
|
@ -8,9 +8,3 @@
|
||||
# in practice it (hopefully!) doesn't matter.
|
||||
race:^want_color$
|
||||
race:^transfer_debug$
|
||||
|
||||
# A boolean value, which tells whether the replace_map has been initialized or
|
||||
# not, is read racily with an update. As this variable is written to only once,
|
||||
# and it's OK if the value change right after reading it, this shouldn't be a
|
||||
# problem.
|
||||
race:^lookup_replace_object$
|
||||
|
@ -1,145 +0,0 @@
|
||||
# Git Code of Conduct
|
||||
|
||||
This code of conduct outlines our expectations for participants within
|
||||
the Git community, as well as steps for reporting unacceptable behavior.
|
||||
We are committed to providing a welcoming and inspiring community for
|
||||
all and expect our code of conduct to be honored. Anyone who violates
|
||||
this code of conduct may be banned from the community.
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
git@sfconservancy.org, or individually:
|
||||
|
||||
- Ævar Arnfjörð Bjarmason <avarab@gmail.com>
|
||||
- Christian Couder <christian.couder@gmail.com>
|
||||
- Jeff King <peff@peff.net>
|
||||
- Junio C Hamano <gitster@pobox.com>
|
||||
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
|
||||
at [https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
@ -75,7 +75,7 @@ For shell scripts specifically (not exhaustive):
|
||||
|
||||
- If you want to find out if a command is available on the user's
|
||||
$PATH, you should use 'type <command>', instead of 'which <command>'.
|
||||
The output of 'which' is not machine parsable and its exit code
|
||||
The output of 'which' is not machine parseable and its exit code
|
||||
is not reliable across platforms.
|
||||
|
||||
- We use POSIX compliant parameter substitutions and avoid bashisms;
|
||||
@ -91,10 +91,16 @@ For shell scripts specifically (not exhaustive):
|
||||
|
||||
- No shell arrays.
|
||||
|
||||
- No strlen ${#parameter}.
|
||||
|
||||
- No pattern replacement ${parameter/pattern/string}.
|
||||
|
||||
- We use Arithmetic Expansion $(( ... )).
|
||||
|
||||
- Inside Arithmetic Expansion, spell shell variables with $ in front
|
||||
of them, as some shells do not grok $((x)) while accepting $(($x))
|
||||
just fine (e.g. dash older than 0.5.4).
|
||||
|
||||
- We do not use Process Substitution <(list) or >(list).
|
||||
|
||||
- Do not write control structures on a single line with semicolon.
|
||||
@ -197,7 +203,7 @@ For C programs:
|
||||
. since early 2012 with e1327023ea, we have been using an enum
|
||||
definition whose last element is followed by a comma. This, like
|
||||
an array initializer that ends with a trailing comma, can be used
|
||||
to reduce the patch noise when adding a new identifier at the end.
|
||||
to reduce the patch noise when adding a new identifer at the end.
|
||||
|
||||
. since mid 2017 with cbc0f81d, we have been using designated
|
||||
initializers for struct (e.g. "struct t v = { .val = 'a' };").
|
||||
@ -232,18 +238,6 @@ For C programs:
|
||||
while( condition )
|
||||
func (bar+1);
|
||||
|
||||
- Do not explicitly compare an integral value with constant 0 or '\0',
|
||||
or a pointer value with constant NULL. For instance, to validate that
|
||||
counted array <ptr, cnt> is initialized but has no elements, write:
|
||||
|
||||
if (!ptr || cnt)
|
||||
BUG("empty array expected");
|
||||
|
||||
and not:
|
||||
|
||||
if (ptr == NULL || cnt != 0);
|
||||
BUG("empty array expected");
|
||||
|
||||
- We avoid using braces unnecessarily. I.e.
|
||||
|
||||
if (bla) {
|
||||
@ -489,11 +483,16 @@ For Python scripts:
|
||||
|
||||
- We follow PEP-8 (http://www.python.org/dev/peps/pep-0008/).
|
||||
|
||||
- As a minimum, we aim to be compatible with Python 2.7.
|
||||
- As a minimum, we aim to be compatible with Python 2.6 and 2.7.
|
||||
|
||||
- Where required libraries do not restrict us to Python 2, we try to
|
||||
also be compatible with Python 3.1 and later.
|
||||
|
||||
- When you must differentiate between Unicode literals and byte string
|
||||
literals, it is OK to use the 'b' prefix. Even though the Python
|
||||
documentation for version 2.6 does not mention this prefix, it has
|
||||
been supported since version 2.6.0.
|
||||
|
||||
Error Messages
|
||||
|
||||
- Do not end error messages with a full stop.
|
||||
|
@ -17,11 +17,9 @@ MAN1_TXT += git.txt
|
||||
MAN1_TXT += gitk.txt
|
||||
MAN1_TXT += gitweb.txt
|
||||
|
||||
# man5 / man7 guides (note: new guides should also be added to command-list.txt)
|
||||
MAN5_TXT += gitattributes.txt
|
||||
MAN5_TXT += githooks.txt
|
||||
MAN5_TXT += gitignore.txt
|
||||
MAN5_TXT += gitmailmap.txt
|
||||
MAN5_TXT += gitmodules.txt
|
||||
MAN5_TXT += gitrepository-layout.txt
|
||||
MAN5_TXT += gitweb.conf.txt
|
||||
@ -32,7 +30,6 @@ MAN7_TXT += gitcredentials.txt
|
||||
MAN7_TXT += gitcvs-migration.txt
|
||||
MAN7_TXT += gitdiffcore.txt
|
||||
MAN7_TXT += giteveryday.txt
|
||||
MAN7_TXT += gitfaq.txt
|
||||
MAN7_TXT += gitglossary.txt
|
||||
MAN7_TXT += gitnamespaces.txt
|
||||
MAN7_TXT += gitremote-helpers.txt
|
||||
@ -80,7 +77,6 @@ API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technica
|
||||
SP_ARTICLES += $(API_DOCS)
|
||||
|
||||
TECH_DOCS += MyFirstContribution
|
||||
TECH_DOCS += MyFirstObjectWalk
|
||||
TECH_DOCS += SubmittingPatches
|
||||
TECH_DOCS += technical/hash-function-transition
|
||||
TECH_DOCS += technical/http-protocol
|
||||
@ -95,7 +91,6 @@ TECH_DOCS += technical/protocol-capabilities
|
||||
TECH_DOCS += technical/protocol-common
|
||||
TECH_DOCS += technical/protocol-v2
|
||||
TECH_DOCS += technical/racy-git
|
||||
TECH_DOCS += technical/reftable
|
||||
TECH_DOCS += technical/send-pack-pipeline
|
||||
TECH_DOCS += technical/shallow
|
||||
TECH_DOCS += technical/signature-format
|
||||
@ -128,8 +123,7 @@ ASCIIDOC_HTML = xhtml11
|
||||
ASCIIDOC_DOCBOOK = docbook
|
||||
ASCIIDOC_CONF = -f asciidoc.conf
|
||||
ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
|
||||
-amanversion=$(GIT_VERSION) \
|
||||
-amanmanual='Git Manual' -amansource='Git'
|
||||
-agit_version=$(GIT_VERSION)
|
||||
TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
|
||||
TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
|
||||
MANPAGE_XSL = manpage-normal.xsl
|
||||
@ -153,9 +147,32 @@ endif
|
||||
-include ../config.mak.autogen
|
||||
-include ../config.mak
|
||||
|
||||
#
|
||||
# For docbook-xsl ...
|
||||
# -1.68.1, no extra settings are needed?
|
||||
# 1.69.0, set ASCIIDOC_ROFF?
|
||||
# 1.69.1-1.71.0, set DOCBOOK_SUPPRESS_SP?
|
||||
# 1.71.1, set ASCIIDOC_ROFF?
|
||||
# 1.72.0, set DOCBOOK_XSL_172.
|
||||
# 1.73.0-, no extra settings are needed
|
||||
#
|
||||
|
||||
ifdef DOCBOOK_XSL_172
|
||||
ASCIIDOC_EXTRA += -a git-asciidoc-no-roff
|
||||
MANPAGE_XSL = manpage-1.72.xsl
|
||||
else
|
||||
ifndef ASCIIDOC_ROFF
|
||||
# docbook-xsl after 1.72 needs the regular XSL, but will not
|
||||
# pass-thru raw roff codes from asciidoc.conf, so turn them off.
|
||||
ASCIIDOC_EXTRA += -a git-asciidoc-no-roff
|
||||
endif
|
||||
endif
|
||||
ifndef NO_MAN_BOLD_LITERAL
|
||||
XMLTO_EXTRA += -m manpage-bold-literal.xsl
|
||||
endif
|
||||
ifdef DOCBOOK_SUPPRESS_SP
|
||||
XMLTO_EXTRA += -m manpage-suppress-sp.xsl
|
||||
endif
|
||||
|
||||
# Newer DocBook stylesheet emits warning cruft in the output when
|
||||
# this is not set, and if set it shows an absolute link. Older
|
||||
@ -180,13 +197,11 @@ ifdef USE_ASCIIDOCTOR
|
||||
ASCIIDOC = asciidoctor
|
||||
ASCIIDOC_CONF =
|
||||
ASCIIDOC_HTML = xhtml5
|
||||
ASCIIDOC_DOCBOOK = docbook5
|
||||
ASCIIDOC_DOCBOOK = docbook45
|
||||
ASCIIDOC_EXTRA += -acompat-mode -atabsize=8
|
||||
ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
|
||||
ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
|
||||
DBLATEX_COMMON =
|
||||
XMLTO_EXTRA += --skip-validation
|
||||
XMLTO_EXTRA += -x manpage.xsl
|
||||
endif
|
||||
|
||||
SHELL_PATH ?= $(SHELL)
|
||||
@ -273,9 +288,7 @@ install-html: html
|
||||
../GIT-VERSION-FILE: FORCE
|
||||
$(QUIET_SUBDIR0)../ $(QUIET_SUBDIR1) GIT-VERSION-FILE
|
||||
|
||||
ifneq ($(MAKECMDGOALS),clean)
|
||||
-include ../GIT-VERSION-FILE
|
||||
endif
|
||||
|
||||
#
|
||||
# Determine "include::" file references in asciidoc files.
|
||||
@ -289,9 +302,7 @@ doc.dep : $(docdep_prereqs) $(wildcard *.txt) $(wildcard config/*.txt) build-doc
|
||||
$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
|
||||
mv $@+ $@
|
||||
|
||||
ifneq ($(MAKECMDGOALS),clean)
|
||||
-include doc.dep
|
||||
endif
|
||||
|
||||
cmds_txt = cmds-ancillaryinterrogators.txt \
|
||||
cmds-ancillarymanipulators.txt \
|
||||
@ -300,7 +311,6 @@ cmds_txt = cmds-ancillaryinterrogators.txt \
|
||||
cmds-plumbingmanipulators.txt \
|
||||
cmds-synchingrepositories.txt \
|
||||
cmds-synchelpers.txt \
|
||||
cmds-guide.txt \
|
||||
cmds-purehelpers.txt \
|
||||
cmds-foreignscminterface.txt
|
||||
|
||||
@ -308,7 +318,7 @@ $(cmds_txt): cmd-list.made
|
||||
|
||||
cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)
|
||||
$(QUIET_GEN)$(RM) $@ && \
|
||||
$(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \
|
||||
$(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \
|
||||
date >$@
|
||||
|
||||
mergetools_txt = mergetools-diff.txt mergetools-merge.txt
|
||||
@ -385,10 +395,7 @@ SubmittingPatches.txt: SubmittingPatches
|
||||
$(QUIET_GEN) cp $< $@
|
||||
|
||||
XSLT = docbook.xsl
|
||||
XSLTOPTS =
|
||||
XSLTOPTS += --xinclude
|
||||
XSLTOPTS += --stringparam html.stylesheet docbook-xsl.css
|
||||
XSLTOPTS += --param generate.consistent.ids 1
|
||||
XSLTOPTS = --xinclude --stringparam html.stylesheet docbook-xsl.css
|
||||
|
||||
user-manual.html: user-manual.xml $(XSLT)
|
||||
$(QUIET_XSLTPROC)$(RM) $@+ $@ && \
|
||||
|
@ -23,42 +23,6 @@ useful additional context:
|
||||
- `Documentation/SubmittingPatches`
|
||||
- `Documentation/howto/new-command.txt`
|
||||
|
||||
[[getting-help]]
|
||||
=== Getting Help
|
||||
|
||||
If you get stuck, you can seek help in the following places.
|
||||
|
||||
==== git@vger.kernel.org
|
||||
|
||||
This is the main Git project mailing list where code reviews, version
|
||||
announcements, design discussions, and more take place. Those interested in
|
||||
contributing are welcome to post questions here. The Git list requires
|
||||
plain-text-only emails and prefers inline and bottom-posting when replying to
|
||||
mail; you will be CC'd in all replies to you. Optionally, you can subscribe to
|
||||
the list by sending an email to majordomo@vger.kernel.org with "subscribe git"
|
||||
in the body. The https://lore.kernel.org/git[archive] of this mailing list is
|
||||
available to view in a browser.
|
||||
|
||||
==== https://groups.google.com/forum/#!forum/git-mentoring[git-mentoring@googlegroups.com]
|
||||
|
||||
This mailing list is targeted to new contributors and was created as a place to
|
||||
post questions and receive answers outside of the public eye of the main list.
|
||||
Veteran contributors who are especially interested in helping mentor newcomers
|
||||
are present on the list. In order to avoid search indexers, group membership is
|
||||
required to view messages; anyone can join and no approval is required.
|
||||
|
||||
==== https://webchat.freenode.net/#git-devel[#git-devel] on Freenode
|
||||
|
||||
This IRC channel is for conversations between Git contributors. If someone is
|
||||
currently online and knows the answer to your question, you can receive help
|
||||
in real time. Otherwise, you can read the
|
||||
https://colabti.org/irclogger/irclogger_logs/git-devel[scrollback] to see
|
||||
whether someone answered you. IRC does not allow offline private messaging, so
|
||||
if you try to private message someone and then log out of IRC, they cannot
|
||||
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.
|
||||
|
||||
[[getting-started]]
|
||||
== Getting Started
|
||||
|
||||
@ -74,26 +38,6 @@ $ git clone https://github.com/git/git git
|
||||
$ cd git
|
||||
----
|
||||
|
||||
[[dependencies]]
|
||||
=== Installing Dependencies
|
||||
|
||||
To build Git from source, you need to have a handful of dependencies installed
|
||||
on your system. For a hint of what's needed, you can take a look at
|
||||
`INSTALL`, paying close attention to the section about Git's dependencies on
|
||||
external programs and libraries. That document mentions a way to "test-drive"
|
||||
our freshly built Git without installing; that's the method we'll be using in
|
||||
this tutorial.
|
||||
|
||||
Make sure that your environment has everything you need by building your brand
|
||||
new clone of Git from the above step:
|
||||
|
||||
----
|
||||
$ make
|
||||
----
|
||||
|
||||
NOTE: The Git build is parallelizable. `-j#` is not included above but you can
|
||||
use it as you prefer, here and elsewhere.
|
||||
|
||||
[[identify-problem]]
|
||||
=== Identify Problem to Solve
|
||||
|
||||
@ -153,8 +97,8 @@ int cmd_psuh(int argc, const char **argv, const char *prefix)
|
||||
----
|
||||
|
||||
We'll also need to add the declaration of psuh; open up `builtin.h`, find the
|
||||
declaration for `cmd_pull`, and add a new line for `psuh` immediately before it,
|
||||
in order to keep the declarations alphabetically sorted:
|
||||
declaration for `cmd_push`, and add a new line for `psuh` immediately before it,
|
||||
in order to keep the declarations sorted:
|
||||
|
||||
----
|
||||
int cmd_psuh(int argc, const char **argv, const char *prefix);
|
||||
@ -179,7 +123,7 @@ int cmd_psuh(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
----
|
||||
|
||||
Let's try to build it. Open `Makefile`, find where `builtin/pull.o` is added
|
||||
Let's try to build it. Open `Makefile`, find where `builtin/push.o` is added
|
||||
to `BUILTIN_OBJS`, and add `builtin/psuh.o` in the same way next to it in
|
||||
alphabetical order. Once you've done so, move to the top-level directory and
|
||||
build simply with `make`. Also add the `DEVELOPER=1` variable to turn on
|
||||
@ -194,6 +138,9 @@ NOTE: When you are developing the Git project, it's preferred that you use the
|
||||
`DEVELOPER` flag; if there's some reason it doesn't work for you, you can turn
|
||||
it off, but it's a good idea to mention the problem to the mailing list.
|
||||
|
||||
NOTE: The Git build is parallelizable. `-j#` is not included above but you can
|
||||
use it as you prefer, here and elsewhere.
|
||||
|
||||
Great, now your new command builds happily on its own. But nobody invokes it.
|
||||
Let's change that.
|
||||
|
||||
@ -202,7 +149,7 @@ a `cmd_struct` to the `commands[]` array. `struct cmd_struct` takes a string
|
||||
with the command name, a function pointer to the command implementation, and a
|
||||
setup option flag. For now, let's keep mimicking `push`. Find the line where
|
||||
`cmd_push` is registered, copy it, and modify it for `cmd_psuh`, placing the new
|
||||
line in alphabetical order (immediately before `cmd_pull`).
|
||||
line in alphabetical order.
|
||||
|
||||
The options are documented in `builtin.h` under "Adding a new built-in." Since
|
||||
we hope to print some data about the user's current workspace context later,
|
||||
@ -220,7 +167,7 @@ Check it out! You've got a command! Nice work! Let's commit this.
|
||||
|
||||
`git status` reveals modified `Makefile`, `builtin.h`, and `git.c` as well as
|
||||
untracked `builtin/psuh.c` and `git-psuh`. First, let's take care of the binary,
|
||||
which should be ignored. Open `.gitignore` in your editor, find `/git-pull`, and
|
||||
which should be ignored. Open `.gitignore` in your editor, find `/git-push`, and
|
||||
add an entry for your new command in alphabetical order:
|
||||
|
||||
----
|
||||
@ -249,7 +196,7 @@ component you're working on, followed by a blank line (always required) and then
|
||||
the body of your commit message, which should provide the bulk of the context.
|
||||
Remember to be explicit and provide the "Why" of your change, especially if it
|
||||
couldn't easily be understood from your diff. When editing your commit message,
|
||||
don't remove the `Signed-off-by` trailer which was added by `-s` above.
|
||||
don't remove the Signed-off-by line which was added by `-s` above.
|
||||
|
||||
----
|
||||
psuh: add a built-in by popular demand
|
||||
@ -319,14 +266,14 @@ function body:
|
||||
...
|
||||
|
||||
git_config(git_default_config, NULL);
|
||||
if (git_config_get_string_tmp("user.name", &cfg_name) > 0)
|
||||
if (git_config_get_string_const("user.name", &cfg_name) > 0)
|
||||
printf(_("No name is found in config\n"));
|
||||
else
|
||||
printf(_("Your name: %s\n"), cfg_name);
|
||||
----
|
||||
|
||||
`git_config()` will grab the configuration from config files known to Git and
|
||||
apply standard precedence rules. `git_config_get_string_tmp()` will look up
|
||||
apply standard precedence rules. `git_config_get_string_const()` will look up
|
||||
a specific key ("user.name") and give you the value. There are a number of
|
||||
single-key lookup functions like this one; you can see them all (and more info
|
||||
about how to use `git_config()`) in `Documentation/technical/api-config.txt`.
|
||||
@ -507,9 +454,6 @@ documentation is consistent with other Git and UNIX manpages; this makes life
|
||||
easier for your user, who can skip to the section they know contains the
|
||||
information they need.
|
||||
|
||||
NOTE: Before trying to build the docs, make sure you have the package `asciidoc`
|
||||
installed.
|
||||
|
||||
Now that you've written your manpage, you'll need to build it explicitly. We
|
||||
convert your AsciiDoc to troff which is man-readable like so:
|
||||
|
||||
@ -525,6 +469,8 @@ $ make -C Documentation/ git-psuh.1
|
||||
$ man Documentation/git-psuh.1
|
||||
----
|
||||
|
||||
NOTE: You may need to install the package `asciidoc` to get this to work.
|
||||
|
||||
While this isn't as satisfying as running through `git help`, you can at least
|
||||
check that your help page looks right.
|
||||
|
||||
@ -588,28 +534,6 @@ you want to pass as a parameter something which would usually be interpreted as
|
||||
a flag.) `parse_options()` will terminate parsing when it reaches `--` and give
|
||||
you the rest of the options afterwards, untouched.
|
||||
|
||||
Now that you have a usage hint, you can teach Git how to show it in the general
|
||||
command list shown by `git help git` or `git help -a`, which is generated from
|
||||
`command-list.txt`. Find the line for 'git-pull' so you can add your 'git-psuh'
|
||||
line above it in alphabetical order. Now, we can add some attributes about the
|
||||
command which impacts where it shows up in the aforementioned help commands. The
|
||||
top of `command-list.txt` shares some information about what each attribute
|
||||
means; in those help pages, the commands are sorted according to these
|
||||
attributes. `git psuh` is user-facing, or porcelain - so we will mark it as
|
||||
"mainporcelain". For "mainporcelain" commands, the comments at the top of
|
||||
`command-list.txt` indicate we can also optionally add an attribute from another
|
||||
list; since `git psuh` shows some information about the user's workspace but
|
||||
doesn't modify anything, let's mark it as "info". Make sure to keep your
|
||||
attributes in the same style as the rest of `command-list.txt` using spaces to
|
||||
align and delineate them:
|
||||
|
||||
----
|
||||
git-prune-packed plumbingmanipulators
|
||||
git-psuh mainporcelain info
|
||||
git-pull mainporcelain remote
|
||||
git-push mainporcelain remote
|
||||
----
|
||||
|
||||
Build again. Now, when you run with `-h`, you should see your usage printed and
|
||||
your command terminated before anything else interesting happens. Great!
|
||||
|
||||
@ -664,7 +588,7 @@ mention the right animal somewhere:
|
||||
----
|
||||
test_expect_success 'runs correctly with no args and good output' '
|
||||
git psuh >actual &&
|
||||
grep Pony actual
|
||||
test_i18ngrep Pony actual
|
||||
'
|
||||
----
|
||||
|
||||
@ -822,14 +746,6 @@ will automatically run your PRs through the CI even without the permission given
|
||||
but you will not be able to `/submit` your changes until someone allows you to
|
||||
use the tool.
|
||||
|
||||
NOTE: You can typically find someone who can `/allow` you on GitGitGadget by
|
||||
either examining recent pull requests where someone has been granted `/allow`
|
||||
(https://github.com/gitgitgadget/git/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+%22%2Fallow%22[Search:
|
||||
is:pr is:open "/allow"]), in which case both the author and the person who
|
||||
granted the `/allow` can now `/allow` you, or by inquiring on the
|
||||
https://webchat.freenode.net/#git-devel[#git-devel] IRC channel on Freenode
|
||||
linking your pull request and asking for someone to `/allow` you.
|
||||
|
||||
If the CI fails, you can update your changes with `git rebase -i` and push your
|
||||
branch again:
|
||||
|
||||
@ -1054,7 +970,7 @@ reviewers the changes you've made that may not be as visible.
|
||||
You will also need to go and find the Message-Id of your previous cover letter.
|
||||
You can either note it when you send the first series, from the output of `git
|
||||
send-email`, or you can look it up on the
|
||||
https://lore.kernel.org/git[mailing list]. Find your cover letter in the
|
||||
https://public-inbox.org/git[mailing list]. Find your cover letter in the
|
||||
archives, click on it, then click "permalink" or "raw" to reveal the Message-Id
|
||||
header. It should match:
|
||||
|
||||
@ -1143,25 +1059,11 @@ After a few days, you will hopefully receive a reply to your patchset with some
|
||||
comments. Woohoo! Now you can get back to work.
|
||||
|
||||
It's good manners to reply to each comment, notifying the reviewer that you have
|
||||
made the change suggested, feel the original is better, or that the comment
|
||||
made the change requested, feel the original is better, or that the comment
|
||||
inspired you to do something a new way which is superior to both the original
|
||||
and the suggested change. This way reviewers don't need to inspect your v2 to
|
||||
figure out whether you implemented their comment or not.
|
||||
|
||||
Reviewers may ask you about what you wrote in the patchset, either in
|
||||
the proposed commit log message or in the changes themselves. You
|
||||
should answer these questions in your response messages, but often the
|
||||
reason why reviewers asked these questions to understand what you meant
|
||||
to write is because your patchset needed clarification to be understood.
|
||||
|
||||
Do not be satisfied by just answering their questions in your response
|
||||
and hear them say that they now understand what you wanted to say.
|
||||
Update your patches to clarify the points reviewers had trouble with,
|
||||
and prepare your v2; the words you used to explain your v1 to answer
|
||||
reviewers' questions may be useful thing to use. Your goal is to make
|
||||
your v2 clear enough so that it becomes unnecessary for you to give the
|
||||
same explanation to the next person who reads it.
|
||||
|
||||
If you are going to push back on a comment, be polite and explain why you feel
|
||||
your original is better; be prepared that the reviewer may still disagree with
|
||||
you, and the rest of the community may weigh in on one side or the other. As
|
||||
@ -1194,8 +1096,8 @@ look at the section below this one for some context.)
|
||||
[[after-approval]]
|
||||
=== After Review Approval
|
||||
|
||||
The Git project has four integration branches: `seen`, `next`, `master`, and
|
||||
`maint`. Your change will be placed into `seen` fairly early on by the maintainer
|
||||
The Git project has four integration branches: `pu`, `next`, `master`, and
|
||||
`maint`. Your change will be placed into `pu` fairly early on by the maintainer
|
||||
while it is still in the review process; from there, when it is ready for wider
|
||||
testing, it will be merged into `next`. Plenty of early testers use `next` and
|
||||
may report issues. Eventually, changes in `next` will make it to `master`,
|
||||
|
@ -1,870 +0,0 @@
|
||||
= My First Object Walk
|
||||
|
||||
== What's an Object Walk?
|
||||
|
||||
The object walk is a key concept in Git - this is the process that underpins
|
||||
operations like object transfer and fsck. Beginning from a given commit, the
|
||||
list of objects is found by walking parent relationships between commits (commit
|
||||
X based on commit W) and containment relationships between objects (tree Y is
|
||||
contained within commit X, and blob Z is located within tree Y, giving our
|
||||
working tree for commit X something like `y/z.txt`).
|
||||
|
||||
A related concept is the revision walk, which is focused on commit objects and
|
||||
their parent relationships and does not delve into other object types. The
|
||||
revision walk is used for operations like `git log`.
|
||||
|
||||
=== Related Reading
|
||||
|
||||
- `Documentation/user-manual.txt` under "Hacking Git" contains some coverage of
|
||||
the revision walker in its various incarnations.
|
||||
- `revision.h`
|
||||
- https://eagain.net/articles/git-for-computer-scientists/[Git for Computer Scientists]
|
||||
gives a good overview of the types of objects in Git and what your object
|
||||
walk is really describing.
|
||||
|
||||
== Setting Up
|
||||
|
||||
Create a new branch from `master`.
|
||||
|
||||
----
|
||||
git checkout -b revwalk origin/master
|
||||
----
|
||||
|
||||
We'll put our fiddling into a new command. For fun, let's name it `git walken`.
|
||||
Open up a new file `builtin/walken.c` and set up the command handler:
|
||||
|
||||
----
|
||||
/*
|
||||
* "git walken"
|
||||
*
|
||||
* Part of the "My First Object Walk" tutorial.
|
||||
*/
|
||||
|
||||
#include "builtin.h"
|
||||
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
trace_printf(_("cmd_walken incoming...\n"));
|
||||
return 0;
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: `trace_printf()` differs from `printf()` in that it can be turned on or
|
||||
off at runtime. For the purposes of this tutorial, we will write `walken` as
|
||||
though it is intended for use as a "plumbing" command: that is, a command which
|
||||
is used primarily in scripts, rather than interactively by humans (a "porcelain"
|
||||
command). So we will send our debug output to `trace_printf()` instead. When
|
||||
running, enable trace output by setting the environment variable `GIT_TRACE`.
|
||||
|
||||
Add usage text and `-h` handling, like all subcommands should consistently do
|
||||
(our test suite will notice and complain if you fail to do so).
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
const char * const walken_usage[] = {
|
||||
N_("git walken"),
|
||||
NULL,
|
||||
}
|
||||
struct option options[] = {
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
argc = parse_options(argc, argv, prefix, options, walken_usage, 0);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Also add the relevant line in `builtin.h` near `cmd_whatchanged()`:
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix);
|
||||
----
|
||||
|
||||
Include the command in `git.c` in `commands[]` near the entry for `whatchanged`,
|
||||
maintaining alphabetical ordering:
|
||||
|
||||
----
|
||||
{ "walken", cmd_walken, RUN_SETUP },
|
||||
----
|
||||
|
||||
Add it to the `Makefile` near the line for `builtin/worktree.o`:
|
||||
|
||||
----
|
||||
BUILTIN_OBJS += builtin/walken.o
|
||||
----
|
||||
|
||||
Build and test out your command, without forgetting to ensure the `DEVELOPER`
|
||||
flag is set, and with `GIT_TRACE` enabled so the debug output can be seen:
|
||||
|
||||
----
|
||||
$ echo DEVELOPER=1 >>config.mak
|
||||
$ make
|
||||
$ GIT_TRACE=1 ./bin-wrappers/git walken
|
||||
----
|
||||
|
||||
NOTE: For a more exhaustive overview of the new command process, take a look at
|
||||
`Documentation/MyFirstContribution.txt`.
|
||||
|
||||
NOTE: A reference implementation can be found at
|
||||
https://github.com/nasamuffin/git/tree/revwalk.
|
||||
|
||||
=== `struct rev_cmdline_info`
|
||||
|
||||
The definition of `struct rev_cmdline_info` can be found in `revision.h`.
|
||||
|
||||
This struct is contained within the `rev_info` struct and is used to reflect
|
||||
parameters provided by the user over the CLI.
|
||||
|
||||
`nr` represents the number of `rev_cmdline_entry` present in the array.
|
||||
|
||||
`alloc` is used by the `ALLOC_GROW` macro. Check `cache.h` - this variable is
|
||||
used to track the allocated size of the list.
|
||||
|
||||
Per entry, we find:
|
||||
|
||||
`item` is the object provided upon which to base the object walk. Items in Git
|
||||
can be blobs, trees, commits, or tags. (See `Documentation/gittutorial-2.txt`.)
|
||||
|
||||
`name` is the object ID (OID) of the object - a hex string you may be familiar
|
||||
with from using Git to organize your source in the past. Check the tutorial
|
||||
mentioned above towards the top for a discussion of where the OID can come
|
||||
from.
|
||||
|
||||
`whence` indicates some information about what to do with the parents of the
|
||||
specified object. We'll explore this flag more later on; take a look at
|
||||
`Documentation/revisions.txt` to get an idea of what could set the `whence`
|
||||
value.
|
||||
|
||||
`flags` are used to hint the beginning of the revision walk and are the first
|
||||
block under the `#include`s in `revision.h`. The most likely ones to be set in
|
||||
the `rev_cmdline_info` are `UNINTERESTING` and `BOTTOM`, but these same flags
|
||||
can be used during the walk, as well.
|
||||
|
||||
=== `struct rev_info`
|
||||
|
||||
This one is quite a bit longer, and many fields are only used during the walk
|
||||
by `revision.c` - not configuration options. Most of the configurable flags in
|
||||
`struct rev_info` have a mirror in `Documentation/rev-list-options.txt`. It's a
|
||||
good idea to take some time and read through that document.
|
||||
|
||||
== Basic Commit Walk
|
||||
|
||||
First, let's see if we can replicate the output of `git log --oneline`. We'll
|
||||
refer back to the implementation frequently to discover norms when performing
|
||||
an object walk of our own.
|
||||
|
||||
To do so, we'll first find all the commits, in order, which preceded the current
|
||||
commit. We'll extract the name and subject of the commit from each.
|
||||
|
||||
Ideally, we will also be able to find out which ones are currently at the tip of
|
||||
various branches.
|
||||
|
||||
=== Setting Up
|
||||
|
||||
Preparing for your object walk has some distinct stages.
|
||||
|
||||
1. Perform default setup for this mode, and others which may be invoked.
|
||||
2. Check configuration files for relevant settings.
|
||||
3. Set up the `rev_info` struct.
|
||||
4. Tweak the initialized `rev_info` to suit the current walk.
|
||||
5. Prepare the `rev_info` for the walk.
|
||||
6. Iterate over the objects, processing each one.
|
||||
|
||||
==== Default Setups
|
||||
|
||||
Before examining configuration files which may modify command behavior, set up
|
||||
default state for switches or options your command may have. If your command
|
||||
utilizes other Git components, ask them to set up their default states as well.
|
||||
For instance, `git log` takes advantage of `grep` and `diff` functionality, so
|
||||
its `init_log_defaults()` sets its own state (`decoration_style`) and asks
|
||||
`grep` and `diff` to initialize themselves by calling each of their
|
||||
initialization functions.
|
||||
|
||||
==== Configuring From `.gitconfig`
|
||||
|
||||
Next, we should have a look at any relevant configuration settings (i.e.,
|
||||
settings readable and settable from `git config`). This is done by providing a
|
||||
callback to `git_config()`; within that callback, you can also invoke methods
|
||||
from other components you may need that need to intercept these options. Your
|
||||
callback will be invoked once per each configuration value which Git knows about
|
||||
(global, local, worktree, etc.).
|
||||
|
||||
Similarly to the default values, we don't have anything to do here yet
|
||||
ourselves; however, we should call `git_default_config()` if we aren't calling
|
||||
any other existing config callbacks.
|
||||
|
||||
Add a new function to `builtin/walken.c`:
|
||||
|
||||
----
|
||||
static int git_walken_config(const char *var, const char *value, void *cb)
|
||||
{
|
||||
/*
|
||||
* For now, we don't have any custom configuration, so fall back to
|
||||
* the default config.
|
||||
*/
|
||||
return git_default_config(var, value, cb);
|
||||
}
|
||||
----
|
||||
|
||||
Make sure to invoke `git_config()` with it in your `cmd_walken()`:
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
...
|
||||
|
||||
git_config(git_walken_config, NULL);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
==== Setting Up `rev_info`
|
||||
|
||||
Now that we've gathered external configuration and options, it's time to
|
||||
initialize the `rev_info` object which we will use to perform the walk. This is
|
||||
typically done by calling `repo_init_revisions()` with the repository you intend
|
||||
to target, as well as the `prefix` argument of `cmd_walken` and your `rev_info`
|
||||
struct.
|
||||
|
||||
Add the `struct rev_info` and the `repo_init_revisions()` call:
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
/* This can go wherever you like in your declarations.*/
|
||||
struct rev_info rev;
|
||||
...
|
||||
|
||||
/* This should go after the git_config() call. */
|
||||
repo_init_revisions(the_repository, &rev, prefix);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
==== Tweaking `rev_info` For the Walk
|
||||
|
||||
We're getting close, but we're still not quite ready to go. Now that `rev` is
|
||||
initialized, we can modify it to fit our needs. This is usually done within a
|
||||
helper for clarity, so let's add one:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(struct rev_info *rev)
|
||||
{
|
||||
/*
|
||||
* We want to mimic the appearance of `git log --oneline`, so let's
|
||||
* force oneline format.
|
||||
*/
|
||||
get_commit_format("oneline", rev);
|
||||
|
||||
/* Start our object walk at HEAD. */
|
||||
add_head_to_pending(rev);
|
||||
}
|
||||
----
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
Instead of using the shorthand `add_head_to_pending()`, you could do
|
||||
something like this:
|
||||
----
|
||||
struct setup_revision_opt opt;
|
||||
|
||||
memset(&opt, 0, sizeof(opt));
|
||||
opt.def = "HEAD";
|
||||
opt.revarg_opt = REVARG_COMMITTISH;
|
||||
setup_revisions(argc, argv, rev, &opt);
|
||||
----
|
||||
Using a `setup_revision_opt` gives you finer control over your walk's starting
|
||||
point.
|
||||
====
|
||||
|
||||
Then let's invoke `final_rev_info_setup()` after the call to
|
||||
`repo_init_revisions()`:
|
||||
|
||||
----
|
||||
int cmd_walken(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
...
|
||||
|
||||
final_rev_info_setup(&rev);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Later, we may wish to add more arguments to `final_rev_info_setup()`. But for
|
||||
now, this is all we need.
|
||||
|
||||
==== Preparing `rev_info` For the Walk
|
||||
|
||||
Now that `rev` is all initialized and configured, we've got one more setup step
|
||||
before we get rolling. We can do this in a helper, which will both prepare the
|
||||
`rev_info` for the walk, and perform the walk itself. Let's start the helper
|
||||
with the call to `prepare_revision_walk()`, which can return an error without
|
||||
dying on its own:
|
||||
|
||||
----
|
||||
static void walken_commit_walk(struct rev_info *rev)
|
||||
{
|
||||
if (prepare_revision_walk(rev))
|
||||
die(_("revision walk setup failed"));
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: `die()` prints to `stderr` and exits the program. Since it will print to
|
||||
`stderr` it's likely to be seen by a human, so we will localize it.
|
||||
|
||||
==== Performing the Walk!
|
||||
|
||||
Finally! We are ready to begin the walk itself. Now we can see that `rev_info`
|
||||
can also be used as an iterator; we move to the next item in the walk by using
|
||||
`get_revision()` repeatedly. Add the listed variable declarations at the top and
|
||||
the walk loop below the `prepare_revision_walk()` call within your
|
||||
`walken_commit_walk()`:
|
||||
|
||||
----
|
||||
static void walken_commit_walk(struct rev_info *rev)
|
||||
{
|
||||
struct commit *commit;
|
||||
struct strbuf prettybuf = STRBUF_INIT;
|
||||
|
||||
...
|
||||
|
||||
while ((commit = get_revision(rev))) {
|
||||
strbuf_reset(&prettybuf);
|
||||
pp_commit_easy(CMIT_FMT_ONELINE, commit, &prettybuf);
|
||||
puts(prettybuf.buf);
|
||||
}
|
||||
strbuf_release(&prettybuf);
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: `puts()` prints a `char*` to `stdout`. Since this is the part of the
|
||||
command we expect to be machine-parsed, we're sending it directly to stdout.
|
||||
|
||||
Give it a shot.
|
||||
|
||||
----
|
||||
$ make
|
||||
$ ./bin-wrappers/git walken
|
||||
----
|
||||
|
||||
You should see all of the subject lines of all the commits in
|
||||
your tree's history, in order, ending with the initial commit, "Initial revision
|
||||
of "git", the information manager from hell". Congratulations! You've written
|
||||
your first revision walk. You can play with printing some additional fields
|
||||
from each commit if you're curious; have a look at the functions available in
|
||||
`commit.h`.
|
||||
|
||||
=== Adding a Filter
|
||||
|
||||
Next, let's try to filter the commits we see based on their author. This is
|
||||
equivalent to running `git log --author=<pattern>`. We can add a filter by
|
||||
modifying `rev_info.grep_filter`, which is a `struct grep_opt`.
|
||||
|
||||
First some setup. Add `grep_config()` to `git_walken_config()`:
|
||||
|
||||
----
|
||||
static int git_walken_config(const char *var, const char *value, void *cb)
|
||||
{
|
||||
grep_config(var, value, cb);
|
||||
return git_default_config(var, value, cb);
|
||||
}
|
||||
----
|
||||
|
||||
Next, we can modify the `grep_filter`. This is done with convenience functions
|
||||
found in `grep.h`. For fun, we're filtering to only commits from folks using a
|
||||
`gmail.com` email address - a not-very-precise guess at who may be working on
|
||||
Git as a hobby. Since we're checking the author, which is a specific line in the
|
||||
header, we'll use the `append_header_grep_pattern()` helper. We can use
|
||||
the `enum grep_header_field` to indicate which part of the commit header we want
|
||||
to search.
|
||||
|
||||
In `final_rev_info_setup()`, add your filter line:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv,
|
||||
const char *prefix, struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
append_header_grep_pattern(&rev->grep_filter, GREP_HEADER_AUTHOR,
|
||||
"gmail");
|
||||
compile_grep_patterns(&rev->grep_filter);
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
`append_header_grep_pattern()` adds your new "gmail" pattern to `rev_info`, but
|
||||
it won't work unless we compile it with `compile_grep_patterns()`.
|
||||
|
||||
NOTE: If you are using `setup_revisions()` (for example, if you are passing a
|
||||
`setup_revision_opt` instead of using `add_head_to_pending()`), you don't need
|
||||
to call `compile_grep_patterns()` because `setup_revisions()` calls it for you.
|
||||
|
||||
NOTE: We could add the same filter via the `append_grep_pattern()` helper if we
|
||||
wanted to, but `append_header_grep_pattern()` adds the `enum grep_context` and
|
||||
`enum grep_pat_token` for us.
|
||||
|
||||
=== Changing the Order
|
||||
|
||||
There are a few ways that we can change the order of the commits during a
|
||||
revision walk. Firstly, we can use the `enum rev_sort_order` to choose from some
|
||||
typical orderings.
|
||||
|
||||
`topo_order` is the same as `git log --topo-order`: we avoid showing a parent
|
||||
before all of its children have been shown, and we avoid mixing commits which
|
||||
are in different lines of history. (`git help log`'s section on `--topo-order`
|
||||
has a very nice diagram to illustrate this.)
|
||||
|
||||
Let's see what happens when we run with `REV_SORT_BY_COMMIT_DATE` as opposed to
|
||||
`REV_SORT_BY_AUTHOR_DATE`. Add the following:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv,
|
||||
const char *prefix, struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
rev->topo_order = 1;
|
||||
rev->sort_order = REV_SORT_BY_COMMIT_DATE;
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Let's output this into a file so we can easily diff it with the walk sorted by
|
||||
author date.
|
||||
|
||||
----
|
||||
$ make
|
||||
$ ./bin-wrappers/git walken > commit-date.txt
|
||||
----
|
||||
|
||||
Then, let's sort by author date and run it again.
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv,
|
||||
const char *prefix, struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
rev->topo_order = 1;
|
||||
rev->sort_order = REV_SORT_BY_AUTHOR_DATE;
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
----
|
||||
$ make
|
||||
$ ./bin-wrappers/git walken > author-date.txt
|
||||
----
|
||||
|
||||
Finally, compare the two. This is a little less helpful without object names or
|
||||
dates, but hopefully we get the idea.
|
||||
|
||||
----
|
||||
$ diff -u commit-date.txt author-date.txt
|
||||
----
|
||||
|
||||
This display indicates that commits can be reordered after they're written, for
|
||||
example with `git rebase`.
|
||||
|
||||
Let's try one more reordering of commits. `rev_info` exposes a `reverse` flag.
|
||||
Set that flag somewhere inside of `final_rev_info_setup()`:
|
||||
|
||||
----
|
||||
static void final_rev_info_setup(int argc, const char **argv, const char *prefix,
|
||||
struct rev_info *rev)
|
||||
{
|
||||
...
|
||||
|
||||
rev->reverse = 1;
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
Run your walk again and note the difference in order. (If you remove the grep
|
||||
pattern, you should see the last commit this call gives you as your current
|
||||
HEAD.)
|
||||
|
||||
== Basic Object Walk
|
||||
|
||||
So far we've been walking only commits. But Git has more types of objects than
|
||||
that! Let's see if we can walk _all_ objects, and find out some information
|
||||
about each one.
|
||||
|
||||
We can base our work on an example. `git pack-objects` prepares all kinds of
|
||||
objects for packing into a bitmap or packfile. The work we are interested in
|
||||
resides in `builtins/pack-objects.c:get_object_list()`; examination of that
|
||||
function shows that the all-object walk is being performed by
|
||||
`traverse_commit_list()` or `traverse_commit_list_filtered()`. Those two
|
||||
functions reside in `list-objects.c`; examining the source shows that, despite
|
||||
the name, these functions traverse all kinds of objects. Let's have a look at
|
||||
the arguments to `traverse_commit_list_filtered()`, which are a superset of the
|
||||
arguments to the unfiltered version.
|
||||
|
||||
- `struct list_objects_filter_options *filter_options`: This is a struct which
|
||||
stores a filter-spec as outlined in `Documentation/rev-list-options.txt`.
|
||||
- `struct rev_info *revs`: This is the `rev_info` used for the walk.
|
||||
- `show_commit_fn show_commit`: A callback which will be used to handle each
|
||||
individual commit object.
|
||||
- `show_object_fn show_object`: A callback which will be used to handle each
|
||||
non-commit object (so each blob, tree, or tag).
|
||||
- `void *show_data`: A context buffer which is passed in turn to `show_commit`
|
||||
and `show_object`.
|
||||
- `struct oidset *omitted`: A linked-list of object IDs which the provided
|
||||
filter caused to be omitted.
|
||||
|
||||
It looks like this `traverse_commit_list_filtered()` uses callbacks we provide
|
||||
instead of needing us to call it repeatedly ourselves. Cool! Let's add the
|
||||
callbacks first.
|
||||
|
||||
For the sake of this tutorial, we'll simply keep track of how many of each kind
|
||||
of object we find. At file scope in `builtin/walken.c` add the following
|
||||
tracking variables:
|
||||
|
||||
----
|
||||
static int commit_count;
|
||||
static int tag_count;
|
||||
static int blob_count;
|
||||
static int tree_count;
|
||||
----
|
||||
|
||||
Commits are handled by a different callback than other objects; let's do that
|
||||
one first:
|
||||
|
||||
----
|
||||
static void walken_show_commit(struct commit *cmt, void *buf)
|
||||
{
|
||||
commit_count++;
|
||||
}
|
||||
----
|
||||
|
||||
The `cmt` argument is fairly self-explanatory. But it's worth mentioning that
|
||||
the `buf` argument is actually the context buffer that we can provide to the
|
||||
traversal calls - `show_data`, which we mentioned a moment ago.
|
||||
|
||||
Since we have the `struct commit` object, we can look at all the same parts that
|
||||
we looked at in our earlier commit-only walk. For the sake of this tutorial,
|
||||
though, we'll just increment the commit counter and move on.
|
||||
|
||||
The callback for non-commits is a little different, as we'll need to check
|
||||
which kind of object we're dealing with:
|
||||
|
||||
----
|
||||
static void walken_show_object(struct object *obj, const char *str, void *buf)
|
||||
{
|
||||
switch (obj->type) {
|
||||
case OBJ_TREE:
|
||||
tree_count++;
|
||||
break;
|
||||
case OBJ_BLOB:
|
||||
blob_count++;
|
||||
break;
|
||||
case OBJ_TAG:
|
||||
tag_count++;
|
||||
break;
|
||||
case OBJ_COMMIT:
|
||||
BUG("unexpected commit object in walken_show_object\n");
|
||||
default:
|
||||
BUG("unexpected object type %s in walken_show_object\n",
|
||||
type_name(obj->type));
|
||||
}
|
||||
}
|
||||
----
|
||||
|
||||
Again, `obj` is fairly self-explanatory, and we can guess that `buf` is the same
|
||||
context pointer that `walken_show_commit()` receives: the `show_data` argument
|
||||
to `traverse_commit_list()` and `traverse_commit_list_filtered()`. Finally,
|
||||
`str` contains the name of the object, which ends up being something like
|
||||
`foo.txt` (blob), `bar/baz` (tree), or `v1.2.3` (tag).
|
||||
|
||||
To help assure us that we aren't double-counting commits, we'll include some
|
||||
complaining if a commit object is routed through our non-commit callback; we'll
|
||||
also complain if we see an invalid object type. Since those two cases should be
|
||||
unreachable, and would only change in the event of a semantic change to the Git
|
||||
codebase, we complain by using `BUG()` - which is a signal to a developer that
|
||||
the change they made caused unintended consequences, and the rest of the
|
||||
codebase needs to be updated to understand that change. `BUG()` is not intended
|
||||
to be seen by the public, so it is not localized.
|
||||
|
||||
Our main object walk implementation is substantially different from our commit
|
||||
walk implementation, so let's make a new function to perform the object walk. We
|
||||
can perform setup which is applicable to all objects here, too, to keep separate
|
||||
from setup which is applicable to commit-only walks.
|
||||
|
||||
We'll start by enabling all types of objects in the `struct rev_info`. We'll
|
||||
also turn on `tree_blobs_in_commit_order`, which means that we will walk a
|
||||
commit's tree and everything it points to immediately after we find each commit,
|
||||
as opposed to waiting for the end and walking through all trees after the commit
|
||||
history has been discovered. With the appropriate settings configured, we are
|
||||
ready to call `prepare_revision_walk()`.
|
||||
|
||||
----
|
||||
static void walken_object_walk(struct rev_info *rev)
|
||||
{
|
||||
rev->tree_objects = 1;
|
||||
rev->blob_objects = 1;
|
||||
rev->tag_objects = 1;
|
||||
rev->tree_blobs_in_commit_order = 1;
|
||||
|
||||
if (prepare_revision_walk(rev))
|
||||
die(_("revision walk setup failed"));
|
||||
|
||||
commit_count = 0;
|
||||
tag_count = 0;
|
||||
blob_count = 0;
|
||||
tree_count = 0;
|
||||
----
|
||||
|
||||
Let's start by calling just the unfiltered walk and reporting our counts.
|
||||
Complete your implementation of `walken_object_walk()`:
|
||||
|
||||
----
|
||||
traverse_commit_list(rev, walken_show_commit, walken_show_object, NULL);
|
||||
|
||||
printf("commits %d\nblobs %d\ntags %d\ntrees %d\n", commit_count,
|
||||
blob_count, tag_count, tree_count);
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: This output is intended to be machine-parsed. Therefore, we are not
|
||||
sending it to `trace_printf()`, and we are not localizing it - we need scripts
|
||||
to be able to count on the formatting to be exactly the way it is shown here.
|
||||
If we were intending this output to be read by humans, we would need to localize
|
||||
it with `_()`.
|
||||
|
||||
Finally, we'll ask `cmd_walken()` to use the object walk instead. Discussing
|
||||
command line options is out of scope for this tutorial, so we'll just hardcode
|
||||
a branch we can change at compile time. Where you call `final_rev_info_setup()`
|
||||
and `walken_commit_walk()`, instead branch like so:
|
||||
|
||||
----
|
||||
if (1) {
|
||||
add_head_to_pending(&rev);
|
||||
walken_object_walk(&rev);
|
||||
} else {
|
||||
final_rev_info_setup(argc, argv, prefix, &rev);
|
||||
walken_commit_walk(&rev);
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: For simplicity, we've avoided all the filters and sorts we applied in
|
||||
`final_rev_info_setup()` and simply added `HEAD` to our pending queue. If you
|
||||
want, you can certainly use the filters we added before by moving
|
||||
`final_rev_info_setup()` out of the conditional and removing the call to
|
||||
`add_head_to_pending()`.
|
||||
|
||||
Now we can try to run our command! It should take noticeably longer than the
|
||||
commit walk, but an examination of the output will give you an idea why. Your
|
||||
output should look similar to this example, but with different counts:
|
||||
|
||||
----
|
||||
Object walk completed. Found 55733 commits, 100274 blobs, 0 tags, and 104210 trees.
|
||||
----
|
||||
|
||||
This makes sense. We have more trees than commits because the Git project has
|
||||
lots of subdirectories which can change, plus at least one tree per commit. We
|
||||
have no tags because we started on a commit (`HEAD`) and while tags can point to
|
||||
commits, commits can't point to tags.
|
||||
|
||||
NOTE: You will have different counts when you run this yourself! The number of
|
||||
objects grows along with the Git project.
|
||||
|
||||
=== Adding a Filter
|
||||
|
||||
There are a handful of filters that we can apply to the object walk laid out in
|
||||
`Documentation/rev-list-options.txt`. These filters are typically useful for
|
||||
operations such as creating packfiles or performing a partial clone. They are
|
||||
defined in `list-objects-filter-options.h`. For the purposes of this tutorial we
|
||||
will use the "tree:1" filter, which causes the walk to omit all trees and blobs
|
||||
which are not directly referenced by commits reachable from the commit in
|
||||
`pending` when the walk begins. (`pending` is the list of objects which need to
|
||||
be traversed during a walk; you can imagine a breadth-first tree traversal to
|
||||
help understand. In our case, that means we omit trees and blobs not directly
|
||||
referenced by `HEAD` or `HEAD`'s history, because we begin the walk with only
|
||||
`HEAD` in the `pending` list.)
|
||||
|
||||
First, we'll need to `#include "list-objects-filter-options.h`" and set up the
|
||||
`struct list_objects_filter_options` at the top of the function.
|
||||
|
||||
----
|
||||
static void walken_object_walk(struct rev_info *rev)
|
||||
{
|
||||
struct list_objects_filter_options filter_options = {};
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
For now, we are not going to track the omitted objects, so we'll replace those
|
||||
parameters with `NULL`. For the sake of simplicity, we'll add a simple
|
||||
build-time branch to use our filter or not. Replace the line calling
|
||||
`traverse_commit_list()` with the following, which will remind us which kind of
|
||||
walk we've just performed:
|
||||
|
||||
----
|
||||
if (0) {
|
||||
/* Unfiltered: */
|
||||
trace_printf(_("Unfiltered object walk.\n"));
|
||||
traverse_commit_list(rev, walken_show_commit,
|
||||
walken_show_object, NULL);
|
||||
} else {
|
||||
trace_printf(
|
||||
_("Filtered object walk with filterspec 'tree:1'.\n"));
|
||||
parse_list_objects_filter(&filter_options, "tree:1");
|
||||
|
||||
traverse_commit_list_filtered(&filter_options, rev,
|
||||
walken_show_commit, walken_show_object, NULL, NULL);
|
||||
}
|
||||
----
|
||||
|
||||
`struct list_objects_filter_options` is usually built directly from a command
|
||||
line argument, so the module provides an easy way to build one from a string.
|
||||
Even though we aren't taking user input right now, we can still build one with
|
||||
a hardcoded string using `parse_list_objects_filter()`.
|
||||
|
||||
With the filter spec "tree:1", we are expecting to see _only_ the root tree for
|
||||
each commit; therefore, the tree object count should be less than or equal to
|
||||
the number of commits. (For an example of why that's true: `git commit --revert`
|
||||
points to the same tree object as its grandparent.)
|
||||
|
||||
=== Counting Omitted Objects
|
||||
|
||||
We also have the capability to enumerate all objects which were omitted by a
|
||||
filter, like with `git log --filter=<spec> --filter-print-omitted`. Asking
|
||||
`traverse_commit_list_filtered()` to populate the `omitted` list means that our
|
||||
object walk does not perform any better than an unfiltered object walk; all
|
||||
reachable objects are walked in order to populate the list.
|
||||
|
||||
First, add the `struct oidset` and related items we will use to iterate it:
|
||||
|
||||
----
|
||||
static void walken_object_walk(
|
||||
...
|
||||
|
||||
struct oidset omitted;
|
||||
struct oidset_iter oit;
|
||||
struct object_id *oid = NULL;
|
||||
int omitted_count = 0;
|
||||
oidset_init(&omitted, 0);
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
Modify the call to `traverse_commit_list_filtered()` to include your `omitted`
|
||||
object:
|
||||
|
||||
----
|
||||
...
|
||||
|
||||
traverse_commit_list_filtered(&filter_options, rev,
|
||||
walken_show_commit, walken_show_object, NULL, &omitted);
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
Then, after your traversal, the `oidset` traversal is pretty straightforward.
|
||||
Count all the objects within and modify the print statement:
|
||||
|
||||
----
|
||||
/* Count the omitted objects. */
|
||||
oidset_iter_init(&omitted, &oit);
|
||||
|
||||
while ((oid = oidset_iter_next(&oit)))
|
||||
omitted_count++;
|
||||
|
||||
printf("commits %d\nblobs %d\ntags %d\ntrees%d\nomitted %d\n",
|
||||
commit_count, blob_count, tag_count, tree_count, omitted_count);
|
||||
----
|
||||
|
||||
By running your walk with and without the filter, you should find that the total
|
||||
object count in each case is identical. You can also time each invocation of
|
||||
the `walken` subcommand, with and without `omitted` being passed in, to confirm
|
||||
to yourself the runtime impact of tracking all omitted objects.
|
||||
|
||||
=== Changing the Order
|
||||
|
||||
Finally, let's demonstrate that you can also reorder walks of all objects, not
|
||||
just walks of commits. First, we'll make our handlers chattier - modify
|
||||
`walken_show_commit()` and `walken_show_object()` to print the object as they
|
||||
go:
|
||||
|
||||
----
|
||||
static void walken_show_commit(struct commit *cmt, void *buf)
|
||||
{
|
||||
trace_printf("commit: %s\n", oid_to_hex(&cmt->object.oid));
|
||||
commit_count++;
|
||||
}
|
||||
|
||||
static void walken_show_object(struct object *obj, const char *str, void *buf)
|
||||
{
|
||||
trace_printf("%s: %s\n", type_name(obj->type), oid_to_hex(&obj->oid));
|
||||
|
||||
...
|
||||
}
|
||||
----
|
||||
|
||||
NOTE: Since we will be examining this output directly as humans, we'll use
|
||||
`trace_printf()` here. Additionally, since this change introduces a significant
|
||||
number of printed lines, using `trace_printf()` will allow us to easily silence
|
||||
those lines without having to recompile.
|
||||
|
||||
(Leave the counter increment logic in place.)
|
||||
|
||||
With only that change, run again (but save yourself some scrollback):
|
||||
|
||||
----
|
||||
$ GIT_TRACE=1 ./bin-wrappers/git walken | head -n 10
|
||||
----
|
||||
|
||||
Take a look at the top commit with `git show` and the object ID you printed; it
|
||||
should be the same as the output of `git show HEAD`.
|
||||
|
||||
Next, let's change a setting on our `struct rev_info` within
|
||||
`walken_object_walk()`. Find where you're changing the other settings on `rev`,
|
||||
such as `rev->tree_objects` and `rev->tree_blobs_in_commit_order`, and add the
|
||||
`reverse` setting at the bottom:
|
||||
|
||||
----
|
||||
...
|
||||
|
||||
rev->tree_objects = 1;
|
||||
rev->blob_objects = 1;
|
||||
rev->tag_objects = 1;
|
||||
rev->tree_blobs_in_commit_order = 1;
|
||||
rev->reverse = 1;
|
||||
|
||||
...
|
||||
----
|
||||
|
||||
Now, run again, but this time, let's grab the last handful of objects instead
|
||||
of the first handful:
|
||||
|
||||
----
|
||||
$ make
|
||||
$ GIT_TRACE=1 ./bin-wrappers git walken | tail -n 10
|
||||
----
|
||||
|
||||
The last commit object given should have the same OID as the one we saw at the
|
||||
top before, and running `git show <oid>` with that OID should give you again
|
||||
the same results as `git show HEAD`. Furthermore, if you run and examine the
|
||||
first ten lines again (with `head` instead of `tail` like we did before applying
|
||||
the `reverse` setting), you should see that now the first commit printed is the
|
||||
initial commit, `e83c5163`.
|
||||
|
||||
== Wrapping Up
|
||||
|
||||
Let's review. In this tutorial, we:
|
||||
|
||||
- Built a commit walk from the ground up
|
||||
- Enabled a grep filter for that commit walk
|
||||
- Changed the sort order of that filtered commit walk
|
||||
- Built an object walk (tags, commits, trees, and blobs) from the ground up
|
||||
- Learned how to add a filter-spec to an object walk
|
||||
- Changed the display order of the filtered object walk
|
@ -251,7 +251,7 @@ Updates in v1.5.0 since v1.4.4 series
|
||||
the repository when that happens.
|
||||
|
||||
|
||||
* Cruft removal
|
||||
* Crufts removal
|
||||
|
||||
- We used to say "old commits are retrievable using reflog and
|
||||
'master@{yesterday}' syntax as long as you haven't run
|
||||
@ -379,7 +379,7 @@ Updates in v1.5.0 since v1.4.4 series
|
||||
- The value of i18n.commitencoding in the originating
|
||||
repository is recorded in the commit object on the "encoding"
|
||||
header, if it is not UTF-8. git-log and friends notice this,
|
||||
and re-encodes the message to the log output encoding when
|
||||
and reencodes the message to the log output encoding when
|
||||
displaying, if they are different. The log output encoding
|
||||
is determined by "git log --encoding=<encoding>",
|
||||
i18n.logoutputencoding configuration, or i18n.commitencoding
|
||||
|
@ -11,7 +11,7 @@ push running this release will issue a big warning when the
|
||||
configuration variable is missing. Please refer to:
|
||||
|
||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -11,7 +11,7 @@ push running this release will issue a big warning when the
|
||||
configuration variable is missing. Please refer to:
|
||||
|
||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -11,7 +11,7 @@ push running this release will issue a big warning when the
|
||||
configuration variable is missing. Please refer to:
|
||||
|
||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -10,7 +10,7 @@ Fixes since v1.6.5.3
|
||||
|
||||
* "git prune-packed" gave progress output even when its standard error is
|
||||
not connected to a terminal; this caused cron jobs that run it to
|
||||
produce cruft.
|
||||
produce crufts.
|
||||
|
||||
* "git pack-objects --all-progress" is an option to ask progress output
|
||||
from write-object phase _if_ progress output were to be produced, and
|
||||
|
@ -22,7 +22,7 @@ push running this release will issue a big warning when the
|
||||
configuration variable is missing. Please refer to:
|
||||
|
||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
@ -64,7 +64,7 @@ users will fare this time.
|
||||
Please refer to:
|
||||
|
||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||
https://lore.kernel.org/git/7vbptlsuyv.fsf@gitster.siamese.dyndns.org/
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition process that already took place so far.
|
||||
|
@ -34,7 +34,7 @@ Fixes since v1.7.0.1
|
||||
* "git status" in 1.7.0 lacked the optimization we used to have in 1.6.X series
|
||||
to speed up scanning of large working tree.
|
||||
|
||||
* "gitweb" did not diagnose parsing errors properly while reading its configuration
|
||||
* "gitweb" did not diagnose parsing errors properly while reading tis configuration
|
||||
file.
|
||||
|
||||
And other minor fixes and documentation updates.
|
||||
|
@ -7,7 +7,7 @@ Fixes since v1.7.10.3
|
||||
* The message file for Swedish translation has been updated a bit.
|
||||
|
||||
* A name taken from mailmap was copied into an internal buffer
|
||||
incorrectly and could overrun the buffer if it is too long.
|
||||
incorrectly and could overun the buffer if it is too long.
|
||||
|
||||
* A malformed commit object that has a header line chomped in the
|
||||
middle could kill git with a NULL pointer dereference.
|
||||
|
@ -25,7 +25,7 @@ Fixes since v1.7.12.2
|
||||
its Accept-Encoding header.
|
||||
|
||||
* "git receive-pack" (the counterpart to "git push") did not give
|
||||
progress output while processing objects it received to the user
|
||||
progress output while processing objects it received to the puser
|
||||
when run over the smart-http protocol.
|
||||
|
||||
* "git status" honored the ignore=dirty settings in .gitmodules but
|
||||
|
@ -22,7 +22,7 @@ Fixes since v1.7.5.2
|
||||
* "git log --stdin path" with an input that has additional pathspec
|
||||
used to corrupt memory.
|
||||
|
||||
* "git send-pack" (hence "git push") over smart-HTTP protocol could
|
||||
* "git send-pack" (hence "git push") over smalt-HTTP protocol could
|
||||
deadlock when the client side pack-object died early.
|
||||
|
||||
* Compressed tarball gitweb generates used to be made with the timestamp
|
||||
|
@ -233,7 +233,7 @@ to them for details).
|
||||
together, misdetected branches.
|
||||
|
||||
* "git receive-pack" (the counterpart to "git push") did not give
|
||||
progress output while processing objects it received to the user
|
||||
progress output while processing objects it received to the puser
|
||||
when run over the smart-http protocol.
|
||||
|
||||
* When you misspell the command name you give to the "exec" action in
|
||||
|
@ -15,7 +15,7 @@ Fixes since v1.8.4
|
||||
in 1.8.4-rc1).
|
||||
|
||||
* "git rebase -i" and other scripted commands were feeding a
|
||||
random, data dependent error message to 'echo' and expecting it
|
||||
random, data dependant error message to 'echo' and expecting it
|
||||
to come out literally.
|
||||
|
||||
* Setting the "submodule.<name>.path" variable to the empty
|
||||
|
@ -58,7 +58,7 @@ Foreign interfaces, subsystems and ports.
|
||||
credential helper interface from Git.pm.
|
||||
|
||||
* Update build for Cygwin 1.[57]. Torsten Bögershausen reports that
|
||||
this is fine with Cygwin 1.7 (cf. <51A606A0.5060101@web.de>) so let's try moving it
|
||||
this is fine with Cygwin 1.7 ($gmane/225824) so let's try moving it
|
||||
ahead.
|
||||
|
||||
* The credential helper to talk to keychain on OS X (in contrib/) has
|
||||
|
@ -13,7 +13,7 @@ Git v2.1.3 Release Notes
|
||||
they are new enough to support the `--output` option.
|
||||
|
||||
* "git pack-objects" forgot to disable the codepath to generate
|
||||
object reachability bitmap when it needs to split the resulting
|
||||
object recheability bitmap when it needs to split the resulting
|
||||
pack.
|
||||
|
||||
* "gitweb" used deprecated CGI::startfrom, which was removed from
|
||||
|
@ -478,7 +478,7 @@ notes for details).
|
||||
* One part of "git am" had an oddball helper function that called
|
||||
stuff from outside "his" as opposed to calling what we have "ours",
|
||||
which was not gender-neutral and also inconsistent with the rest of
|
||||
the system where outside stuff is usually called "theirs" in
|
||||
the system where outside stuff is usuall called "theirs" in
|
||||
contrast to "ours".
|
||||
|
||||
* "git blame file" allowed the lineage of lines in the uncommitted,
|
||||
|
@ -86,7 +86,7 @@ Fixes since v2.10.1
|
||||
by refusing to check out a branch that is already checked out in
|
||||
another worktree. However, this also prevented checking out a
|
||||
branch, which is designated as the primary branch of a bare
|
||||
repository, in a worktree that is connected to the bare
|
||||
reopsitory, in a worktree that is connected to the bare
|
||||
repository. The check has been corrected to allow it.
|
||||
|
||||
* "git rebase" immediately after "git clone" failed to find the fork
|
||||
|
@ -104,7 +104,7 @@ Fixes since v2.11
|
||||
"git difftool --dir-diff" from a subdirectory never worked. This
|
||||
has been fixed.
|
||||
|
||||
* "git p4" that tracks multiple p4 paths imported a single changelist
|
||||
* "git p4" that tracks multile p4 paths imported a single changelist
|
||||
that touches files in these multiple paths as one commit, followed
|
||||
by many empty commits. This has been fixed.
|
||||
|
||||
|
@ -315,7 +315,7 @@ notes for details).
|
||||
"git difftool --dir-diff" from a subdirectory never worked. This
|
||||
has been fixed.
|
||||
|
||||
* "git p4" that tracks multiple p4 paths imported a single changelist
|
||||
* "git p4" that tracks multile p4 paths imported a single changelist
|
||||
that touches files in these multiple paths as one commit, followed
|
||||
by many empty commits. This has been fixed.
|
||||
|
||||
|
@ -177,7 +177,7 @@ UI, Workflows & Features
|
||||
been changed to enable "--decorate".
|
||||
|
||||
* The output from "git status --short" has been extended to show
|
||||
various kinds of dirtiness in submodules differently; instead of to
|
||||
various kinds of dirtyness in submodules differently; instead of to
|
||||
"M" for modified, 'm' and '?' can be shown to signal changes only
|
||||
to the working tree of the submodule but not the commit that is
|
||||
checked out.
|
||||
|
@ -25,7 +25,7 @@ Fixes since v2.13.2
|
||||
* The code to pick up and execute command alias definition from the
|
||||
configuration used to switch to the top of the working tree and
|
||||
then come back when the expanded alias was executed, which was
|
||||
unnecessarily complex. Attempt to simplify the logic by using the
|
||||
unnecessarilyl complex. Attempt to simplify the logic by using the
|
||||
early-config mechanism that does not chdir around.
|
||||
|
||||
* "git add -p" were updated in 2.12 timeframe to cope with custom
|
||||
@ -35,7 +35,7 @@ Fixes since v2.13.2
|
||||
* Fix a recent regression to "git rebase -i" and add tests that would
|
||||
have caught it and others.
|
||||
|
||||
* An unaligned 32-bit access in pack-bitmap code has been corrected.
|
||||
* An unaligned 32-bit access in pack-bitmap code ahs been corrected.
|
||||
|
||||
* Tighten error checks for invalid "git apply" input.
|
||||
|
||||
|
@ -141,7 +141,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
* Some platforms have ulong that is smaller than time_t, and our
|
||||
historical use of ulong for timestamp would mean they cannot
|
||||
represent some timestamp that the platform allows. Invent a
|
||||
separate and dedicated timestamp_t (so that we can distinguish
|
||||
separate and dedicated timestamp_t (so that we can distingiuish
|
||||
timestamps and a vanilla ulongs, which along is already a good
|
||||
move), and then declare uintmax_t is the type to be used as the
|
||||
timestamp_t.
|
||||
@ -442,7 +442,7 @@ notes for details).
|
||||
* The code to pick up and execute command alias definition from the
|
||||
configuration used to switch to the top of the working tree and
|
||||
then come back when the expanded alias was executed, which was
|
||||
unnecessarily complex. Attempt to simplify the logic by using the
|
||||
unnecessarilyl complex. Attempt to simplify the logic by using the
|
||||
early-config mechanism that does not chdir around.
|
||||
|
||||
* Fix configuration codepath to pay proper attention to commondir
|
||||
|
@ -407,7 +407,7 @@ Fixes since v2.15
|
||||
(merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).
|
||||
|
||||
* Amending commits in git-gui broke the author name that is non-ascii
|
||||
due to incorrect encoding conversion.
|
||||
due to incorrect enconding conversion.
|
||||
|
||||
* Recent update to the submodule configuration code broke "diff-tree"
|
||||
by accidentally stopping to read from the index upfront.
|
||||
|
@ -24,7 +24,7 @@ Fixes since v2.16.2
|
||||
|
||||
* The http tracing code, often used to debug connection issues,
|
||||
learned to redact potentially sensitive information from its output
|
||||
so that it can be more safely shareable.
|
||||
so that it can be more safely sharable.
|
||||
|
||||
* Crash fix for a corner case where an error codepath tried to unlock
|
||||
what it did not acquire lock on.
|
||||
|
@ -216,7 +216,7 @@ Fixes since v2.16
|
||||
|
||||
* The http tracing code, often used to debug connection issues,
|
||||
learned to redact potentially sensitive information from its output
|
||||
so that it can be more safely shareable.
|
||||
so that it can be more safely sharable.
|
||||
(merge 8ba18e6fa4 jt/http-redact-cookies later to maint).
|
||||
|
||||
* Crash fix for a corner case where an error codepath tried to unlock
|
||||
|
16
Documentation/RelNotes/2.17.6.txt
Normal file
16
Documentation/RelNotes/2.17.6.txt
Normal file
@ -0,0 +1,16 @@
|
||||
Git v2.17.6 Release Notes
|
||||
=========================
|
||||
|
||||
This release addresses the security issues CVE-2021-21300.
|
||||
|
||||
Fixes since v2.17.5
|
||||
-------------------
|
||||
|
||||
* CVE-2021-21300:
|
||||
On case-insensitive file systems with support for symbolic links,
|
||||
if Git is configured globally to apply delay-capable clean/smudge
|
||||
filters (such as Git LFS), Git could be fooled into running
|
||||
remote code during a clone.
|
||||
|
||||
Credit for finding and fixing this vulnerability goes to Matheus
|
||||
Tavares, helped by Johannes Schindelin.
|
@ -179,7 +179,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
(merge 00a3da2a13 nd/remove-ignore-env-field later to maint).
|
||||
|
||||
* Code to find the length to uniquely abbreviate object names based
|
||||
on packfile content, which is a relatively recent addition, has been
|
||||
on packfile content, which is a relatively recent addtion, has been
|
||||
optimized to use the same fan-out table.
|
||||
|
||||
* The mechanism to use parse-options API to automate the command line
|
||||
|
6
Documentation/RelNotes/2.18.5.txt
Normal file
6
Documentation/RelNotes/2.18.5.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Git v2.18.5 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges up the fixes that appear in v2.17.6 to address
|
||||
the security issue CVE-2021-21300; see the release notes for that
|
||||
version for details.
|
@ -106,7 +106,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
* The conversion to pass "the_repository" and then "a_repository"
|
||||
throughout the object access API continues.
|
||||
|
||||
* Continuing with the idea to programmatically enumerate various
|
||||
* Continuing with the idea to programatically enumerate various
|
||||
pieces of data required for command line completion, teach the
|
||||
codebase to report the list of configuration variables
|
||||
subcommands care about to help complete them.
|
||||
|
6
Documentation/RelNotes/2.19.6.txt
Normal file
6
Documentation/RelNotes/2.19.6.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Git v2.19.6 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges up the fixes that appear in v2.17.6 and
|
||||
v2.18.5 to address the security issue CVE-2021-21300; see the
|
||||
release notes for these versions for details.
|
@ -119,7 +119,7 @@ UI, Workflows & Features
|
||||
alias expansion.
|
||||
|
||||
* The documentation of "git gc" has been updated to mention that it
|
||||
is no longer limited to "pruning away cruft" but also updates
|
||||
is no longer limited to "pruning away crufts" but also updates
|
||||
ancillary files like commit-graph as a part of repository
|
||||
optimization.
|
||||
|
||||
|
6
Documentation/RelNotes/2.20.5.txt
Normal file
6
Documentation/RelNotes/2.20.5.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Git v2.20.5 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges up the fixes that appear in v2.17.6, v2.18.5
|
||||
and v2.19.6 to address the security issue CVE-2021-21300; see
|
||||
the release notes for these versions for details.
|
6
Documentation/RelNotes/2.21.4.txt
Normal file
6
Documentation/RelNotes/2.21.4.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Git v2.21.4 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges up the fixes that appear in v2.17.6, v2.18.5,
|
||||
v2.19.6 and v2.20.5 to address the security issue CVE-2021-21300;
|
||||
see the release notes for these versions for details.
|
7
Documentation/RelNotes/2.22.5.txt
Normal file
7
Documentation/RelNotes/2.22.5.txt
Normal file
@ -0,0 +1,7 @@
|
||||
Git v2.22.5 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges up the fixes that appear in v2.17.6,
|
||||
v2.18.5, v2.19.6, v2.20.5 and v2.21.4 to address the security
|
||||
issue CVE-2021-21300; see the release notes for these versions
|
||||
for details.
|
7
Documentation/RelNotes/2.23.4.txt
Normal file
7
Documentation/RelNotes/2.23.4.txt
Normal file
@ -0,0 +1,7 @@
|
||||
Git v2.23.4 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges up the fixes that appear in v2.17.6, v2.18.5,
|
||||
v2.19.6, v2.20.5, v2.21.4 and v2.22.5 to address the security
|
||||
issue CVE-2021-21300; see the release notes for these versions
|
||||
for details.
|
@ -1,398 +0,0 @@
|
||||
Git 2.24 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.23
|
||||
-------------------
|
||||
|
||||
Backward compatibility note
|
||||
|
||||
* "filter-branch" is showing its age and alternatives are available.
|
||||
From this release, we started to discourage its use and hint
|
||||
people about filter-repo.
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* We now have an active interim maintainer for the Git-Gui part of
|
||||
the system. Praise and thank Pratyush Yadav for volunteering.
|
||||
|
||||
* The command line parser learned "--end-of-options" notation; the
|
||||
standard convention for scripters to have hardcoded set of options
|
||||
first on the command line, and force the command to treat end-user
|
||||
input as non-options, has been to use "--" as the delimiter, but
|
||||
that would not work for commands that use "--" as a delimiter
|
||||
between revs and pathspec.
|
||||
|
||||
* A mechanism to affect the default setting for a (related) group of
|
||||
configuration variables is introduced.
|
||||
|
||||
* "git fetch" learned "--set-upstream" option to help those who first
|
||||
clone from their private fork they intend to push to, add the true
|
||||
upstream via "git remote add" and then "git fetch" from it.
|
||||
|
||||
* Device-tree files learned their own userdiff patterns.
|
||||
(merge 3c81760bc6 sb/userdiff-dts later to maint).
|
||||
|
||||
* "git rebase --rebase-merges" learned to drive different merge
|
||||
strategies and pass strategy specific options to them.
|
||||
|
||||
* A new "pre-merge-commit" hook has been introduced.
|
||||
|
||||
* Command line completion updates for "git -c var.name=val" have been
|
||||
added.
|
||||
|
||||
* The lazy clone machinery has been taught that there can be more
|
||||
than one promisor remote and consult them in order when downloading
|
||||
missing objects on demand.
|
||||
|
||||
* The list-objects-filter API (used to create a sparse/lazy clone)
|
||||
learned to take a combined filter specification.
|
||||
|
||||
* The documentation and tests for "git format-patch" have been
|
||||
cleaned up.
|
||||
|
||||
* On Windows, the root level of UNC share is now allowed to be used
|
||||
just like any other directory.
|
||||
|
||||
* The command line completion support (in contrib/) learned about the
|
||||
"--skip" option of "git revert" and "git cherry-pick".
|
||||
|
||||
* "git rebase --keep-base <upstream>" tries to find the original base
|
||||
of the topic being rebased and rebase on top of that same base,
|
||||
which is useful when running the "git rebase -i" (and its limited
|
||||
variant "git rebase -x").
|
||||
|
||||
The command also has learned to fast-forward in more cases where it
|
||||
can instead of replaying to recreate identical commits.
|
||||
|
||||
* A configuration variable tells "git fetch" to write the commit
|
||||
graph after finishing.
|
||||
|
||||
* "git add -i" has been taught to show the total number of hunks and
|
||||
the hunks that has been processed so far when showing prompts.
|
||||
|
||||
* "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
|
||||
submodules, but this did not apply to "git fetch --multiple" that
|
||||
fetches from multiple remote repositories. It now does.
|
||||
|
||||
* The installation instruction for zsh completion script (in
|
||||
contrib/) has been a bit improved.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* The code to write commit-graph over given commit object names has
|
||||
been made a bit more robust.
|
||||
|
||||
* The first line of verbose output from each test piece now carries
|
||||
the test name and number to help scanning with eyeballs.
|
||||
|
||||
* Further clean-up of the initialization code.
|
||||
|
||||
* xmalloc() used to have a mechanism to ditch memory and address
|
||||
space resources as the last resort upon seeing an allocation
|
||||
failure from the underlying malloc(), which made the code complex
|
||||
and thread-unsafe with dubious benefit, as major memory resource
|
||||
users already do limit their uses with various other mechanisms.
|
||||
It has been simplified away.
|
||||
|
||||
* Unnecessary full-tree diff in "git log -L" machinery has been
|
||||
optimized away.
|
||||
|
||||
* The http transport lacked some optimization the native transports
|
||||
learned to avoid unnecessary ref advertisement, which has been
|
||||
corrected.
|
||||
|
||||
* Preparation for SHA-256 upgrade continues in the test department.
|
||||
(merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).
|
||||
|
||||
* The memory ownership model of the "git fast-import" got
|
||||
straightened out.
|
||||
|
||||
* Output from trace2 subsystem is formatted more prettily now.
|
||||
|
||||
* The internal code originally invented for ".gitignore" processing
|
||||
got reshuffled and renamed to make it less tied to "excluding" and
|
||||
stress more that it is about "matching", as it has been reused for
|
||||
things like sparse checkout specification that want to check if a
|
||||
path is "included".
|
||||
|
||||
* "git stash" learned to write refreshed index back to disk.
|
||||
|
||||
* Coccinelle checks are done on more source files than before now.
|
||||
|
||||
* The cache-tree code has been taught to be less aggressive in
|
||||
attempting to see if a tree object it computed already exists in
|
||||
the repository.
|
||||
|
||||
* The code to parse and use the commit-graph file has been made more
|
||||
robust against corrupted input.
|
||||
|
||||
* The hg-to-git script (in contrib/) has been updated to work with
|
||||
Python 3.
|
||||
|
||||
* Update the way build artifacts in t/helper/ directory are ignored.
|
||||
|
||||
* Preparation for SHA-256 upgrade continues.
|
||||
|
||||
* "git log --graph" for an octopus merge is sometimes colored
|
||||
incorrectly, which is demonstrated and documented but not yet
|
||||
fixed.
|
||||
|
||||
* The trace2 output, when sending them to files in a designated
|
||||
directory, can populate the directory with too many files; a
|
||||
mechanism is introduced to set the maximum number of files and
|
||||
discard further logs when the maximum is reached.
|
||||
|
||||
* We have adopted a Code-of-conduct document.
|
||||
(merge 3f9ef874a7 jk/coc later to maint).
|
||||
|
||||
|
||||
Fixes since v2.23
|
||||
-----------------
|
||||
|
||||
* "git grep --recurse-submodules" that looks at the working tree
|
||||
files looked at the contents in the index in submodules, instead of
|
||||
files in the working tree.
|
||||
(merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).
|
||||
|
||||
* Codepaths to walk tree objects have been audited for integer
|
||||
overflows and hardened.
|
||||
(merge 5aa02f9868 jk/tree-walk-overflow later to maint).
|
||||
|
||||
* "git pack-refs" can lose refs that are created while running, which
|
||||
is getting corrected.
|
||||
(merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).
|
||||
|
||||
* "git checkout" and "git restore" to re-populate the index from a
|
||||
tree-ish (typically HEAD) did not work correctly for a path that
|
||||
was removed and then added again with the intent-to-add bit, when
|
||||
the corresponding working tree file was empty. This has been
|
||||
corrected.
|
||||
|
||||
* Compilation fix.
|
||||
(merge 70597e8386 rs/nedalloc-fixlets later to maint).
|
||||
|
||||
* "git gui" learned to call the clean-up procedure before exiting.
|
||||
(merge 0d88f3d2c5 py/git-gui-do-quit later to maint).
|
||||
|
||||
* We promoted the "indent heuristics" that decides where to split
|
||||
diff hunks from experimental to the default a few years ago, but
|
||||
some stale documentation still marked it as experimental, which has
|
||||
been corrected.
|
||||
(merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).
|
||||
|
||||
* Fix a mismerge that happened in 2.22 timeframe.
|
||||
(merge acb7da05ac en/checkout-mismerge-fix later to maint).
|
||||
|
||||
* "git archive" recorded incorrect length in extended pax header in
|
||||
some corner cases, which has been corrected.
|
||||
(merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).
|
||||
|
||||
* On-demand object fetching in lazy clone incorrectly tried to fetch
|
||||
commits from submodule projects, while still working in the
|
||||
superproject, which has been corrected.
|
||||
(merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).
|
||||
|
||||
* Prepare get_short_oid() codepath to be thread-safe.
|
||||
(merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).
|
||||
|
||||
* "for-each-ref" and friends that show refs did not protect themselves
|
||||
against ancient tags that did not record tagger names when asked to
|
||||
show "%(taggername)", which have been corrected.
|
||||
(merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).
|
||||
|
||||
* The "git am" based backend of "git rebase" ignored the result of
|
||||
updating ".gitattributes" done in one step when replaying
|
||||
subsequent steps.
|
||||
(merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).
|
||||
|
||||
* Tell cURL library to use the same malloc() implementation, with the
|
||||
xmalloc() wrapper, as the rest of the system, for consistency.
|
||||
(merge 93b980e58f cb/curl-use-xmalloc later to maint).
|
||||
|
||||
* Build fix to adjust .gitignore to unignore a path that we started to track.
|
||||
(merge aac6ff7b5b js/visual-studio later to maint).
|
||||
|
||||
* A few implementation fixes in the notes API.
|
||||
(merge 60fe477a0b mh/notes-duplicate-entries later to maint).
|
||||
|
||||
* Fix an earlier regression to "git push --all" which should have
|
||||
been forbidden when the target remote repository is set to be a
|
||||
mirror.
|
||||
(merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).
|
||||
|
||||
* Fix an earlier regression in the test suite, which mistakenly
|
||||
stopped running HTTPD tests.
|
||||
(merge 3960290675 sg/git-test-boolean later to maint).
|
||||
|
||||
* "git rebase --autostash <upstream> <branch>", when <branch> is
|
||||
different from the current branch, incorrectly moved the tip of the
|
||||
current branch, which has been corrected.
|
||||
(merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).
|
||||
|
||||
* Update support for Asciidoctor documentation toolchain.
|
||||
(merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).
|
||||
|
||||
* Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
|
||||
no longer works with the older one.
|
||||
(merge f6461b82b9 bc/doc-use-docbook-5 later to maint).
|
||||
|
||||
* The markup used in user-manual has been updated to work better with
|
||||
asciidoctor.
|
||||
(merge c4d2f6143a ma/user-manual-markup-update later to maint).
|
||||
|
||||
* Make sure the grep machinery does not abort when seeing a payload
|
||||
that is not UTF-8 even when JIT is not in use with PCRE1.
|
||||
(merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).
|
||||
|
||||
* The name of the blob object that stores the filter specification
|
||||
for sparse cloning/fetching was interpreted in a wrong place in the
|
||||
code, causing Git to abort.
|
||||
|
||||
* "git log --decorate-refs-exclude=<pattern>" was incorrectly
|
||||
overruled when the "--simplify-by-decoration" option is used, which
|
||||
has been corrected.
|
||||
(merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).
|
||||
|
||||
* The "upload-pack" (the counterpart of "git fetch") needs to disable
|
||||
commit-graph when responding to a shallow clone/fetch request, but
|
||||
the way this was done made Git panic, which has been corrected.
|
||||
|
||||
* The object traversal machinery has been optimized not to load tree
|
||||
objects when we are only interested in commit history.
|
||||
(merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).
|
||||
|
||||
* The object name parser for "Nth parent" syntax has been made more
|
||||
robust against integer overflows.
|
||||
(merge 59fa5f5a25 rs/nth-parent-parse later to maint).
|
||||
|
||||
* The code used in following tags in "git fetch" has been optimized.
|
||||
(merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).
|
||||
|
||||
* Regression fix for progress output.
|
||||
(merge 2bb74b53a4 sg/progress-fix later to maint).
|
||||
|
||||
* A bug in merge-recursive code that triggers when a branch with a
|
||||
symbolic link is merged with a branch that replaces it with a
|
||||
directory has been fixed.
|
||||
(merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).
|
||||
|
||||
* The rename detection logic sorts a list of rename source candidates
|
||||
by similarity to pick the best candidate, which means that a tie
|
||||
between sources with the same similarity is broken by the original
|
||||
location in the original candidate list (which is sorted by path).
|
||||
Force the sorting by similarity done with a stable sort, which is
|
||||
not promised by system supplied qsort(3), to ensure consistent
|
||||
results across platforms.
|
||||
(merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).
|
||||
|
||||
* The code to skip "UTF" and "UTF-" prefix, when computing an advice
|
||||
message, did not work correctly when the prefix was "UTF", which
|
||||
has been fixed.
|
||||
(merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).
|
||||
|
||||
* The author names taken from SVN repositories may have extra leading
|
||||
or trailing whitespaces, which are now munged away.
|
||||
(merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).
|
||||
|
||||
* "git rebase -i" showed a wrong HEAD while "reword" open the editor.
|
||||
(merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).
|
||||
|
||||
* A few simplification and bugfixes to PCRE interface.
|
||||
(merge c581e4a749 ab/pcre-jit-fixes later to maint).
|
||||
|
||||
* PCRE fixes.
|
||||
(merge ff61681b46 cb/pcre1-cleanup later to maint).
|
||||
|
||||
* "git range-diff" segfaulted when diff.noprefix configuration was
|
||||
used, as it blindly expected the patch it internally generates to
|
||||
have the standard a/ and b/ prefixes. The command now forces the
|
||||
internal patch to be built without any prefix, not to be affected
|
||||
by any end-user configuration.
|
||||
(merge 937b76ed49 js/range-diff-noprefix later to maint).
|
||||
|
||||
* "git stash apply" in a subdirectory of a secondary worktree failed
|
||||
to access the worktree correctly, which has been corrected.
|
||||
(merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).
|
||||
|
||||
* The merge-recursive machinery is one of the most complex parts of
|
||||
the system that accumulated cruft over time. This large series
|
||||
cleans up the implementation quite a bit.
|
||||
(merge b657047719 en/merge-recursive-cleanup later to maint).
|
||||
|
||||
* Pretty-printed command line formatter (used in e.g. reporting the
|
||||
command being run by the tracing API) had a bug that lost an
|
||||
argument that is an empty string, which has been corrected.
|
||||
(merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).
|
||||
|
||||
* "git range-diff" failed to handle mode-only change, which has been
|
||||
corrected.
|
||||
(merge 2b6a9b13ca tg/range-diff-output-update later to maint).
|
||||
|
||||
* Dev support update.
|
||||
(merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).
|
||||
|
||||
* "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
|
||||
not "mkdir -p <outdir>", which was corrected.
|
||||
|
||||
* "git stash save" lost local changes to submodules, which has been
|
||||
corrected.
|
||||
(merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).
|
||||
|
||||
* The atomic push over smart HTTP transport did not work, which has
|
||||
been corrected.
|
||||
(merge 6f1194246a bc/smart-http-atomic-push later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge d1387d3895 en/fast-import-merge-doc later to maint).
|
||||
(merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
|
||||
(merge 415b770b88 ds/midx-expire-repack later to maint).
|
||||
(merge 19800bdc3f nd/diff-parseopt later to maint).
|
||||
(merge 58166c2e9d tg/t0021-racefix later to maint).
|
||||
(merge 7027f508c7 dl/compat-cleanup later to maint).
|
||||
(merge e770fbfeff jc/test-cleanup later to maint).
|
||||
(merge 1fd881d404 rs/trace2-dst-warning later to maint).
|
||||
(merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
|
||||
(merge 9784f97321 mh/release-commit-memory-fix later to maint).
|
||||
(merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
|
||||
(merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
|
||||
(merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
|
||||
(merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
|
||||
(merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
|
||||
(merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
|
||||
(merge 47b27c96fa ss/get-time-cleanup later to maint).
|
||||
(merge dd2e50a84e jk/commit-graph-cleanup later to maint).
|
||||
(merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
|
||||
(merge 40e747e89d dl/submodule-set-branch later to maint).
|
||||
(merge 689a146c91 rs/commit-graph-use-list-count later to maint).
|
||||
(merge 0eb7c37a8a js/doc-patch-text later to maint).
|
||||
(merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
|
||||
(merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
|
||||
(merge af78249463 cc/svn-fe-py-shebang later to maint).
|
||||
(merge 7bd97d6dff rs/alias-use-copy-array later to maint).
|
||||
(merge c46ebc2496 sg/travis-help-debug later to maint).
|
||||
(merge 24c681794f ps/my-first-contribution-alphasort later to maint).
|
||||
(merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
|
||||
(merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
|
||||
(merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
|
||||
(merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
|
||||
(merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
|
||||
(merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
|
||||
(merge 53d687bf5f ah/cleanups later to maint).
|
||||
(merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
|
||||
(merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
|
||||
(merge d928a8388a am/t0028-utf16-tests later to maint).
|
||||
(merge b05b40930e dl/t0000-skip-test-test later to maint).
|
||||
(merge 03d3b1297c js/xdiffi-comment-updates later to maint).
|
||||
(merge 57d8f4b4c7 js/doc-stash-save later to maint).
|
||||
(merge 8c1cfd58e3 ta/t1308-typofix later to maint).
|
||||
(merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
|
||||
(merge 68b69211b2 bb/compat-util-comment-fix later to maint).
|
||||
(merge 5cc6a4be11 rs/http-push-simplify later to maint).
|
||||
(merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
|
||||
(merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
|
||||
(merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
|
||||
(merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
|
||||
(merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
|
||||
(merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
|
||||
(merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).
|
@ -1,8 +0,0 @@
|
||||
Git v2.24.1 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges up the fixes that appear in v2.14.6, v2.15.4,
|
||||
v2.17.3, v2.20.2 and in v2.21.1, addressing the security issues
|
||||
CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351,
|
||||
CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, and
|
||||
CVE-2019-19604; see the release notes for those versions for details.
|
@ -1,5 +0,0 @@
|
||||
Git v2.24.2 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges the security fix that appears in v2.17.4; see
|
||||
the release notes for that version for details.
|
@ -1,5 +0,0 @@
|
||||
Git v2.24.3 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges the security fix that appears in v2.17.5; see
|
||||
the release notes for that version for details.
|
@ -1,370 +0,0 @@
|
||||
Git 2.25 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.24
|
||||
-------------------
|
||||
|
||||
Backward compatibility notes
|
||||
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* A tutorial on object enumeration has been added.
|
||||
|
||||
* The branch description ("git branch --edit-description") has been
|
||||
used to fill the body of the cover letters by the format-patch
|
||||
command; this has been enhanced so that the subject can also be
|
||||
filled.
|
||||
|
||||
* "git rebase --preserve-merges" has been marked as deprecated; this
|
||||
release stops advertising it in the "git rebase -h" output.
|
||||
|
||||
* The code to generate multi-pack index learned to show (or not to
|
||||
show) progress indicators.
|
||||
|
||||
* "git apply --3way" learned to honor merge.conflictStyle
|
||||
configuration variable, like merges would.
|
||||
|
||||
* The custom format for "git log --format=<format>" learned the l/L
|
||||
placeholder that is similar to e/E that fills in the e-mail
|
||||
address, but only the local part on the left side of '@'.
|
||||
|
||||
* Documentation pages for "git shortlog" now list commit limiting
|
||||
options explicitly.
|
||||
|
||||
* The patterns to detect function boundary for Elixir language has
|
||||
been added.
|
||||
|
||||
* The completion script (in contrib/) learned that the "--onto"
|
||||
option of "git rebase" can take its argument as the value of the
|
||||
option.
|
||||
|
||||
* The userdiff machinery has been taught that "async def" is another
|
||||
way to begin a "function" in Python.
|
||||
|
||||
* "git range-diff" learned to take the "--notes=<ref>" and the
|
||||
"--no-notes" options to control the commit notes included in the
|
||||
log message that gets compared.
|
||||
|
||||
* "git rev-parse --show-toplevel" run outside of any working tree did
|
||||
not error out, which has been corrected.
|
||||
|
||||
* A few commands learned to take the pathspec from the standard input
|
||||
or a named file, instead of taking it as the command line
|
||||
arguments, with the "--pathspec-from-file" option.
|
||||
|
||||
* "git submodule" learned a subcommand "set-url".
|
||||
|
||||
* "git log" family learned "--pretty=reference" that gives the name
|
||||
of a commit in the format that is often used to refer to it in log
|
||||
messages.
|
||||
|
||||
* The interaction between "git clone --recurse-submodules" and
|
||||
alternate object store was ill-designed. The documentation and
|
||||
code have been taught to make more clear recommendations when the
|
||||
users see failures.
|
||||
|
||||
* Management of sparsely checked-out working tree has gained a
|
||||
dedicated "sparse-checkout" command.
|
||||
|
||||
* Miscellaneous small UX improvements on "git-p4".
|
||||
|
||||
* "git sparse-checkout list" subcommand learned to give its output in
|
||||
a more concise form when the "cone" mode is in effect.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Debugging support for lazy cloning has been a bit improved.
|
||||
|
||||
* Move the definition of a set of bitmask constants from 0ctal
|
||||
literal to (1U<<count) notation.
|
||||
|
||||
* Test updates to prepare for SHA-2 transition continues.
|
||||
|
||||
* Crufty code and logic accumulated over time around the object
|
||||
parsing and low-level object access used in "git fsck" have been
|
||||
cleaned up.
|
||||
|
||||
* The implementation of "git log --graph" got refactored and then its
|
||||
output got simplified.
|
||||
|
||||
* Follow recent push to move API docs from Documentation/ to header
|
||||
files and update config.h
|
||||
|
||||
* "git bundle" has been taught to use the parse options API. "git
|
||||
bundle verify" learned "--quiet" and "git bundle create" learned
|
||||
options to control the progress output.
|
||||
|
||||
* Handling of commit objects that use non UTF-8 encoding during
|
||||
"rebase -i" has been improved.
|
||||
|
||||
* The beginning of rewriting "git add -i" in C.
|
||||
|
||||
* A label used in the todo list that are generated by "git rebase
|
||||
--rebase-merges" is used as a part of a refname; the logic to come
|
||||
up with the label has been tightened to avoid names that cannot be
|
||||
used as such.
|
||||
|
||||
* The logic to avoid duplicate label names generated by "git rebase
|
||||
--rebase-merges" forgot that the machinery itself uses "onto" as a
|
||||
label name, which must be avoided by auto-generated labels, which
|
||||
has been corrected.
|
||||
|
||||
* We have had compatibility fallback macro definitions for "PRIuMAX",
|
||||
"PRIu32", etc. but did not for "PRIdMAX", while the code used the
|
||||
last one apparently without any hiccup reported recently. The
|
||||
fallback macro definitions for these <inttypes.h> macros that must
|
||||
appear in C99 systems have been removed.
|
||||
|
||||
* Recently we have declared that GIT_TEST_* variables take the
|
||||
usual boolean values (it used to be that some used "non-empty
|
||||
means true" and taking GIT_TEST_VAR=YesPlease as true); make
|
||||
sure we notice and fail when non-bool strings are given to
|
||||
these variables.
|
||||
|
||||
* Users of oneway_merge() (like "reset --hard") learned to take
|
||||
advantage of fsmonitor to avoid unnecessary lstat(2) calls.
|
||||
|
||||
* Performance tweak on "git push" into a repository with many refs
|
||||
that point at objects we have never heard of.
|
||||
|
||||
* PerfTest fix to avoid stale result mixed up with the latest round
|
||||
of test results.
|
||||
|
||||
* Hide lower-level verify_signed-buffer() API as a pure helper to
|
||||
implement the public check_signature() function, in order to
|
||||
encourage new callers to use the correct and more strict
|
||||
validation.
|
||||
|
||||
* Unnecessary reading of state variables back from the disk during
|
||||
sequencer operation has been reduced.
|
||||
|
||||
* The code has been made to avoid gmtime() and localtime() and prefer
|
||||
their reentrant counterparts.
|
||||
|
||||
* In a repository with many packfiles, the cost of the procedure that
|
||||
avoids registering the same packfile twice was unnecessarily high
|
||||
by using an inefficient search algorithm, which has been corrected.
|
||||
|
||||
* Redo "git name-rev" to avoid recursive calls.
|
||||
|
||||
* FreeBSD CI support via Cirrus-CI has been added.
|
||||
|
||||
|
||||
Fixes since v2.24
|
||||
-----------------
|
||||
|
||||
* "rebase -i" ceased to run post-commit hook by mistake in an earlier
|
||||
update, which has been corrected.
|
||||
|
||||
* "git notes copy $original" ought to copy the notes attached to the
|
||||
original object to HEAD, but a mistaken tightening to command line
|
||||
parameter validation made earlier disabled that feature by mistake.
|
||||
|
||||
* When all files from some subdirectory were renamed to the root
|
||||
directory, the directory rename heuristics would fail to detect that
|
||||
as a rename/merge of the subdirectory to the root directory, which has
|
||||
been corrected.
|
||||
|
||||
* Code clean-up and a bugfix in the logic used to tell worktree local
|
||||
and repository global refs apart.
|
||||
(merge f45f88b2e4 sg/dir-trie-fixes later to maint).
|
||||
|
||||
* "git stash save" in a working tree that is sparsely checked out
|
||||
mistakenly removed paths that are outside the area of interest.
|
||||
(merge 4a58c3d7f7 js/update-index-ignore-removal-for-skip-worktree later to maint).
|
||||
|
||||
* "git rev-parse --git-path HEAD.lock" did not give the right path
|
||||
when run in a secondary worktree.
|
||||
(merge 76a53d640f js/git-path-head-dot-lock-fix later to maint).
|
||||
|
||||
* "git merge --no-commit" needs "--no-ff" if you do not want to move
|
||||
HEAD, which has been corrected in the manual page for "git bisect".
|
||||
(merge 8dd327b246 ma/bisect-doc-sample-update later to maint).
|
||||
|
||||
* "git worktree add" internally calls "reset --hard" that should not
|
||||
descend into submodules, even when submodule.recurse configuration
|
||||
is set, but it was affected. This has been corrected.
|
||||
(merge 4782cf2ab6 pb/no-recursive-reset-hard-in-worktree-add later to maint).
|
||||
|
||||
* Messages from die() etc. can be mixed up from multiple processes
|
||||
without even line buffering on Windows, which has been worked
|
||||
around.
|
||||
(merge 116d1fa6c6 js/vreportf-wo-buffering later to maint).
|
||||
|
||||
* HTTP transport had possible allocator/deallocator mismatch, which
|
||||
has been corrected.
|
||||
|
||||
* The watchman integration for fsmonitor was racy, which has been
|
||||
corrected to be more conservative.
|
||||
(merge dd0b61f577 kw/fsmonitor-watchman-fix later to maint).
|
||||
|
||||
* Fetching from multiple remotes into the same repository in parallel
|
||||
had a bad interaction with the recent change to (optionally) update
|
||||
the commit-graph after a fetch job finishes, as these parallel
|
||||
fetches compete with each other. Which has been corrected.
|
||||
|
||||
* Recent update to "git stash pop" made the command empty the index
|
||||
when run with the "--quiet" option, which has been corrected.
|
||||
|
||||
* "git fetch" codepath had a big "do not lazily fetch missing objects
|
||||
when I ask if something exists" switch. This has been corrected by
|
||||
marking the "does this thing exist?" calls with "if not please do not
|
||||
lazily fetch it" flag.
|
||||
|
||||
* Test update to avoid wasted cycles.
|
||||
(merge e0316695ec sg/skip-skipped-prereq later to maint).
|
||||
|
||||
* Error handling after "git push" finishes sending the packdata and
|
||||
waits for the response to the remote side has been improved.
|
||||
(merge ad7a403268 jk/send-pack-remote-failure later to maint).
|
||||
|
||||
* Some codepaths in "gitweb" that forgot to escape URLs generated
|
||||
based on end-user input have been corrected.
|
||||
(merge a376e37b2c jk/gitweb-anti-xss later to maint).
|
||||
|
||||
* CI jobs for macOS has been made less chatty when updating perforce
|
||||
package used during testing.
|
||||
(merge 0dbc4a0edf jc/azure-ci-osx-fix-fix later to maint).
|
||||
|
||||
* "git unpack-objects" used to show progress based only on the number
|
||||
of received and unpacked objects, which stalled when it has to
|
||||
handle an unusually large object. It now shows the throughput as
|
||||
well.
|
||||
(merge bae60ba7e9 sg/unpack-progress-throughput later to maint).
|
||||
|
||||
* The sequencer machinery compared the HEAD and the state it is
|
||||
attempting to commit to decide if the result would be a no-op
|
||||
commit, even when amending a commit, which was incorrect, and
|
||||
has been corrected.
|
||||
|
||||
* The code to parse GPG output used to assume incorrectly that the
|
||||
finterprint for the primary key would always be present for a valid
|
||||
signature, which has been corrected.
|
||||
(merge 67a6ea6300 hi/gpg-optional-pkfp-fix later to maint).
|
||||
|
||||
* "git submodule status" and "git submodule status --cached" show
|
||||
different things, but the documentation did not cover them
|
||||
correctly, which has been corrected.
|
||||
(merge 8d483c8408 mg/doc-submodule-status-cached later to maint).
|
||||
|
||||
* "git reset --patch $object" without any pathspec should allow a
|
||||
tree object to be given, but incorrectly required a committish,
|
||||
which has been corrected.
|
||||
|
||||
* "git submodule status" that is run from a subdirectory of the
|
||||
superproject did not work well, which has been corrected.
|
||||
(merge 1f3aea22c7 mg/submodule-status-from-a-subdirectory later to maint).
|
||||
|
||||
* The revision walking machinery uses resources like per-object flag
|
||||
bits that need to be reset before a new iteration of walking
|
||||
begins, but the resources related to topological walk were not
|
||||
cleared correctly, which has been corrected.
|
||||
(merge 0aa0c2b2ec mh/clear-topo-walk-upon-reset later to maint).
|
||||
|
||||
* TravisCI update.
|
||||
(merge 176441bfb5 sg/osx-force-gcc-9 later to maint).
|
||||
|
||||
* While running "revert" or "cherry-pick --edit" for multiple
|
||||
commits, a recent regression incorrectly detected "nothing to
|
||||
commit, working tree clean", instead of replaying the commits,
|
||||
which has been corrected.
|
||||
(merge befd4f6a81 sg/assume-no-todo-update-in-cherry-pick later to maint).
|
||||
|
||||
* Work around a issue where a FD that is left open when spawning a
|
||||
child process and is kept open in the child can interfere with the
|
||||
operation in the parent process on Windows.
|
||||
|
||||
* One kind of progress messages were always given during commit-graph
|
||||
generation, instead of following the "if it takes more than two
|
||||
seconds, show progress" pattern, which has been corrected.
|
||||
|
||||
* "git rebase" did not work well when format.useAutoBase
|
||||
configuration variable is set, which has been corrected.
|
||||
|
||||
* The "diff" machinery learned not to lose added/removed blank lines
|
||||
in the context when --ignore-blank-lines and --function-context are
|
||||
used at the same time.
|
||||
(merge 0bb313a552 rs/xdiff-ignore-ws-w-func-context later to maint).
|
||||
|
||||
* The test on "fast-import" used to get stuck when "fast-import" died
|
||||
in the middle.
|
||||
(merge 0d9b0d7885 sg/t9300-robustify later to maint).
|
||||
|
||||
* "git format-patch" can take a set of configured format.notes values
|
||||
to specify which notes refs to use in the log message part of the
|
||||
output. The behaviour of this was not consistent with multiple
|
||||
--notes command line options, which has been corrected.
|
||||
(merge e0f9095aaa dl/format-patch-notes-config-fixup later to maint).
|
||||
|
||||
* "git p4" used to ignore lfs.storage configuration variable, which
|
||||
has been corrected.
|
||||
(merge ea94b16fb8 rb/p4-lfs later to maint).
|
||||
|
||||
* Assorted fixes to the directory traversal API.
|
||||
(merge 6836d2fe06 en/fill-directory-fixes later to maint).
|
||||
|
||||
* Forbid pathnames that the platform's filesystem cannot represent on
|
||||
MinGW.
|
||||
(merge 4dc42c6c18 js/mingw-reserved-filenames later to maint).
|
||||
|
||||
* "git rebase --signoff" stopped working when the command was written
|
||||
in C, which has been corrected.
|
||||
(merge 4fe7e43c53 en/rebase-signoff-fix later to maint).
|
||||
|
||||
* An earlier update to Git for Windows declared that a tree object is
|
||||
invalid if it has a path component with backslash in it, which was
|
||||
overly strict, which has been corrected. The only protection the
|
||||
Windows users need is to prevent such path (or any path that their
|
||||
filesystem cannot check out) from entering the index.
|
||||
(merge 224c7d70fa js/mingw-loosen-overstrict-tree-entry-checks later to maint).
|
||||
|
||||
* The code to write split commit-graph file(s) upon fetching computed
|
||||
bogus value for the parameter used in splitting the resulting
|
||||
files, which has been corrected.
|
||||
(merge 63020f175f ds/commit-graph-set-size-mult later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge 80736d7c5e jc/am-show-current-patch-docfix later to maint).
|
||||
(merge 8b656572ca sg/commit-graph-usage-fix later to maint).
|
||||
(merge 6c02042139 mr/clone-dir-exists-to-path-exists later to maint).
|
||||
(merge 44ae131e38 sg/blame-indent-heuristics-is-now-the-default later to maint).
|
||||
(merge 0115e5d929 dl/doc-diff-no-index-implies-exit-code later to maint).
|
||||
(merge 270de6acbe en/t6024-style later to maint).
|
||||
(merge 14c4776d75 ns/test-desc-typofix later to maint).
|
||||
(merge 68d40f30c4 dj/typofix-merge-strat later to maint).
|
||||
(merge f66e0401ab jk/optim-in-pack-idx-conversion later to maint).
|
||||
(merge 169bed7421 rs/parse-options-dup-null-fix later to maint).
|
||||
(merge 51bd6be32d rs/use-copy-array-in-mingw-shell-command-preparation later to maint).
|
||||
(merge b018719927 ma/t7004 later to maint).
|
||||
(merge 932757b0cc ar/install-doc-update-cmds-needing-the-shell later to maint).
|
||||
(merge 46efd28be1 ep/guard-kset-tar-headers later to maint).
|
||||
(merge 9e5afdf997 ec/fetch-mark-common-refs-trace2 later to maint).
|
||||
(merge f0e58b3fe8 pb/submodule-update-fetches later to maint).
|
||||
(merge 2a02262078 dl/t5520-cleanup later to maint).
|
||||
(merge a4fb016ba1 js/pkt-line-h-typofix later to maint).
|
||||
(merge 54a7a64613 rs/simplify-prepare-cmd later to maint).
|
||||
(merge 3eae30e464 jk/lore-is-the-archive later to maint).
|
||||
(merge 14b7664df8 dl/lore-is-the-archive later to maint).
|
||||
(merge 0e40a73a4c po/bundle-doc-clonable later to maint).
|
||||
(merge e714b898c6 as/t7812-missing-redirects-fix later to maint).
|
||||
(merge 528d9e6d01 jk/perf-wo-git-dot-pm later to maint).
|
||||
(merge fc42f20e24 sg/test-squelch-noise-in-commit-bulk later to maint).
|
||||
(merge c64368e3a2 bc/t9001-zsh-in-posix-emulation-mode later to maint).
|
||||
(merge 11de8dd7ef dr/branch-usage-casefix later to maint).
|
||||
(merge e05e8cf074 rs/archive-zip-code-cleanup later to maint).
|
||||
(merge 147ee35558 rs/commit-export-env-simplify later to maint).
|
||||
(merge 4507ecc771 rs/patch-id-use-oid-to-hex later to maint).
|
||||
(merge 51a0a4ed95 mr/bisect-use-after-free later to maint).
|
||||
(merge cc2bd5c45d pb/submodule-doc-xref later to maint).
|
||||
(merge df5be01669 ja/doc-markup-cleanup later to maint).
|
||||
(merge 7c5cea7242 mr/bisect-save-pointer-to-const-string later to maint).
|
||||
(merge 20a67e8ce9 js/use-test-tool-on-path later to maint).
|
||||
(merge 4e61b2214d ew/packfile-syscall-optim later to maint).
|
||||
(merge ace0f86c7f pb/clarify-line-log-doc later to maint).
|
||||
(merge 763a59e71c en/merge-recursive-oid-eq-simplify later to maint).
|
||||
(merge 4e2c4c0d4f do/gitweb-typofix-in-comments later to maint).
|
||||
(merge 421c0ffb02 jb/doc-multi-pack-idx-fix later to maint).
|
||||
(merge f8740c586b pm/am-in-body-header-doc-update later to maint).
|
||||
(merge 5814d44d9b tm/doc-submodule-absorb-fix later to maint).
|
@ -1,55 +0,0 @@
|
||||
Git 2.25.1 Release Notes
|
||||
========================
|
||||
|
||||
Fixes since v2.25
|
||||
-----------------
|
||||
|
||||
* "git commit" gives output similar to "git status" when there is
|
||||
nothing to commit, but without honoring the advise.statusHints
|
||||
configuration variable, which has been corrected.
|
||||
|
||||
* has_object_file() said "no" given an object registered to the
|
||||
system via pretend_object_file(), making it inconsistent with
|
||||
read_object_file(), causing lazy fetch to attempt fetching an
|
||||
empty tree from promisor remotes.
|
||||
|
||||
* The code that tries to skip over the entries for the paths in a
|
||||
single directory using the cache-tree was not careful enough
|
||||
against corrupt index file.
|
||||
|
||||
* Complete an update to tutorial that encourages "git switch" over
|
||||
"git checkout" that was done only half-way.
|
||||
|
||||
* Reduce unnecessary round-trip when running "ls-remote" over the
|
||||
stateless RPC mechanism.
|
||||
|
||||
* "git restore --staged" did not correctly update the cache-tree
|
||||
structure, resulting in bogus trees to be written afterwards, which
|
||||
has been corrected.
|
||||
|
||||
* The code recently added to move to the entry beyond the ones in the
|
||||
same directory in the index in the sparse-cone mode did not count
|
||||
the number of entries to skip over incorrectly, which has been
|
||||
corrected.
|
||||
|
||||
* Work around test breakages caused by custom regex engine used in
|
||||
libasan, when address sanitizer is used with more recent versions
|
||||
of gcc and clang.
|
||||
|
||||
* "git fetch --refmap=" option has got a better documentation.
|
||||
|
||||
* Corner case bugs in "git clean" that stems from a (necessarily for
|
||||
performance reasons) awkward calling convention in the directory
|
||||
enumeration API has been corrected.
|
||||
|
||||
* "git grep --no-index" should not get affected by the contents of
|
||||
the .gitmodules file but when "--recurse-submodules" is given or
|
||||
the "submodule.recurse" variable is set, it did. Now these
|
||||
settings are ignored in the "--no-index" mode.
|
||||
|
||||
* Technical details of the bundle format has been documented.
|
||||
|
||||
* Unhelpful warning messages during documentation build have been
|
||||
squelched.
|
||||
|
||||
Also contains various documentation updates, code clean-ups and minor fixups.
|
@ -1,60 +0,0 @@
|
||||
Git 2.25.2 Release Notes
|
||||
========================
|
||||
|
||||
Fixes since v2.25.1
|
||||
-------------------
|
||||
|
||||
* Minor bugfixes to "git add -i" that has recently been rewritten in C.
|
||||
|
||||
* An earlier update to show the location of working tree in the error
|
||||
message did not consider the possibility that a git command may be
|
||||
run in a bare repository, which has been corrected.
|
||||
|
||||
* The "--recurse-submodules" option of various subcommands did not
|
||||
work well when run in an alternate worktree, which has been
|
||||
corrected.
|
||||
|
||||
* Running "git rm" on a submodule failed unnecessarily when
|
||||
.gitmodules is only cache-dirty, which has been corrected.
|
||||
|
||||
* "git rebase -i" identifies existing commits in its todo file with
|
||||
their abbreviated object name, which could become ambigous as it
|
||||
goes to create new commits, and has a mechanism to avoid ambiguity
|
||||
in the main part of its execution. A few other cases however were
|
||||
not covered by the protection against ambiguity, which has been
|
||||
corrected.
|
||||
|
||||
* The index-pack code now diagnoses a bad input packstream that
|
||||
records the same object twice when it is used as delta base; the
|
||||
code used to declare a software bug when encountering such an
|
||||
input, but it is an input error.
|
||||
|
||||
* The code to automatically shrink the fan-out in the notes tree had
|
||||
an off-by-one bug, which has been killed.
|
||||
|
||||
* "git check-ignore" did not work when the given path is explicitly
|
||||
marked as not ignored with a negative entry in the .gitignore file.
|
||||
|
||||
* The merge-recursive machinery failed to refresh the cache entry for
|
||||
a merge result in a couple of places, resulting in an unnecessary
|
||||
merge failure, which has been fixed.
|
||||
|
||||
* Fix for a bug revealed by a recent change to make the protocol v2
|
||||
the default.
|
||||
|
||||
* "git merge signed-tag" while lacking the public key started to say
|
||||
"No signature", which was utterly wrong. This regression has been
|
||||
reverted.
|
||||
|
||||
* MinGW's poll() emulation has been improved.
|
||||
|
||||
* "git show" and others gave an object name in raw format in its
|
||||
error output, which has been corrected to give it in hex.
|
||||
|
||||
* Both "git ls-remote -h" and "git grep -h" give short usage help,
|
||||
like any other Git subcommand, but it is not unreasonable to expect
|
||||
that the former would behave the same as "git ls-remote --head"
|
||||
(there is no other sensible behaviour for the latter). The
|
||||
documentation has been updated in an attempt to clarify this.
|
||||
|
||||
Also contains various documentation updates, code clean-ups and minor fixups.
|
@ -1,5 +0,0 @@
|
||||
Git v2.25.3 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges the security fix that appears in v2.17.4; see
|
||||
the release notes for that version for details.
|
@ -1,5 +0,0 @@
|
||||
Git v2.25.4 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges the security fix that appears in v2.17.5; see
|
||||
the release notes for that version for details.
|
@ -1,341 +0,0 @@
|
||||
Git 2.26 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.25
|
||||
-------------------
|
||||
|
||||
Backward compatibility notes
|
||||
|
||||
* "git rebase" uses a different backend that is based on the 'merge'
|
||||
machinery by default. There are a few known differences in the
|
||||
behaviour from the traditional machinery based on patch+apply.
|
||||
|
||||
If your workflow is negatively affected by this change, please
|
||||
report it to git@vger.kernel.org so that we can take a look into
|
||||
it. After doing so, you can set the 'rebase.backend' configuration
|
||||
variable to 'apply', in order to use the old default behaviour in
|
||||
the meantime.
|
||||
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* Sample credential helper for using .netrc has been updated to work
|
||||
out of the box.
|
||||
|
||||
* gpg.minTrustLevel configuration variable has been introduced to
|
||||
tell various signature verification codepaths the required minimum
|
||||
trust level.
|
||||
|
||||
* The command line completion (in contrib/) learned to complete
|
||||
subcommands and arguments to "git worktree".
|
||||
|
||||
* Disambiguation logic to tell revisions and pathspec apart has been
|
||||
tweaked so that backslash-escaped glob special characters do not
|
||||
count in the "wildcards are pathspec" rule.
|
||||
|
||||
* One effect of specifying where the GIT_DIR is (either with the
|
||||
environment variable, or with the "git --git-dir=<where> cmd"
|
||||
option) is to disable the repository discovery. This has been
|
||||
placed a bit more stress in the documentation, as new users often
|
||||
get confused.
|
||||
|
||||
* Two help messages given when "git add" notices the user gave it
|
||||
nothing to add have been updated to use advise() API.
|
||||
|
||||
* A new version of fsmonitor-watchman hook has been introduced, to
|
||||
avoid races.
|
||||
|
||||
* "git config" learned to show in which "scope", in addition to in
|
||||
which file, each config setting comes from.
|
||||
|
||||
* The basic 7 colors learned the brighter counterparts
|
||||
(e.g. "brightred").
|
||||
|
||||
* "git sparse-checkout" learned a new "add" subcommand.
|
||||
|
||||
* A configuration element used for credential subsystem can now use
|
||||
wildcard pattern to specify for which set of URLs the entry
|
||||
applies.
|
||||
|
||||
* "git clone --recurse-submodules --single-branch" now uses the same
|
||||
single-branch option when cloning the submodules.
|
||||
|
||||
* "git rm" and "git stash" learns the new "--pathspec-from-file"
|
||||
option.
|
||||
|
||||
* "git am --show-current-patch" is a way to show the piece of e-mail
|
||||
for the stopped step, which is not suitable to directly feed "git
|
||||
apply" (it is designed to be a good "git am" input). It learned a
|
||||
new option to show only the patch part.
|
||||
|
||||
* Handling of conflicting renames in merge-recursive have further
|
||||
been made consistent with how existing codepaths try to mimic what
|
||||
is done to add/add conflicts.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Tell .editorconfig that in this project, *.txt files are indented
|
||||
with tabs.
|
||||
|
||||
* The test-lint machinery knew to check "VAR=VAL shell_function"
|
||||
construct, but did not check "VAR= shell_function", which has been
|
||||
corrected.
|
||||
|
||||
* Replace "git config --bool" calls with "git config --type=bool" in
|
||||
sample templates.
|
||||
|
||||
* The effort to move "git-add--interactive" to C continues.
|
||||
|
||||
* Improve error message generation for "git submodule add".
|
||||
|
||||
* Preparation of test scripts for the day when the object names will
|
||||
use SHA-256 continues.
|
||||
|
||||
* Warn programmers about pretend_object_file() that allows the code
|
||||
to tentatively use in-core objects.
|
||||
|
||||
* The way "git pack-objects" reuses objects stored in existing pack
|
||||
to generate its result has been improved.
|
||||
|
||||
* The transport protocol version 2 becomes the default one.
|
||||
|
||||
* Traditionally, we avoided threaded grep while searching in objects
|
||||
(as opposed to files in the working tree) as accesses to the object
|
||||
layer is not thread-safe. This limitation is getting lifted.
|
||||
|
||||
* "git rebase -i" (and friends) used to unnecessarily check out the
|
||||
tip of the branch to be rebased, which has been corrected.
|
||||
|
||||
* A low-level API function get_oid(), that accepts various ways to
|
||||
name an object, used to issue end-user facing error messages
|
||||
without l10n, which has been updated to be translatable.
|
||||
|
||||
* Unneeded connectivity check is now disabled in a partial clone when
|
||||
fetching into it.
|
||||
|
||||
* Some rough edges in the sparse-checkout feature, especially around
|
||||
the cone mode, have been cleaned up.
|
||||
|
||||
* The diff-* plumbing family of subcommands now pay attention to the
|
||||
diff.wsErrorHighlight configuration, which has been ignored before;
|
||||
this allows "git add -p" to also show the whitespace problems to
|
||||
the end user.
|
||||
|
||||
* Some codepaths were given a repository instance as a parameter to
|
||||
work in the repository, but passed the_repository instance to its
|
||||
callees, which has been cleaned up (somewhat).
|
||||
|
||||
* Memory footprint and performance of "git name-rev" has been
|
||||
improved.
|
||||
|
||||
* The object reachability bitmap machinery and the partial cloning
|
||||
machinery were not prepared to work well together, because some
|
||||
object-filtering criteria that partial clones use inherently rely
|
||||
on object traversal, but the bitmap machinery is an optimization
|
||||
to bypass that object traversal. There however are some cases
|
||||
where they can work together, and they were taught about them.
|
||||
|
||||
* "git rebase" has learned to use the merge backend (i.e. the
|
||||
machinery that drives "rebase -i") by default, while allowing
|
||||
"--apply" option to use the "apply" backend (e.g. the moral
|
||||
equivalent of "format-patch piped to am"). The rebase.backend
|
||||
configuration variable can be set to customize.
|
||||
|
||||
* Underlying machinery of "git bisect--helper" is being refactored
|
||||
into pieces that are more easily reused.
|
||||
|
||||
|
||||
Fixes since v2.25
|
||||
-----------------
|
||||
|
||||
* "git commit" gives output similar to "git status" when there is
|
||||
nothing to commit, but without honoring the advise.statusHints
|
||||
configuration variable, which has been corrected.
|
||||
|
||||
* has_object_file() said "no" given an object registered to the
|
||||
system via pretend_object_file(), making it inconsistent with
|
||||
read_object_file(), causing lazy fetch to attempt fetching an
|
||||
empty tree from promisor remotes.
|
||||
|
||||
* Complete an update to tutorial that encourages "git switch" over
|
||||
"git checkout" that was done only half-way.
|
||||
|
||||
* C pedantry ;-) fix.
|
||||
|
||||
* The code that tries to skip over the entries for the paths in a
|
||||
single directory using the cache-tree was not careful enough
|
||||
against corrupt index file.
|
||||
|
||||
* Reduce unnecessary round-trip when running "ls-remote" over the
|
||||
stateless RPC mechanism.
|
||||
|
||||
* "git restore --staged" did not correctly update the cache-tree
|
||||
structure, resulting in bogus trees to be written afterwards, which
|
||||
has been corrected.
|
||||
|
||||
* The code recently added to move to the entry beyond the ones in the
|
||||
same directory in the index in the sparse-cone mode did not count
|
||||
the number of entries to skip over incorrectly, which has been
|
||||
corrected.
|
||||
|
||||
* Rendering by "git log --graph" of ancestry lines leading to a merge
|
||||
commit were made suboptimal to waste vertical space a bit with a
|
||||
recent update, which has been corrected.
|
||||
|
||||
* Work around test breakages caused by custom regex engine used in
|
||||
libasan, when address sanitizer is used with more recent versions
|
||||
of gcc and clang.
|
||||
|
||||
* Minor bugfixes to "git add -i" that has recently been rewritten in C.
|
||||
|
||||
* "git fetch --refmap=" option has got a better documentation.
|
||||
|
||||
* "git checkout X" did not correctly fail when X is not a local
|
||||
branch but could name more than one remote-tracking branches
|
||||
(i.e. to be dwimmed as the starting point to create a corresponding
|
||||
local branch), which has been corrected.
|
||||
(merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).
|
||||
|
||||
* Corner case bugs in "git clean" that stems from a (necessarily for
|
||||
performance reasons) awkward calling convention in the directory
|
||||
enumeration API has been corrected.
|
||||
|
||||
* A fetch that is told to recursively fetch updates in submodules
|
||||
inevitably produces reams of output, and it becomes hard to spot
|
||||
error messages. The command has been taught to enumerate
|
||||
submodules that had errors at the end of the operation.
|
||||
(merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).
|
||||
|
||||
* The "--recurse-submodules" option of various subcommands did not
|
||||
work well when run in an alternate worktree, which has been
|
||||
corrected.
|
||||
|
||||
* Futureproofing a test not to depend on the current implementation
|
||||
detail.
|
||||
|
||||
* Running "git rm" on a submodule failed unnecessarily when
|
||||
.gitmodules is only cache-dirty, which has been corrected.
|
||||
|
||||
* C pedantry ;-) fix.
|
||||
|
||||
* "git grep --no-index" should not get affected by the contents of
|
||||
the .gitmodules file but when "--recurse-submodules" is given or
|
||||
the "submodule.recurse" variable is set, it did. Now these
|
||||
settings are ignored in the "--no-index" mode.
|
||||
|
||||
* Technical details of the bundle format has been documented.
|
||||
|
||||
* Unhelpful warning messages during documentation build have been squelched.
|
||||
|
||||
* "git rebase -i" identifies existing commits in its todo file with
|
||||
their abbreviated object name, which could become ambiguous as it
|
||||
goes to create new commits, and has a mechanism to avoid ambiguity
|
||||
in the main part of its execution. A few other cases however were
|
||||
not covered by the protection against ambiguity, which has been
|
||||
corrected.
|
||||
|
||||
* Allow the rebase.missingCommitsCheck configuration to kick in when
|
||||
"rebase --edit-todo" and "rebase --continue" restarts the procedure.
|
||||
(merge 5a5445d878 ag/edit-todo-drop-check later to maint).
|
||||
|
||||
* The way "git submodule status" reports an initialized but not yet
|
||||
populated submodule has not been reimplemented correctly when a
|
||||
part of the "git submodule" command was rewritten in C, which has
|
||||
been corrected.
|
||||
(merge f38c92452d pk/status-of-uncloned-submodule later to maint).
|
||||
|
||||
* The code to automatically shrink the fan-out in the notes tree had
|
||||
an off-by-one bug, which has been killed.
|
||||
|
||||
* The index-pack code now diagnoses a bad input packstream that
|
||||
records the same object twice when it is used as delta base; the
|
||||
code used to declare a software bug when encountering such an
|
||||
input, but it is an input error.
|
||||
|
||||
|
||||
* The code to compute the commit-graph has been taught to use a more
|
||||
robust way to tell if two object directories refer to the same
|
||||
thing.
|
||||
(merge a7df60cac8 tb/commit-graph-object-dir later to maint).
|
||||
|
||||
* "git remote rename X Y" needs to adjust configuration variables
|
||||
(e.g. branch.<name>.remote) whose value used to be X to Y.
|
||||
branch.<name>.pushRemote is now also updated.
|
||||
|
||||
* Update to doc-diff.
|
||||
|
||||
* Doc markup fix.
|
||||
|
||||
* "git check-ignore" did not work when the given path is explicitly
|
||||
marked as not ignored with a negative entry in the .gitignore file.
|
||||
|
||||
* The merge-recursive machinery failed to refresh the cache entry for
|
||||
a merge result in a couple of places, resulting in an unnecessary
|
||||
merge failure, which has been fixed.
|
||||
|
||||
* Fix for a bug revealed by a recent change to make the protocol v2
|
||||
the default.
|
||||
|
||||
* In rare cases "git worktree add <path>" could think that <path>
|
||||
was already a registered worktree even when it wasn't and refuse
|
||||
to add the new worktree. This has been corrected.
|
||||
(merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).
|
||||
|
||||
* "git push" should stop from updating a branch that is checked out
|
||||
when receive.denyCurrentBranch configuration is set, but it failed
|
||||
to pay attention to checkouts in secondary worktrees. This has
|
||||
been corrected.
|
||||
(merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).
|
||||
|
||||
* "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
|
||||
checked it out, even when the BRANCH is checked out in a different
|
||||
worktree. This has been corrected.
|
||||
(merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).
|
||||
|
||||
* "git describe" in a repository with multiple root commits sometimes
|
||||
gave up looking for the best tag to describe a given commit with
|
||||
too early, which has been adjusted.
|
||||
|
||||
* "git merge signed-tag" while lacking the public key started to say
|
||||
"No signature", which was utterly wrong. This regression has been
|
||||
reverted.
|
||||
|
||||
* MinGW's poll() emulation has been improved.
|
||||
|
||||
* "git show" and others gave an object name in raw format in its
|
||||
error output, which has been corrected to give it in hex.
|
||||
|
||||
* "git fetch" over HTTP walker protocol did not show any progress
|
||||
output. We inherently do not know how much work remains, but still
|
||||
we can show something not to bore users.
|
||||
(merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).
|
||||
|
||||
* Both "git ls-remote -h" and "git grep -h" give short usage help,
|
||||
like any other Git subcommand, but it is not unreasonable to expect
|
||||
that the former would behave the same as "git ls-remote --head"
|
||||
(there is no other sensible behaviour for the latter). The
|
||||
documentation has been updated in an attempt to clarify this.
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
|
||||
(merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
|
||||
(merge c513a958b6 ss/t6025-modernize later to maint).
|
||||
(merge b441717256 dl/test-must-fail-fixes later to maint).
|
||||
(merge d031049da3 mt/sparse-checkout-doc-update later to maint).
|
||||
(merge 145136a95a jc/skip-prefix later to maint).
|
||||
(merge 5290d45134 jk/alloc-cleanups later to maint).
|
||||
(merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
|
||||
(merge 517b60564e rs/strbuf-insertstr later to maint).
|
||||
(merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
|
||||
(merge de26f02db1 js/test-avoid-pipe later to maint).
|
||||
(merge a2dc43414c es/doc-mentoring later to maint).
|
||||
(merge 02bbbe9df9 es/worktree-cleanup later to maint).
|
||||
(merge 2ce6d075fa rs/micro-cleanups later to maint).
|
||||
(merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
|
||||
(merge 3c29e21eb0 ma/test-cleanup later to maint).
|
||||
(merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
|
||||
(merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
|
||||
(merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
|
||||
(merge fd0bc17557 kk/complete-diff-color-moved later to maint).
|
||||
(merge 65bf820d0e en/test-cleanup later to maint).
|
@ -1,5 +0,0 @@
|
||||
Git v2.26.1 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges the security fix that appears in v2.17.4; see
|
||||
the release notes for that version for details.
|
@ -1,5 +0,0 @@
|
||||
Git v2.26.2 Release Notes
|
||||
=========================
|
||||
|
||||
This release merges the security fix that appears in v2.17.5; see
|
||||
the release notes for that version for details.
|
@ -1,525 +0,0 @@
|
||||
Git 2.27 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.26
|
||||
-------------------
|
||||
|
||||
Backward compatibility notes
|
||||
|
||||
* When "git describe C" finds that commit C is pointed by a signed or
|
||||
annotated tag, which records T as its tagname in the object, the
|
||||
command gives T as its answer. Even if the user renames or moves
|
||||
such a tag from its natural location in the "refs/tags/" hierarchy,
|
||||
"git describe C" would still give T as the answer, but in such a
|
||||
case "git show T^0" would no longer work as expected. There may be
|
||||
nothing at "refs/tags/T" or even worse there may be a different tag
|
||||
instead.
|
||||
|
||||
Starting from this version, "git describe" will always use the
|
||||
"long" version, as if the "--long" option were given, when giving
|
||||
its output based on such a misplaced tag to work around the problem.
|
||||
|
||||
* "git pull" issues a warning message until the pull.rebase
|
||||
configuration variable is explicitly given, which some existing
|
||||
users may find annoying---those who prefer not to rebase need to
|
||||
set the variable to false to squelch the warning.
|
||||
|
||||
* The transport protocol version 2, which was promoted to the default
|
||||
in Git 2.26 release, turned out to have some remaining rough edges,
|
||||
so it has been demoted from the default.
|
||||
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* A handful of options to configure SSL when talking to proxies have
|
||||
been added.
|
||||
|
||||
* Smudge/clean conversion filters are now given more information
|
||||
(e.g. the object of the tree-ish in which the blob being converted
|
||||
appears, in addition to its path, which has already been given).
|
||||
|
||||
* When "git describe C" finds an annotated tag with tagname A to be
|
||||
the best name to explain commit C, and the tag is stored in a
|
||||
"wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
|
||||
command gave a warning message but used A (not B) to describe C.
|
||||
If C is exactly at the tag, the describe output would be "A", but
|
||||
"git rev-parse A^0" would not be equal as "git rev-parse C^0". The
|
||||
behavior of the command has been changed to use the "long" form
|
||||
i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.
|
||||
|
||||
* "git pull" learned to warn when no pull.rebase configuration
|
||||
exists, and neither --[no-]rebase nor --ff-only is given (which
|
||||
would result a merge).
|
||||
|
||||
* "git p4" learned four new hooks and also "--no-verify" option to
|
||||
bypass them (and the existing "p4-pre-submit" hook).
|
||||
|
||||
* "git pull" shares many options with underlying "git fetch", but
|
||||
some of them were not documented and some of those that would make
|
||||
sense to pass down were not passed down.
|
||||
|
||||
* "git rebase" learned the "--no-gpg-sign" option to countermand
|
||||
commit.gpgSign the user may have.
|
||||
|
||||
* The output from "git format-patch" uses RFC 2047 encoding for
|
||||
non-ASCII letters on From: and Subject: headers, so that it can
|
||||
directly be fed to e-mail programs. A new option has been added
|
||||
to produce these headers in raw.
|
||||
|
||||
* "git log" learned "--show-pulls" that helps pathspec limited
|
||||
history views; a merge commit that takes the whole change from a
|
||||
side branch, which is normally omitted from the output, is shown
|
||||
in addition to the commits that introduce real changes.
|
||||
|
||||
* The interactive input from various codepaths are consolidated and
|
||||
any prompt possibly issued earlier are fflush()ed before we read.
|
||||
|
||||
* Allow "git rebase" to reapply all local commits, even if the may be
|
||||
already in the upstream, without checking first.
|
||||
|
||||
* The 'pack.useSparse' configuration variable now defaults to 'true',
|
||||
enabling an optimization that has been experimental since Git 2.21.
|
||||
|
||||
* "git rebase" happens to call some hooks meant for "checkout" and
|
||||
"commit" by this was not a designed behaviour than historical
|
||||
accident. This has been documented.
|
||||
|
||||
* "git merge" learns the "--autostash" option.
|
||||
|
||||
* "sparse-checkout" UI improvements.
|
||||
|
||||
* "git update-ref --stdin" learned a handful of new verbs to let the
|
||||
user control ref update transactions more explicitly, which helps
|
||||
as an ingredient to implement two-phase commit-style atomic
|
||||
ref-updates across multiple repositories.
|
||||
|
||||
* "git commit-graph write" learned different ways to write out split
|
||||
files.
|
||||
|
||||
* Introduce an extension to the commit-graph to make it efficient to
|
||||
check for the paths that were modified at each commit using Bloom
|
||||
filters.
|
||||
|
||||
* The approxidate parser learns to parse seconds with fraction and
|
||||
ignore fractional part.
|
||||
|
||||
* The userdiff patterns for Markdown documents have been added.
|
||||
|
||||
* The sparse-checkout patterns have been forbidden from excluding all
|
||||
paths, leaving an empty working tree, for a long time. This
|
||||
limitation has been lifted.
|
||||
|
||||
* "git restore --staged --worktree" now defaults to take the contents
|
||||
out of "HEAD", instead of erring out.
|
||||
|
||||
* "git p4" learned to recover from a (broken) state where a directory
|
||||
and a file are recorded at the same path in the Perforce repository
|
||||
the same way as their clients do.
|
||||
|
||||
* "git multi-pack-index repack" has been taught to honor some
|
||||
repack.* configuration variables.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* The advise API has been revamped to allow more systematic enumeration of
|
||||
advice knobs in the future.
|
||||
|
||||
* SHA-256 transition continues.
|
||||
|
||||
* The code to interface with GnuPG has been refactored.
|
||||
|
||||
* "git stash" has kept an escape hatch to use the scripted version
|
||||
for a few releases, which got stale. It has been removed.
|
||||
|
||||
* Enable tests that require GnuPG on Windows.
|
||||
|
||||
* Minor test usability improvement.
|
||||
|
||||
* Trace2 enhancement to allow logging of the environment variables.
|
||||
|
||||
* Test clean-up continues.
|
||||
|
||||
* Perf-test update.
|
||||
|
||||
* A Windows-specific test element has been made more robust against
|
||||
misuse from both user's environment and programmer's errors.
|
||||
|
||||
* Various tests have been updated to work around issues found with
|
||||
shell utilities that come with busybox etc.
|
||||
|
||||
* The config API made mixed uses of int and size_t types to represent
|
||||
length of various pieces of text it parsed, which has been updated
|
||||
to use the correct type (i.e. size_t) throughout.
|
||||
|
||||
* The "--decorate-refs" and "--decorate-refs-exclude" options "git
|
||||
log" takes have learned a companion configuration variable
|
||||
log.excludeDecoration that sits at the lowest priority in the
|
||||
family.
|
||||
|
||||
* A new CI job to build and run test suite on linux with musl libc
|
||||
has been added.
|
||||
|
||||
* Update the CI configuration to use GitHub Actions, retiring the one
|
||||
based on Azure Pipelines.
|
||||
|
||||
* The directory traversal code had redundant recursive calls which
|
||||
made its performance characteristics exponential with respect to
|
||||
the depth of the tree, which was corrected.
|
||||
|
||||
* "git blame" learns to take advantage of the "changed-paths" Bloom
|
||||
filter stored in the commit-graph file.
|
||||
|
||||
* The "bugreport" tool has been added.
|
||||
|
||||
* The object walk with object filter "--filter=tree:0" can now take
|
||||
advantage of the pack bitmap when available.
|
||||
|
||||
* Instead of always building all branches at GitHub via Actions,
|
||||
users can specify which branches to build.
|
||||
|
||||
* Codepaths that show progress meter have been taught to also use the
|
||||
start_progress() and the stop_progress() calls as a "region" to be
|
||||
traced.
|
||||
|
||||
* Instead of downloading Windows SDK for CI jobs for windows builds
|
||||
from an external site (wingit.blob.core.windows.net), use the one
|
||||
created in the windows-build job, to work around quota issues at
|
||||
the external site.
|
||||
|
||||
|
||||
Fixes since v2.26
|
||||
-----------------
|
||||
|
||||
* The real_path() convenience function can easily be misused; with a
|
||||
bit of code refactoring in the callers' side, its use has been
|
||||
eliminated.
|
||||
(merge 49d3c4b481 am/real-path-fix later to maint).
|
||||
|
||||
* Update "git p4" to work with Python 3.
|
||||
(merge 6bb40ed20a yz/p4-py3 later to maint).
|
||||
|
||||
* The mechanism to prevent "git commit" from making an empty commit
|
||||
or amending during an interrupted cherry-pick was broken during the
|
||||
rewrite of "git rebase" in C, which has been corrected.
|
||||
(merge 430b75f720 pw/advise-rebase-skip later to maint).
|
||||
|
||||
* Fix "git checkout --recurse-submodules" of a nested submodule
|
||||
hierarchy.
|
||||
(merge 846f34d351 pb/recurse-submodules-fix later to maint).
|
||||
|
||||
* The "--fork-point" mode of "git rebase" regressed when the command
|
||||
was rewritten in C back in 2.20 era, which has been corrected.
|
||||
(merge f08132f889 at/rebase-fork-point-regression-fix later to maint).
|
||||
|
||||
* The import-tars importer (in contrib/fast-import/) used to create
|
||||
phony files at the top-level of the repository when the archive
|
||||
contains global PAX headers, which made its own logic to detect and
|
||||
omit the common leading directory ineffective, which has been
|
||||
corrected.
|
||||
(merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).
|
||||
|
||||
* Simplify the commit ancestry connectedness check in a partial clone
|
||||
repository in which "promised" objects are assumed to be obtainable
|
||||
lazily on-demand from promisor remote repositories.
|
||||
(merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).
|
||||
|
||||
* The server-end of the v2 protocol to serve "git clone" and "git
|
||||
fetch" was not prepared to see a delim packets at unexpected
|
||||
places, which led to a crash.
|
||||
(merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).
|
||||
|
||||
* When fed a midx that records no objects, some codepaths tried to
|
||||
loop from 0 through (num_objects-1), which, due to integer
|
||||
arithmetic wrapping around, made it nonsense operation with out of
|
||||
bounds array accesses. The code has been corrected to reject such
|
||||
an midx file.
|
||||
(merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).
|
||||
|
||||
* Utitiles run via the run_command() API were not spawned correctly
|
||||
on Cygwin, when the paths to them are given as a full path with
|
||||
backslashes.
|
||||
(merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).
|
||||
|
||||
* "git pull --rebase" tried to run a rebase even after noticing that
|
||||
the pull results in a fast-forward and no rebase is needed nor
|
||||
sensible, for the past few years due to a mistake nobody noticed.
|
||||
(merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).
|
||||
|
||||
* "git rebase" with the merge backend did not work well when the
|
||||
rebase.abbreviateCommands configuration was set.
|
||||
(merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).
|
||||
|
||||
* The logic to auto-follow tags by "git clone --single-branch" was
|
||||
not careful to avoid lazy-fetching unnecessary tags, which has been
|
||||
corrected.
|
||||
(merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).
|
||||
|
||||
* "git rebase -i" did not leave the reflog entries correctly.
|
||||
(merge 1f6965f994 en/sequencer-reflog-action later to maint).
|
||||
|
||||
* The more aggressive updates to remote-tracking branches we had for
|
||||
the past 7 years or so were not reflected in the documentation,
|
||||
which has been corrected.
|
||||
(merge a44088435c pb/pull-fetch-doc later to maint).
|
||||
|
||||
* We've left the command line parsing of "git log :/a/b/" broken for
|
||||
about a full year without anybody noticing, which has been
|
||||
corrected.
|
||||
(merge 0220461071 jc/missing-ref-store-fix later to maint).
|
||||
|
||||
* Misc fixes for Windows.
|
||||
(merge 3efc128cd5 js/mingw-fixes later to maint).
|
||||
|
||||
* "git rebase" (again) learns to honor "--no-keep-empty", which lets
|
||||
the user to discard commits that are empty from the beginning (as
|
||||
opposed to the ones that become empty because of rebasing). The
|
||||
interactive rebase also marks commits that are empty in the todo.
|
||||
(merge 50ed76148a en/rebase-no-keep-empty later to maint).
|
||||
|
||||
* Parsing the host part out of URL for the credential helper has been corrected.
|
||||
(merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).
|
||||
|
||||
* Document the recommended way to abort a failing test early (e.g. by
|
||||
exiting a loop), which is to say "return 1".
|
||||
(merge 7cc112dc95 jc/doc-test-leaving-early later to maint).
|
||||
|
||||
* The code that refreshes the last access and modified time of
|
||||
on-disk packfiles and loose object files have been updated.
|
||||
(merge 312cd76130 lr/freshen-file-fix later to maint).
|
||||
|
||||
* Validation of push certificate has been made more robust against
|
||||
timing attacks.
|
||||
(merge 719483e547 bc/constant-memequal later to maint).
|
||||
|
||||
* The custom hash function used by "git fast-import" has been
|
||||
replaced with the one from hashmap.c, which gave us a nice
|
||||
performance boost.
|
||||
(merge d8410a816b jk/fast-import-use-hashmap later to maint).
|
||||
|
||||
* The "git submodule" command did not initialize a few variables it
|
||||
internally uses and was affected by variable settings leaked from
|
||||
the environment.
|
||||
(merge 65d100c4dd lx/submodule-clear-variables later to maint).
|
||||
|
||||
* Raise the minimum required version of docbook-xsl package to 1.74,
|
||||
as 1.74.0 was from late 2008, which is more than 10 years old, and
|
||||
drop compatibility cruft from our documentation suite.
|
||||
(merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).
|
||||
|
||||
* "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
|
||||
(merge 88acccda38 jc/log-no-mailmap later to maint).
|
||||
|
||||
* "git commit-graph write --expire-time=<timestamp>" did not use the
|
||||
given timestamp correctly, which has been corrected.
|
||||
(merge b09b785c78 ds/commit-graph-expiry-fix later to maint).
|
||||
|
||||
* Tests update to use "test-chmtime" instead of "touch -t".
|
||||
(merge e892a56845 ds/t5319-touch-fix later to maint).
|
||||
|
||||
* "git diff" in a partial clone learned to avoid lazy loading blob
|
||||
objects in more casese when they are not needed.
|
||||
(merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).
|
||||
|
||||
* "git push --atomic" used to show failures for refs that weren't
|
||||
even pushed, which has been corrected.
|
||||
(merge dfe1b7f19c jx/atomic-push later to maint).
|
||||
|
||||
* Code in builtin/*, i.e. those can only be called from within
|
||||
built-in subcommands, that implements bulk of a couple of
|
||||
subcommands have been moved to libgit.a so that they could be used
|
||||
by others.
|
||||
(merge 9460fd48b5 dl/libify-a-few later to maint).
|
||||
|
||||
* Allowing the user to split a patch hunk while "git stash -p" does
|
||||
not work well; a band-aid has been added to make this (partially)
|
||||
work better.
|
||||
|
||||
* "git diff-tree --pretty --notes" used to hit an assertion failure,
|
||||
as it forgot to initialize the notes subsystem.
|
||||
(merge 5778b22b3d tb/diff-tree-with-notes later to maint).
|
||||
|
||||
* "git range-diff" fixes.
|
||||
(merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).
|
||||
|
||||
* "git grep" did not quote a path with unusual character like other
|
||||
commands (like "git diff", "git status") do, but did quote when run
|
||||
from a subdirectory, both of which has been corrected.
|
||||
(merge 45115d8490 mt/grep-cquote-path later to maint).
|
||||
|
||||
* GNU/Hurd is also among the ones that need the fopen() wrapper.
|
||||
(merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).
|
||||
|
||||
* Those fetching over protocol v2 from linux-next and other kernel
|
||||
repositories are reporting that v2 often fetches way too much than
|
||||
needed.
|
||||
(merge 11c7f2a30b jn/demote-proto2-from-default later to maint).
|
||||
|
||||
* The upload-pack protocol v2 gave up too early before finding a
|
||||
common ancestor, resulting in a wasteful fetch from a fork of a
|
||||
project. This has been corrected to match the behaviour of v0
|
||||
protocol.
|
||||
(merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint).
|
||||
|
||||
* The build procedure did not use the libcurl library and its include
|
||||
files correctly for a custom-built installation.
|
||||
(merge 0573831950 jk/build-with-right-curl later to maint).
|
||||
|
||||
* Tighten "git mailinfo" to notice and error out when decoded result
|
||||
contains NUL in it.
|
||||
(merge 3919997447 dd/mailinfo-with-nul later to maint).
|
||||
|
||||
* Fix in-core inconsistency after fetching into a shallow repository
|
||||
that broke the code to write out commit-graph.
|
||||
(merge 37b9dcabfc tb/reset-shallow later to maint).
|
||||
|
||||
* The commit-graph code exhausted file descriptors easily when it
|
||||
does not have to.
|
||||
(merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint).
|
||||
|
||||
* The multi-pack-index left mmapped file descriptors open when it
|
||||
does not have to.
|
||||
(merge 6c7ff7cf7f ds/multi-pack-index later to maint).
|
||||
|
||||
* Recent update to Homebrew used by macOS folks breaks build by
|
||||
moving gettext library and necessary headers.
|
||||
(merge a0b3108618 ds/build-homebrew-gettext-fix later to maint).
|
||||
|
||||
* Incompatible options "--root" and "--fork-point" of "git rebase"
|
||||
have been marked and documented as being incompatible.
|
||||
(merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint).
|
||||
|
||||
* Error and verbose trace messages from "git push" did not redact
|
||||
credential material embedded in URLs.
|
||||
(merge d192fa5006 js/anonymise-push-url-in-errors later to maint).
|
||||
|
||||
* Update the parser used for credential.<URL>.<variable>
|
||||
configuration, to handle <URL>s with '/' in them correctly.
|
||||
(merge b44d0118ac bc/wildcard-credential later to maint).
|
||||
|
||||
* Recent updates broke parsing of "credential.<url>.<key>" where
|
||||
<url> is not a full URL (e.g. [credential "https://"] helper = ...)
|
||||
stopped working, which has been corrected.
|
||||
(merge 9a121b0d22 js/partial-urlmatch-2.17 later to maint).
|
||||
(merge cd93e6c029 js/partial-urlmatch later to maint).
|
||||
|
||||
* Some of the files commit-graph subsystem keeps on disk did not
|
||||
correctly honor the core.sharedRepository settings and some were
|
||||
left read-write.
|
||||
|
||||
* In error messages that "git switch" mentions its option to create a
|
||||
new branch, "-b/-B" options were shown, where "-c/-C" options
|
||||
should be, which has been corrected.
|
||||
(merge 7c16ef7577 dl/switch-c-option-in-error-message later to maint).
|
||||
|
||||
* With the recent tightening of the code that is used to parse
|
||||
various parts of a URL for use in the credential subsystem, a
|
||||
hand-edited credential-store file causes the credential helper to
|
||||
die, which is a bit too harsh to the users. Demote the error
|
||||
behaviour to just ignore and keep using well-formed lines instead.
|
||||
(merge c03859a665 cb/credential-store-ignore-bogus-lines later to maint).
|
||||
|
||||
* The samples in the credential documentation has been updated to
|
||||
make it clear that we depict what would appear in the .git/config
|
||||
file, by adding appropriate quotes as needed..
|
||||
(merge 177681a07e jk/credential-sample-update later to maint).
|
||||
|
||||
* "git branch" and other "for-each-ref" variants accepted multiple
|
||||
--sort=<key> options in the increasing order of precedence, but it
|
||||
had a few breakages around "--ignore-case" handling, and tie-breaking
|
||||
with the refname, which have been fixed.
|
||||
(merge 7c5045fc18 jk/for-each-ref-multi-key-sort-fix later to maint).
|
||||
|
||||
* The coding guideline for shell scripts instructed to refer to a
|
||||
variable with dollar-sign inside arithmetic expansion to work
|
||||
around a bug in old versions of dash, which is a thing of the past.
|
||||
Now we are not forbidden from writing $((var+1)).
|
||||
(merge 32b5fe7f0e jk/arith-expansion-coding-guidelines later to maint).
|
||||
|
||||
* The <stdlib.h> header on NetBSD brings in its own definition of
|
||||
hmac() function (eek), which conflicts with our own and unrelated
|
||||
function with the same name. Our function has been renamed to work
|
||||
around the issue.
|
||||
(merge 3013118eb8 cb/avoid-colliding-with-netbsd-hmac later to maint).
|
||||
|
||||
* The basic test did not honor $TEST_SHELL_PATH setting, which has
|
||||
been corrected.
|
||||
(merge 0555e4af58 cb/t0000-use-the-configured-shell later to maint).
|
||||
|
||||
* Minor in-code comments and documentation updates around credential
|
||||
API.
|
||||
(merge 1aed817f99 cb/credential-doc-fixes later to maint).
|
||||
|
||||
* Teach "am", "commit", "merge" and "rebase", when they are run with
|
||||
the "--quiet" option, to pass "--quiet" down to "gc --auto".
|
||||
(merge 7c3e9e8cfb jc/auto-gc-quiet later to maint).
|
||||
|
||||
* The code to skip unmerged paths in the index when sparse checkout
|
||||
is in use would have made out-of-bound access of the in-core index
|
||||
when the last path was unmerged, which has been corrected.
|
||||
|
||||
* Serving a "git fetch" client over "git://" and "ssh://" protocols
|
||||
using the on-wire protocol version 2 was buggy on the server end
|
||||
when the client needs to make a follow-up request to
|
||||
e.g. auto-follow tags.
|
||||
(merge 08450ef791 cc/upload-pack-v2-fetch-fix later to maint).
|
||||
|
||||
* "git bisect replay" had trouble with input files when they used
|
||||
CRLF line ending, which has been corrected.
|
||||
(merge 6c722cbe5a cw/bisect-replay-with-dos later to maint).
|
||||
|
||||
* "rebase -i" segfaulted when rearranging a sequence that has a
|
||||
fix-up that applies another fix-up (which may or may not be a
|
||||
fix-up of yet another step).
|
||||
(merge 02471e7e20 js/rebase-autosquash-double-fixup-fix later to maint).
|
||||
|
||||
* "git fsck" ensures that the paths recorded in tree objects are
|
||||
sorted and without duplicates, but it failed to notice a case where
|
||||
a blob is followed by entries that sort before a tree with the same
|
||||
name. This has been corrected.
|
||||
(merge 9068cfb20f rs/fsck-duplicate-names-in-trees later to maint).
|
||||
|
||||
* Code clean-up by removing a compatibility implementation of a
|
||||
function we no longer use.
|
||||
(merge 84b0115f0d cb/no-more-gmtime later to maint).
|
||||
|
||||
* When a binary file gets modified and renamed on both sides of history
|
||||
to different locations, both files would be written to the working
|
||||
tree but both would have the contents from "ours". This has been
|
||||
corrected so that the path from each side gets their original content.
|
||||
|
||||
* Fix for a copy-and-paste error introduced during 2.20 era.
|
||||
(merge e68a5272b1 ds/multi-pack-verify later to maint).
|
||||
|
||||
* Update an unconditional use of "grep -a" with a perl script in a test.
|
||||
(merge 1eb7371236 dd/t5703-grep-a-fix later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge 564956f358 jc/maintain-doc later to maint).
|
||||
(merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
|
||||
(merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
|
||||
(merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
|
||||
(merge 8312aa7d74 jc/config-tar later to maint).
|
||||
(merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
|
||||
(merge 64d1022e14 ar/test-style-fixes later to maint).
|
||||
(merge 4a465443a6 ds/doc-clone-filter later to maint).
|
||||
(merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
|
||||
(merge d3507cc712 js/test-junit-finalization-fix later to maint).
|
||||
(merge 2149b6748f bc/faq later to maint).
|
||||
(merge 12dc0879f1 jk/test-cleanup later to maint).
|
||||
(merge 344420bf0f pb/rebase-doc-typofix later to maint).
|
||||
(merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
|
||||
(merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
|
||||
(merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
|
||||
(merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
|
||||
(merge a1aba0c95c js/t0007-typofix later to maint).
|
||||
(merge 76ba7fa225 ma/config-doc-fix later to maint).
|
||||
(merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
|
||||
(merge 88eaf361e0 eb/mboxrd-doc later to maint).
|
||||
(merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
|
||||
(merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).
|
||||
(merge 4d9378bfad eb/gitweb-more-trailers later to maint).
|
||||
(merge bdccbf7047 mt/doc-worktree-ref later to maint).
|
||||
(merge ce9baf234f dl/push-recurse-submodules-fix later to maint).
|
||||
(merge 4153274052 bc/doc-credential-helper-value later to maint).
|
||||
(merge 5c7bb0146e jc/codingstyle-compare-with-null later to maint).
|
@ -1,236 +0,0 @@
|
||||
Git 2.28 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.27
|
||||
-------------------
|
||||
|
||||
Backward compatibility notes
|
||||
|
||||
* "fetch.writeCommitGraph" is deemed to be still a bit too risky and
|
||||
is no longer part of the "feature.experimental" set.
|
||||
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* The commands in the "diff" family learned to honor "diff.relative"
|
||||
configuration variable.
|
||||
|
||||
* The check in "git fsck" to ensure that the tree objects are sorted
|
||||
still had corner cases it missed unsorted entries.
|
||||
|
||||
* The interface to redact sensitive information in the trace output
|
||||
has been simplified.
|
||||
|
||||
* The command line completion (in contrib/) learned to complete
|
||||
options that the "git switch" command takes.
|
||||
|
||||
* "git diff" used to take arguments in random and nonsense range
|
||||
notation, e.g. "git diff A..B C", "git diff A..B C...D", etc.,
|
||||
which has been cleaned up.
|
||||
|
||||
* "git diff-files" has been taught to say paths that are marked as
|
||||
intent-to-add are new files, not modified from an empty blob.
|
||||
|
||||
* "git status" learned to report the status of sparse checkout.
|
||||
|
||||
* "git difftool" has trouble dealing with paths added to the index
|
||||
with the intent-to-add bit.
|
||||
|
||||
* "git fast-export --anonymize" learned to take customized mapping to
|
||||
allow its users to tweak its output more usable for debugging.
|
||||
|
||||
* The command line completion support (in contrib/) used to be
|
||||
prepared to work with "set -u" but recent changes got a bit more
|
||||
sloppy. This has been corrected.
|
||||
|
||||
* "git gui" now allows opening work trees from the start-up dialog.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Code optimization for a common case.
|
||||
(merge 8777616e4d an/merge-single-strategy-optim later to maint).
|
||||
|
||||
* We've adopted a convention that any on-stack structure can be
|
||||
initialized to have zero values in all fields with "= { 0 }",
|
||||
even when the first field happens to be a pointer, but sparse
|
||||
complained that a null pointer should be spelled NULL for a long
|
||||
time. Start using -Wno-universal-initializer option to squelch
|
||||
it (the latest sparse has it on by default).
|
||||
|
||||
* "git log -L..." now takes advantage of the "which paths are touched
|
||||
by this commit?" info stored in the commit-graph system.
|
||||
|
||||
* As FreeBSD is not the only platform whose regexp library reports
|
||||
a REG_ILLSEQ error when fed invalid UTF-8, add logic to detect that
|
||||
automatically and skip the affected tests.
|
||||
|
||||
* "git bugreport" learns to report what shell is in use.
|
||||
|
||||
* Support for GIT_CURL_VERBOSE has been rewritten in terms of
|
||||
GIT_TRACE_CURL.
|
||||
|
||||
* Preliminary clean-ups around refs API, plus file format
|
||||
specification documentation for the reftable backend.
|
||||
|
||||
* Workaround breakage in MSVC build, where "curl-config --cflags"
|
||||
gives settings appropriate for GCC build.
|
||||
|
||||
* Code clean-up of "git clean" resulted in a fix of recent
|
||||
performance regression.
|
||||
|
||||
* Code clean-up in the codepath that serves "git fetch" continues.
|
||||
|
||||
* "git merge-base --is-ancestor" is taught to take advantage of the
|
||||
commit graph.
|
||||
|
||||
* Rewrite of parts of the scripted "git submodule" Porcelain command
|
||||
continues; this time it is "git submodule set-branch" subcommand's
|
||||
turn.
|
||||
|
||||
* The "fetch/clone" protocol has been updated to allow the server to
|
||||
instruct the clients to grab pre-packaged packfile(s) in addition
|
||||
to the packed object data coming over the wire.
|
||||
|
||||
* A misdesigned strbuf_write_fd() function has been retired.
|
||||
|
||||
* SHA-256 migration work continues, including CVS/SVN interface.
|
||||
|
||||
* A few fields in "struct commit" that do not have to always be
|
||||
present have been moved to commit slabs.
|
||||
|
||||
* API cleanup for get_worktrees()
|
||||
|
||||
* By renumbering object flag bits, "struct object" managed to lose
|
||||
bloated inter-field padding.
|
||||
|
||||
* The name of the primary branch in existing repositories, and the
|
||||
default name used for the first branch in newly created
|
||||
repositories, is made configurable, so that we can eventually wean
|
||||
ourselves off of the hardcoded 'master'.
|
||||
|
||||
* The effort to avoid using test_must_fail on non-git command continues.
|
||||
|
||||
* In 2.28-rc0, we corrected a bug that some repository extensions are
|
||||
honored by mistake even in a version 0 repositories (these
|
||||
configuration variables in extensions.* namespace were supposed to
|
||||
have special meaning in repositories whose version numbers are 1 or
|
||||
higher), but this was a bit too big a change. The behaviour in
|
||||
recent versions of Git where certain extensions.* were honored by
|
||||
mistake even in version 0 repositories has been restored.
|
||||
|
||||
|
||||
Fixes since v2.27
|
||||
-----------------
|
||||
|
||||
* The "--prepare-p4-only" option of "git p4" is supposed to stop
|
||||
after replaying one changeset, but kept going (by mistake?)
|
||||
|
||||
* The error message from "git checkout -b foo -t bar baz" was
|
||||
confusing.
|
||||
|
||||
* Some repositories in the wild have commits that record nonsense
|
||||
committer timezone (e.g. rails.git); "git fast-import" learned an
|
||||
option to pass these nonsense timestamps intact to allow recreating
|
||||
existing repositories as-is.
|
||||
(merge d42a2fb72f en/fast-import-looser-date later to maint).
|
||||
|
||||
* The command line completion script (in contrib/) tried to complete
|
||||
"git stash -p" as if it were "git stash push -p", but it was too
|
||||
aggressive and also affected "git stash show -p", which has been
|
||||
corrected.
|
||||
(merge fffd0cf520 vs/complete-stash-show-p-fix later to maint).
|
||||
|
||||
* On-the-wire protocol v2 easily falls into a deadlock between the
|
||||
remote-curl helper and the fetch-pack process when the server side
|
||||
prematurely throws an error and disconnects. The communication has
|
||||
been updated to make it more robust.
|
||||
|
||||
* "git checkout -p" did not handle a newly added path at all.
|
||||
(merge 2c8bd8471a js/checkout-p-new-file later to maint).
|
||||
|
||||
* The code to parse "git bisect start" command line was lax in
|
||||
validating the arguments.
|
||||
(merge 4d9005ff5d cb/bisect-helper-parser-fix later to maint).
|
||||
|
||||
* Reduce memory usage during "diff --quiet" in a worktree with too
|
||||
many stat-unmatched paths.
|
||||
(merge d2d7fbe129 jk/diff-memuse-optim-with-stat-unmatch later to maint).
|
||||
|
||||
* The reflog entries for "git clone" and "git fetch" did not
|
||||
anonymize the URL they operated on.
|
||||
(merge 46da295a77 js/reflog-anonymize-for-clone-and-fetch later to maint).
|
||||
|
||||
* The behaviour of "sparse-checkout" in the state "git clone
|
||||
--no-checkout" left was changed accidentally in 2.27, which has
|
||||
been corrected.
|
||||
|
||||
* Use of negative pathspec, while collecting paths including
|
||||
untracked ones in the working tree, was broken.
|
||||
|
||||
* The same worktree directory must be registered only once, but
|
||||
"git worktree move" allowed this invariant to be violated, which
|
||||
has been corrected.
|
||||
(merge 810382ed37 es/worktree-duplicate-paths later to maint).
|
||||
|
||||
* The effect of sparse checkout settings on submodules is documented.
|
||||
(merge e7d7c73249 en/sparse-with-submodule-doc later to maint).
|
||||
|
||||
* Code clean-up around "git branch" with a minor bugfix.
|
||||
(merge dc44639904 dl/branch-cleanup later to maint).
|
||||
|
||||
* A branch name used in a test has been clarified to match what is
|
||||
going on.
|
||||
(merge 08dc26061f pb/t4014-unslave later to maint).
|
||||
|
||||
* An in-code comment in "git diff" has been updated.
|
||||
(merge c592fd4c83 dl/diff-usage-comment-update later to maint).
|
||||
|
||||
* The documentation and some tests have been adjusted for the recent
|
||||
renaming of "pu" branch to "seen".
|
||||
(merge 6dca5dbf93 js/pu-to-seen later to maint).
|
||||
|
||||
* The code to push changes over "dumb" HTTP had a bad interaction
|
||||
with the commit reachability code due to incorrect allocation of
|
||||
object flag bits, which has been corrected.
|
||||
(merge 64472d15e9 bc/http-push-flagsfix later to maint).
|
||||
|
||||
* "git send-email --in-reply-to=<msg>" did not use the In-Reply-To:
|
||||
header with the value given from the command line, and let it be
|
||||
overridden by the value on In-Reply-To: header in the messages
|
||||
being sent out (if exists).
|
||||
(merge f9f60d7066 ra/send-email-in-reply-to-from-command-line-wins later to maint).
|
||||
|
||||
* "git log -Lx,y:path --before=date" lost track of where the range
|
||||
should be because it didn't take the changes made by the youngest
|
||||
commits that are omitted from the output into account.
|
||||
|
||||
* When "fetch.writeCommitGraph" configuration is set in a shallow
|
||||
repository and a fetch moves the shallow boundary, we wrote out
|
||||
broken commit-graph files that do not match the reality, which has
|
||||
been corrected.
|
||||
|
||||
* "git checkout" failed to catch an error from fstat() after updating
|
||||
a path in the working tree.
|
||||
(merge 35e6e212fd mt/entry-fstat-fallback-fix later to maint).
|
||||
|
||||
* When an aliased command, whose output is piped to a pager by git,
|
||||
gets killed by a signal, the pager got into a funny state, which
|
||||
has been corrected (again).
|
||||
(merge c0d73a59c9 ta/wait-on-aliased-commands-upon-signal later to maint).
|
||||
|
||||
* The code to produce progress output from "git commit-graph --write"
|
||||
had a few breakages, which have been fixed.
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge 2c31a7aa44 jx/pkt-line-doc-count-fix later to maint).
|
||||
(merge d63ae31962 cb/t5608-cleanup later to maint).
|
||||
(merge 788db145c7 dl/t-readme-spell-git-correctly later to maint).
|
||||
(merge 45a87a83bb dl/python-2.7-is-the-floor-version later to maint).
|
||||
(merge b75a219904 es/advertise-contribution-doc later to maint).
|
||||
(merge 0c9a4f638a rs/pull-leakfix later to maint).
|
||||
(merge d546fe2874 rs/commit-reach-leakfix later to maint).
|
||||
(merge 087bf5409c mk/pb-pretty-email-without-domain-part-fix later to maint).
|
||||
(merge 5f4ee57ad9 es/worktree-code-cleanup later to maint).
|
||||
(merge 0172f7834a cc/cat-file-usage-update later to maint).
|
||||
(merge 81de0c01cf ma/rebase-doc-typofix later to maint).
|
@ -1,514 +0,0 @@
|
||||
Git 2.29 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.28
|
||||
-------------------
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* "git help log" has been enhanced by sharing more material from the
|
||||
documentation for the underlying "git rev-list" command.
|
||||
|
||||
* "git for-each-ref --format=<>" learned %(contents:size).
|
||||
|
||||
* "git merge" learned to selectively omit " into <branch>" at the end
|
||||
of the title of default merge message with merge.suppressDest
|
||||
configuration.
|
||||
|
||||
* The component to respond to "git fetch" request is made more
|
||||
configurable to selectively allow or reject object filtering
|
||||
specification used for partial cloning.
|
||||
|
||||
* Stop when "sendmail.*" configuration variables are defined, which
|
||||
could be a mistaken attempt to define "sendemail.*" variables.
|
||||
|
||||
* The existing backends for "git mergetool" based on variants of vim
|
||||
have been refactored and then support for "nvim" has been added.
|
||||
|
||||
* "git bisect" learns the "--first-parent" option to find the first
|
||||
breakage along the first-parent chain.
|
||||
|
||||
* "git log --first-parent -p" showed patches only for single-parent
|
||||
commits on the first-parent chain; the "--first-parent" option has
|
||||
been made to imply "-m". Use "--no-diff-merges" to restore the
|
||||
previous behaviour to omit patches for merge commits.
|
||||
|
||||
* The commit labels used to explain each side of conflicted hunks
|
||||
placed by the sequencer machinery have been made more readable by
|
||||
humans.
|
||||
|
||||
* The "--batch-size" option of "git multi-pack-index repack" command
|
||||
is now used to specify that very small packfiles are collected into
|
||||
one until the total size roughly exceeds it.
|
||||
|
||||
* The recent addition of SHA-256 support is marked as experimental in
|
||||
the documentation.
|
||||
|
||||
* "git fetch" learned --no-write-fetch-head option to avoid writing
|
||||
the FETCH_HEAD file.
|
||||
|
||||
* Command line completion (in contrib/) usually omits redundant,
|
||||
deprecated and/or dangerous options from its output; it learned to
|
||||
optionally include all of them.
|
||||
|
||||
* The output from the "diff" family of the commands had abbreviated
|
||||
object names of blobs involved in the patch, but its length was not
|
||||
affected by the --abbrev option. Now it is.
|
||||
|
||||
* "git worktree" gained a "repair" subcommand to help users recover
|
||||
after moving the worktrees or repository manually without telling
|
||||
Git. Also, "git init --separate-git-dir" no longer corrupts
|
||||
administrative data related to linked worktrees.
|
||||
|
||||
* The "--format=" option to the "for-each-ref" command and friends
|
||||
learned a few more tricks, e.g. the ":short" suffix that applies to
|
||||
"objectname" now also can be used for "parent", "tree", etc.
|
||||
|
||||
* "git worktree add" learns that the "-d" is a synonym to "--detach"
|
||||
option to create a new worktree without being on a branch.
|
||||
|
||||
* "format-patch --range-diff=<prev> <origin>..HEAD" has been taught
|
||||
not to ignore <origin> when <prev> is a single version.
|
||||
|
||||
* "add -p" now allows editing paths that were only added in intent.
|
||||
|
||||
* The 'meld' backend of the "git mergetool" learned to give the
|
||||
underlying 'meld' the '--auto-merge' option, which would help
|
||||
reduce the amount of text that requires manual merging.
|
||||
|
||||
* "git for-each-ref" and friends that list refs used to allow only
|
||||
one --merged or --no-merged to filter them; they learned to take
|
||||
combination of both kind of filtering.
|
||||
|
||||
* "git maintenance", a "git gc"'s big brother, has been introduced to
|
||||
take care of more repository maintenance tasks, not limited to the
|
||||
object database cleaning.
|
||||
|
||||
* "git receive-pack" that accepts requests by "git push" learned to
|
||||
outsource most of the ref updates to the new "proc-receive" hook.
|
||||
|
||||
* "git push" that wants to be atomic and wants to send push
|
||||
certificate learned not to prepare and sign the push certificate
|
||||
when it fails the local check (hence due to atomicity it is known
|
||||
that no certificate is needed).
|
||||
|
||||
* "git commit-graph write" learned to limit the number of bloom
|
||||
filters that are computed from scratch with the --max-new-filters
|
||||
option.
|
||||
|
||||
* The transport protocol v2 has become the default again.
|
||||
|
||||
* The installation procedure learned to optionally omit "git-foo"
|
||||
executable files for each 'foo' built-in subcommand, which are only
|
||||
required by old timers that still rely on the age old promise that
|
||||
prepending "git --exec-path" output to PATH early in their script
|
||||
will keep the "git-foo" calls they wrote working.
|
||||
|
||||
* The command line completion (in contrib/) learned that "git restore
|
||||
-s <TAB>" is often followed by a refname.
|
||||
|
||||
* "git shortlog" has been taught to group commits by the contents of
|
||||
the trailer lines, like "Reviewed-by:", "Coauthored-by:", etc.
|
||||
|
||||
* "git archive" learns the "--add-file" option to include untracked
|
||||
files into a snapshot from a tree-ish.
|
||||
|
||||
* "git fetch" and "git push" support negative refspecs.
|
||||
|
||||
* "git format-patch" learns to take "whenAble" as a possible value
|
||||
for the format.useAutoBase configuration variable to become no-op
|
||||
when the automatically computed base does not make sense.
|
||||
|
||||
* Credential helpers are now allowed to terminate lines with CRLF
|
||||
line ending, as well as LF line ending.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* The changed-path Bloom filter is improved using ideas from an
|
||||
independent implementation.
|
||||
|
||||
* Updates to the changed-paths bloom filter.
|
||||
|
||||
* The test framework has been updated so that most tests will run
|
||||
with predictable (artificial) timestamps.
|
||||
|
||||
* Preliminary clean-up of the refs API in preparation for adding a
|
||||
new refs backend "reftable".
|
||||
|
||||
* Dev support to limit the use of test_must_fail to only git commands.
|
||||
|
||||
* While packing many objects in a repository with a promissor remote,
|
||||
lazily fetching missing objects from the promissor remote one by
|
||||
one may be inefficient---the code now attempts to fetch all the
|
||||
missing objects in batch (obviously this won't work for a lazy
|
||||
clone that lazily fetches tree objects as you cannot even enumerate
|
||||
what blobs are missing until you learn which trees are missing).
|
||||
|
||||
* The pretend-object mechanism checks if the given object already
|
||||
exists in the object store before deciding to keep the data
|
||||
in-core, but the check would have triggered lazy fetching of such
|
||||
an object from a promissor remote.
|
||||
|
||||
* The argv_array API is useful for not just managing argv but any
|
||||
"vector" (NULL-terminated array) of strings, and has seen adoption
|
||||
to a certain degree. It has been renamed to "strvec" to reduce the
|
||||
barrier to adoption.
|
||||
|
||||
* The final leg of SHA-256 transition plus doc updates. Note that
|
||||
there is no interoperability between SHA-1 and SHA-256
|
||||
repositories yet.
|
||||
|
||||
* CMake support to build with MSVC for Windows bypassing the Makefile.
|
||||
|
||||
* A new helper function has_object() has been introduced to make it
|
||||
easier to mark object existence checks that do and don't want to
|
||||
trigger lazy fetches, and a few such checks are converted using it.
|
||||
|
||||
* A no-op replacement function implemented as a C preprocessor macro
|
||||
does not perform as good a job as one implemented as a "static
|
||||
inline" function in catching errors in parameters; replace the
|
||||
former with the latter in <git-compat-util.h> header.
|
||||
|
||||
* Test framework update.
|
||||
(merge d572f52a64 es/test-cmp-typocatcher later to maint).
|
||||
|
||||
* Updates to "git merge" tests, in preparation for a new merge
|
||||
strategy backend.
|
||||
|
||||
* midx and commit-graph files now use the byte defined in their file
|
||||
format specification for identifying the hash function used for
|
||||
object names.
|
||||
|
||||
* The FETCH_HEAD is now always read from the filesystem regardless of
|
||||
the ref backend in use, as its format is much richer than the
|
||||
normal refs, and written directly by "git fetch" as a plain file..
|
||||
|
||||
* An unused binary has been discarded, and and a bunch of commands
|
||||
have been turned into into built-in.
|
||||
|
||||
* A handful of places in in-tree code still relied on being able to
|
||||
execute the git subcommands, especially built-ins, in "git-foo"
|
||||
form, which have been corrected.
|
||||
|
||||
* When a packfile is removed by "git repack", multi-pack-index gets
|
||||
cleared; the code was taught to do so less aggressively by first
|
||||
checking if the midx actually refers to a pack that no longer
|
||||
exists.
|
||||
|
||||
* Internal API clean-up to handle two options "diff-index" and "log"
|
||||
have, which happen to share the same short form, more sensibly.
|
||||
|
||||
* The "add -i/-p" machinery has been written in C but it is not used
|
||||
by default yet. It is made default to those who are participating
|
||||
in feature.experimental experiment.
|
||||
|
||||
* Allow maintainers to tweak $(TAR) invocations done while making
|
||||
distribution tarballs.
|
||||
|
||||
* "git index-pack" learned to resolve deltified objects with greater
|
||||
parallelism.
|
||||
|
||||
* "diff-highlight" (in contrib/) had a logic to flush its output upon
|
||||
seeing a blank line but the way it detected a blank line was broken.
|
||||
|
||||
* The logic to skip testing on the tagged commit and the tag itself
|
||||
was not quite consistent which led to failure of Windows test
|
||||
tasks. It has been revamped to consistently skip revisions that
|
||||
have already been tested, based on the tree object of the revision.
|
||||
|
||||
|
||||
Fixes since v2.28
|
||||
-----------------
|
||||
|
||||
* The "mediawiki" remote backend which lives in contrib/mw-to-git/
|
||||
and is not built with git by default, had an RCE bug allowing a
|
||||
malicious MediaWiki server operator to inject arbitrary commands
|
||||
for execution by a cloning client. This has been fixed.
|
||||
|
||||
The bug was discovered and reported by Joern Schneeweisz of GitLab
|
||||
to the git-security mailing list. Its practical impact due to the
|
||||
obscurity of git-remote-mediawiki was deemed small enough to forgo
|
||||
a dedicated security release.
|
||||
|
||||
* "git clone --separate-git-dir=$elsewhere" used to stomp on the
|
||||
contents of the existing directory $elsewhere, which has been
|
||||
taught to fail when $elsewhere is not an empty directory.
|
||||
(merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint).
|
||||
|
||||
* With the base fix to 2.27 regresion, any new extensions in a v0
|
||||
repository would still be silently honored, which is not quite
|
||||
right. Instead, complain and die loudly.
|
||||
(merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint).
|
||||
|
||||
* Fetching from a lazily cloned repository resulted at the server
|
||||
side in attempts to lazy fetch objects that the client side has,
|
||||
many of which will not be available from the third-party anyway.
|
||||
(merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint).
|
||||
|
||||
* Fix to an ancient bug caused by an over-eager attempt for
|
||||
optimization.
|
||||
(merge a98f7fb366 rs/add-index-entry-optim-fix later to maint).
|
||||
|
||||
* Pushing a ref whose name contains non-ASCII character with the
|
||||
"--force-with-lease" option did not work over smart HTTP protocol,
|
||||
which has been corrected.
|
||||
(merge cd85b447bf bc/push-cas-cquoted-refname later to maint).
|
||||
|
||||
* "git mv src dst", when src is an unmerged path, errored out
|
||||
correctly but with an incorrect error message to claim that src is
|
||||
not tracked, which has been clarified.
|
||||
(merge 9b906af657 ct/mv-unmerged-path-error later to maint).
|
||||
|
||||
* Fix to a regression introduced during 2.27 cycle.
|
||||
(merge cada7308ad en/fill-directory-exponential later to maint).
|
||||
|
||||
* Command line completion (in contrib/) update.
|
||||
(merge 688b87c81b mp/complete-show-color-moved later to maint).
|
||||
|
||||
* All "mergy" operations that internally use the merge-recursive
|
||||
machinery should honor the merge.renormalize configuration, but
|
||||
many of them didn't.
|
||||
|
||||
* Doc cleanup around "worktree".
|
||||
(merge dc9c144be5 es/worktree-doc-cleanups later to maint).
|
||||
|
||||
* The "git blame --first-parent" option was not documented, but now
|
||||
it is.
|
||||
(merge 11bc12ae1e rp/blame-first-parent-doc later to maint).
|
||||
|
||||
* The logic to find the ref transaction hook script attempted to
|
||||
cache the path to the found hook without realizing that it needed
|
||||
to keep a copied value, as the API it used returned a transitory
|
||||
buffer space. This has been corrected.
|
||||
(merge 09b2aa30c9 ps/ref-transaction-hook later to maint).
|
||||
|
||||
* Recent versions of "git diff-files" shows a diff between the index
|
||||
and the working tree for "intent-to-add" paths as a "new file"
|
||||
patch; "git apply --cached" should be able to take "git diff-files"
|
||||
and should act as an equivalent to "git add" for the path, but the
|
||||
command failed to do so for such a path.
|
||||
(merge 4c025c667e rp/apply-cached-with-i-t-a later to maint).
|
||||
|
||||
* "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a
|
||||
bit was not showing the mode bits from the working tree.
|
||||
(merge cb0dd22b82 rp/ita-diff-modefix later to maint).
|
||||
|
||||
* Ring buffer with size 4 used for bin-hex translation resulted in a
|
||||
wrong object name in the sequencer's todo output, which has been
|
||||
corrected.
|
||||
(merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint).
|
||||
|
||||
* When given more than one target line ranges, "git blame -La,b
|
||||
-Lc,d" was over-eager to coalesce groups of original lines and
|
||||
showed incorrect results, which has been corrected.
|
||||
(merge c2ebaa27d6 jk/blame-coalesce-fix later to maint).
|
||||
|
||||
* The regexp to identify the function boundary for FORTRAN programs
|
||||
has been updated.
|
||||
(merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint).
|
||||
|
||||
* A few end-user facing messages have been updated to be
|
||||
hash-algorithm agnostic.
|
||||
(merge 4279000d3e jc/object-names-are-not-sha-1 later to maint).
|
||||
|
||||
* "unlink" emulation on MinGW has been optimized.
|
||||
(merge 680e0b4524 jh/mingw-unlink later to maint).
|
||||
|
||||
* The purpose of "git init --separate-git-dir" is to initialize a
|
||||
new project with the repository separate from the working tree,
|
||||
or, in the case of an existing project, to move the repository
|
||||
(the .git/ directory) out of the working tree. It does not make
|
||||
sense to use --separate-git-dir with a bare repository for which
|
||||
there is no working tree, so disallow its use with bare
|
||||
repositories.
|
||||
(merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint).
|
||||
|
||||
* "ls-files -o" mishandled the top-level directory of another git
|
||||
working tree that hangs in the current git working tree.
|
||||
(merge ab282aa548 en/dir-nonbare-embedded later to maint).
|
||||
|
||||
* Fix some incorrect UNLEAK() annotations.
|
||||
(merge 3e19816dc0 jk/unleak-fixes later to maint).
|
||||
|
||||
* Use more buffered I/O where we used to call many small write(2)s.
|
||||
(merge a698d67b08 rs/more-buffered-io later to maint).
|
||||
|
||||
* The patch-id computation did not ignore the "incomplete last line"
|
||||
marker like whitespaces.
|
||||
(merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint).
|
||||
|
||||
* Updates into a lazy/partial clone with a submodule did not work
|
||||
well with transfer.fsckobjects set.
|
||||
|
||||
* The parser for "git for-each-ref --format=..." was too loose when
|
||||
parsing the "%(trailers...)" atom, and forgot that "trailers" and
|
||||
"trailers:<modifiers>" are the only two allowed forms, which has
|
||||
been corrected.
|
||||
(merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint).
|
||||
|
||||
* Long ago, we decided to use 3 threads by default when running the
|
||||
index-pack task in parallel, which has been adjusted a bit upwards.
|
||||
(merge fbff95b67f jk/index-pack-w-more-threads later to maint).
|
||||
|
||||
* "git restore/checkout --no-overlay" with wildcarded pathspec
|
||||
mistakenly removed matching paths in subdirectories, which has been
|
||||
corrected.
|
||||
(merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint).
|
||||
|
||||
* The description of --cached/--index options in "git apply --help"
|
||||
has been updated.
|
||||
(merge d064702be3 rp/apply-cached-doc later to maint).
|
||||
|
||||
* Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and
|
||||
running "git log --ignore-missing $ZERO_OID" fell back to start
|
||||
digging from HEAD; it has been corrected to become a no-op, like
|
||||
"git log --tags=no-tag-matches-this-pattern" does.
|
||||
(merge 04a0e98515 jk/rev-input-given-fix later to maint).
|
||||
|
||||
* Various callers of run_command API have been modernized.
|
||||
(merge afbdba391e jc/run-command-use-embedded-args later to maint).
|
||||
|
||||
* List of options offered and accepted by "git add -i/-p" were
|
||||
inconsistent, which have been corrected.
|
||||
(merge ce910287e7 pw/add-p-allowed-options-fix later to maint).
|
||||
|
||||
* "git diff --stat -w" showed 0-line changes for paths whose changes
|
||||
were only whitespaces, which was not intuitive. We now omit such
|
||||
paths from the stat output.
|
||||
(merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint).
|
||||
|
||||
* It was possible for xrealloc() to send a non-NULL pointer that has
|
||||
been freed, which has been fixed.
|
||||
(merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint).
|
||||
|
||||
* "git status" has trouble showing where it came from by interpreting
|
||||
reflog entries that record certain events, e.g. "checkout @{u}", and
|
||||
gives a hard/fatal error. Even though it inherently is impossible
|
||||
to give a correct answer because the reflog entries lose some
|
||||
information (e.g. "@{u}" does not record what branch the user was
|
||||
on hence which branch 'the upstream' needs to be computed, and even
|
||||
if the record were available, the relationship between branches may
|
||||
have changed), at least hide the error and allow "status" to show its
|
||||
output.
|
||||
|
||||
* "git status --short" quoted a path with SP in it when tracked, but
|
||||
not those that are untracked, ignored or unmerged. They are all
|
||||
shown quoted consistently.
|
||||
|
||||
* "git diff/show" on a change that involves a submodule used to read
|
||||
the information on commits in the submodule from a wrong repository
|
||||
and gave a wrong information when the commit-graph is involved.
|
||||
(merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint).
|
||||
|
||||
* Unlike "git config --local", "git config --worktree" did not fail
|
||||
early and cleanly when started outside a git repository.
|
||||
(merge 378fe5fc3d mt/config-fail-nongit-early later to maint).
|
||||
|
||||
* There is a logic to estimate how many objects are in the
|
||||
repository, which is meant to run once per process invocation, but
|
||||
it ran every time the estimated value was requested.
|
||||
(merge 67bb65de5d jk/dont-count-existing-objects-twice later to maint).
|
||||
|
||||
* "git remote set-head" that failed still said something that hints
|
||||
the operation went through, which was misleading.
|
||||
(merge 5a07c6c3c2 cs/don-t-pretend-a-failed-remote-set-head-succeeded later to maint).
|
||||
|
||||
* "git fetch --all --ipv4/--ipv6" forgot to pass the protocol options
|
||||
to instances of the "git fetch" that talk to individual remotes,
|
||||
which has been corrected.
|
||||
(merge 4e735c1326 ar/fetch-ipversion-in-all later to maint).
|
||||
|
||||
* The "unshelve" subcommand of "git p4" incorrectly used commit^N
|
||||
where it meant to say commit~N to name the Nth generation
|
||||
ancestor, which has been corrected.
|
||||
(merge 0acbf5997f ld/p4-unshelve-fix later to maint).
|
||||
|
||||
* "git clone" that clones from SHA-1 repository, while
|
||||
GIT_DEFAULT_HASH set to use SHA-256 already, resulted in an
|
||||
unusable repository that half-claims to be SHA-256 repository
|
||||
with SHA-1 objects and refs. This has been corrected.
|
||||
|
||||
* Adjust sample hooks for hash algorithm other than SHA-1.
|
||||
(merge d8d3d632f4 dl/zero-oid-in-hooks later to maint).
|
||||
|
||||
* "git range-diff" showed incorrect diffstat, which has been
|
||||
corrected.
|
||||
|
||||
* Earlier we taught "git pull" to warn when the user does not say the
|
||||
histories need to be merged, rebased or accepts only fast-
|
||||
forwarding, but the warning triggered for those who have set the
|
||||
pull.ff configuration variable.
|
||||
(merge 54200cef86 ah/pull later to maint).
|
||||
|
||||
* Compilation fix around type punning.
|
||||
(merge 176380fd11 jk/drop-unaligned-loads later to maint).
|
||||
|
||||
* "git blame --ignore-rev/--ignore-revs-file" failed to validate
|
||||
their input are valid revision, and failed to take into account
|
||||
that the user may want to give an annotated tag instead of a
|
||||
commit, which has been corrected.
|
||||
(merge 610e2b9240 jc/blame-ignore-fix later to maint).
|
||||
|
||||
* "git bisect start X Y", when X and Y are not valid committish
|
||||
object names, should take X and Y as pathspec, but didn't.
|
||||
(merge 73c6de06af cc/bisect-start-fix later to maint).
|
||||
|
||||
* The explanation of the "scissors line" has been clarified.
|
||||
(merge 287416dba6 eg/mailinfo-doc-scissors later to maint).
|
||||
|
||||
* A race that leads to an access to a free'd data was corrected in
|
||||
the codepath that reads pack files.
|
||||
(merge bda959c476 mt/delta-base-cache-races later to maint).
|
||||
|
||||
* in_merge_bases_many(), a way to see if a commit is reachable from
|
||||
any commit in a set of commits, was totally broken when the
|
||||
commit-graph feature was in use, which has been corrected.
|
||||
(merge 8791bf1841 ds/in-merge-bases-many-optim-bug later to maint).
|
||||
|
||||
* "git submodule update --quiet" did not squelch underlying "rebase"
|
||||
and "pull" commands.
|
||||
(merge 3ad0401e9e td/submodule-update-quiet later to maint).
|
||||
|
||||
* The lazy fetching done internally to make missing objects available
|
||||
in a partial clone incorrectly made permanent damage to the partial
|
||||
clone filter in the repository, which has been corrected.
|
||||
|
||||
* "log -c --find-object=X" did not work well to find a merge that
|
||||
involves a change to an object X from only one parent.
|
||||
(merge 957876f17d jk/diff-cc-oidfind-fix later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge 84544f2ea3 sk/typofixes later to maint).
|
||||
(merge b17f411ab5 ar/help-guides-doc later to maint).
|
||||
(merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint).
|
||||
(merge 861c4ce141 en/typofixes later to maint).
|
||||
(merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint).
|
||||
(merge e2bfa50ac3 jb/doc-packfile-name later to maint).
|
||||
(merge 918d8ff780 es/worktree-cleanup later to maint).
|
||||
(merge dc156bc31f ma/t1450-quotefix later to maint).
|
||||
(merge 56e743426b en/merge-recursive-comment-fixes later to maint).
|
||||
(merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint).
|
||||
(merge de20baf2c9 ny/notes-doc-sample-update later to maint).
|
||||
(merge f649aaaf82 so/rev-parser-errormessage-fix later to maint).
|
||||
(merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint).
|
||||
(merge ac900fddb7 ma/stop-progress-null-fix later to maint).
|
||||
(merge e767963ab6 rs/upload-pack-sigchain-fix later to maint).
|
||||
(merge a831908599 rs/preserve-merges-unused-code-removal later to maint).
|
||||
(merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint).
|
||||
(merge 847b37271e pb/set-url-docfix later to maint).
|
||||
(merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint).
|
||||
(merge ce820cbd58 dl/subtree-docs later to maint).
|
||||
(merge 55fe225dde jk/leakfix later to maint).
|
||||
(merge ee22a29215 so/pretty-abbrev-doc later to maint).
|
||||
(merge 3100fd5588 jc/post-checkout-doc later to maint).
|
||||
(merge 17bae89476 pb/doc-external-diff-env later to maint).
|
||||
(merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint).
|
||||
(merge 1302badd16 ea/blame-use-oideq later to maint).
|
||||
(merge e6d5a11fed al/t3200-back-on-a-branch later to maint).
|
||||
(merge 324efcf6b6 pw/add-p-leakfix later to maint).
|
||||
(merge 1c6ffb546b jk/add-i-fixes later to maint).
|
||||
(merge e40e936551 cd/commit-graph-doc later to maint).
|
||||
(merge 0512eabd91 jc/sequencer-stopped-sha-simplify later to maint).
|
||||
(merge d01141de5a so/combine-diff-simplify later to maint).
|
||||
(merge 3be01e5ab1 sn/fast-import-doc later to maint).
|
@ -1,11 +0,0 @@
|
||||
Git v2.29.1 Release Notes
|
||||
=========================
|
||||
|
||||
This is to fix the build procedure change in 2.28 where we failed to
|
||||
install a few programs that should be installed in /usr/bin (namely,
|
||||
receive-pack, upload-archive and upload-pack) when the non-default
|
||||
SKIP_DASHED_BUILT_INS installation option is in effect.
|
||||
|
||||
A minor glitch in a non-default installation may usually not deserve
|
||||
a hotfix, but I know Git for Windows ship binaries built with this
|
||||
option, so let's make an exception.
|
@ -1,12 +0,0 @@
|
||||
Git v2.29.2 Release Notes
|
||||
=========================
|
||||
|
||||
This release is primarily to fix brown-paper-bag breakages in the
|
||||
2.29.0 release.
|
||||
|
||||
Fixes since v2.29.1
|
||||
-------------------
|
||||
|
||||
* In 2.29, "--committer-date-is-author-date" option of "rebase" and
|
||||
"am" subcommands lost the e-mail address by mistake, which has been
|
||||
corrected.
|
@ -12,7 +12,7 @@ Fixes since v2.3.2
|
||||
* Description given by "grep -h" for its --exclude-standard option
|
||||
was phrased poorly.
|
||||
|
||||
* Documentation for "git remote add" mentioned "--tags" and
|
||||
* Documentaton for "git remote add" mentioned "--tags" and
|
||||
"--no-tags" and it was not clear that fetch from the remote in
|
||||
the future will use the default behaviour when neither is given
|
||||
to override it.
|
||||
|
@ -4,7 +4,7 @@ Git v2.3.7 Release Notes
|
||||
Fixes since v2.3.6
|
||||
------------------
|
||||
|
||||
* An earlier update to the parser that dissects a URL broke an
|
||||
* An earlier update to the parser that disects a URL broke an
|
||||
address, followed by a colon, followed by an empty string (instead
|
||||
of the port number), e.g. ssh://example.com:/path/to/repo.
|
||||
|
||||
|
@ -1,401 +0,0 @@
|
||||
Git 2.30 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.29
|
||||
-------------------
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* Userdiff for PHP update.
|
||||
|
||||
* Userdiff for Rust update.
|
||||
|
||||
* Userdiff for CSS update.
|
||||
|
||||
* The command line completion script (in contrib/) learned that "git
|
||||
stash show" takes the options "git diff" takes.
|
||||
|
||||
* "git worktree list" now shows if each worktree is locked. This
|
||||
possibly may open us to show other kinds of states in the future.
|
||||
|
||||
* "git maintenance", an extended big brother of "git gc", continues
|
||||
to evolve.
|
||||
|
||||
* "git push --force-with-lease[=<ref>]" can easily be misused to lose
|
||||
commits unless the user takes good care of their own "git fetch".
|
||||
A new option "--force-if-includes" attempts to ensure that what is
|
||||
being force-pushed was created after examining the commit at the
|
||||
tip of the remote ref that is about to be force-replaced.
|
||||
|
||||
* "git clone" learned clone.defaultremotename configuration variable
|
||||
to customize what nickname to use to call the remote the repository
|
||||
was cloned from.
|
||||
|
||||
* "git checkout" learned to use checkout.guess configuration variable
|
||||
and enable/disable its "--[no-]guess" option accordingly.
|
||||
|
||||
* "git resurrect" script (in contrib/) learned that the object names
|
||||
may be longer than 40-hex depending on the hash function in use.
|
||||
|
||||
* "git diff A...B" learned "git diff --merge-base A B", which is a
|
||||
longer short-hand to say the same thing.
|
||||
|
||||
* A sample 'push-to-checkout' hook, that performs the same as
|
||||
what the built-in default action does, has been added.
|
||||
|
||||
* "git diff" family of commands learned the "-I<regex>" option to
|
||||
ignore hunks whose changed lines all match the given pattern.
|
||||
|
||||
* The userdiff pattern learned to identify the function definition in
|
||||
POSIX shells and bash.
|
||||
|
||||
* "git checkout-index" did not consistently signal an error with its
|
||||
exit status, but now it does.
|
||||
|
||||
* A commit and tag object may have CR at the end of each and
|
||||
every line (you can create such an object with hash-object or
|
||||
using --cleanup=verbatim to decline the default clean-up
|
||||
action), but it would make it impossible to have a blank line
|
||||
to separate the title from the body of the message. We are now
|
||||
more lenient and accept a line with lone CR on it as a blank line,
|
||||
too.
|
||||
|
||||
* Exit codes from "git remote add" etc. were not usable by scripted
|
||||
callers, but now they are.
|
||||
|
||||
* "git archive" now allows compression level higher than "-9"
|
||||
when generating tar.gz output.
|
||||
|
||||
* Zsh autocompletion (in contrib/) update.
|
||||
|
||||
* The maximum length of output filenames "git format-patch" creates
|
||||
has become configurable (used to be capped at 64).
|
||||
|
||||
* "git rev-parse" learned the "--end-of-options" to help scripts to
|
||||
safely take a parameter that is supposed to be a revision, e.g.
|
||||
"git rev-parse --verify -q --end-of-options $rev".
|
||||
|
||||
* The command line completion script (in contrib/) learned to expand
|
||||
commands that are alias of alias.
|
||||
|
||||
* "git update-ref --stdin" learns to take multiple transactions in a
|
||||
single session.
|
||||
|
||||
* Various subcommands of "git config" that take value_regex
|
||||
learned the "--literal-value" option to take the value_regex option
|
||||
as a literal string.
|
||||
|
||||
* The transport layer was taught to optionally exchange the session
|
||||
ID assigned by the trace2 subsystem during fetch/push transactions.
|
||||
|
||||
* "git imap-send" used to ignore configuration variables like
|
||||
core.askpass; this has been corrected.
|
||||
|
||||
* "git $cmd $args", when $cmd is not a recognised subcommand, by
|
||||
default tries to see if $cmd is a typo of an existing subcommand
|
||||
and optionally executes the corrected command if there is only one
|
||||
possibility, depending on the setting of help.autocorrect; the
|
||||
users can now disable the whole thing, including the cycles spent
|
||||
to find a likely typo, by setting the configuration variable to
|
||||
'never'.
|
||||
|
||||
* "@" sometimes worked (e.g. "git push origin @:there") as a part of
|
||||
a refspec element, but "git push origin @" did not work, which has
|
||||
been corrected.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* Use "git archive" more to produce the release tarball.
|
||||
|
||||
* GitHub Actions automated test improvement to skip tests on a tree
|
||||
identical to what has already been tested.
|
||||
|
||||
* Test-coverage for running commit-graph task "git maintenance" has
|
||||
been extended.
|
||||
|
||||
* Our test scripts can be told to run only individual pieces while
|
||||
skipping others with the "--run=..." option; they were taught to
|
||||
take a substring of test title, in addition to numbers, to name the
|
||||
test pieces to run.
|
||||
|
||||
* Adjust tests so that they won't scream when the default initial
|
||||
branch name is different from 'master'.
|
||||
|
||||
* Rewriting "git bisect" in C continues.
|
||||
|
||||
* More preliminary tests have been added to document desired outcomes
|
||||
of various "directory rename" situations.
|
||||
|
||||
* Micro clean-up of a couple of test scripts.
|
||||
|
||||
* "git diff" and other commands that share the same machinery to
|
||||
compare with working tree files have been taught to take advantage
|
||||
of the fsmonitor data when available.
|
||||
|
||||
* The code to detect premature EOF in the sideband demultiplexer has
|
||||
been cleaned up.
|
||||
|
||||
* "git fetch --depth=<n>" over the stateless RPC / smart HTTP
|
||||
transport handled EOF from the client poorly at the server end.
|
||||
|
||||
* A specialization of hashmap that uses a string as key has been
|
||||
introduced. Hopefully it will see wider use over time.
|
||||
|
||||
* "git bisect start/next" in a large span of history spends a lot of
|
||||
time trying to come up with exactly the half-way point; this can be
|
||||
optimized by stopping when we see a commit that is close enough to
|
||||
the half-way point.
|
||||
|
||||
* A lazily defined test prerequisite can now be defined in terms of
|
||||
another lazily defined test prerequisite.
|
||||
|
||||
* Expectation for the original contributor after responding to a
|
||||
review comment to use the explanation in a patch update has been
|
||||
described.
|
||||
|
||||
* Multiple "credential-store" backends can race to lock the same
|
||||
file, causing everybody else but one to fail---reattempt locking
|
||||
with some timeout to reduce the rate of the failure.
|
||||
|
||||
* "git-parse-remote" shell script library outlived its usefulness.
|
||||
|
||||
* Like die() and error(), a call to warning() will also trigger a
|
||||
trace2 event.
|
||||
|
||||
* Use of non-reentrant localtime() has been removed.
|
||||
|
||||
* Non-reentrant time-related library functions and ctime/asctime with
|
||||
awkward calling interfaces are banned from the codebase.
|
||||
|
||||
|
||||
Fixes since v2.29
|
||||
-----------------
|
||||
|
||||
* In 2.29, "--committer-date-is-author-date" option of "rebase" and
|
||||
"am" subcommands lost the e-mail address by mistake, which has been
|
||||
corrected.
|
||||
(merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint).
|
||||
|
||||
* "git checkout -p A...B [-- <path>]" did not work, even though the
|
||||
same command without "-p" correctly used the merge-base between
|
||||
commits A and B.
|
||||
(merge 35166b1fb5 dl/checkout-p-merge-base later to maint).
|
||||
|
||||
* The side-band status report can be sent at the same time as the
|
||||
primary payload multiplexed, but the demultiplexer on the receiving
|
||||
end incorrectly split a single status report into two, which has
|
||||
been corrected.
|
||||
(merge 712b0377db js/avoid-split-sideband-message later to maint).
|
||||
|
||||
* "git fast-import" wasted a lot of memory when many marks were in use.
|
||||
(merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint).
|
||||
|
||||
* A test helper "test_cmp A B" was taught to diagnose missing files A
|
||||
or B as a bug in test, but some tests legitimately wanted to notice
|
||||
a failure to even create file B as an error, in addition to leaving
|
||||
the expected result in it, and were misdiagnosed as a bug. This
|
||||
has been corrected.
|
||||
(merge 262d5ad5a5 es/test-cmp-typocatcher later to maint).
|
||||
|
||||
* When "git commit-graph" detects the same commit recorded more than
|
||||
once while it is merging the layers, it used to die. The code now
|
||||
ignores all but one of them and continues.
|
||||
(merge 85102ac71b ds/commit-graph-merging-fix later to maint).
|
||||
|
||||
* The meaning of a Signed-off-by trailer can vary from project to
|
||||
project; this and also what it means to this project has been
|
||||
clarified in the documentation.
|
||||
(merge 3abd4a67d9 bk/sob-dco later to maint).
|
||||
|
||||
* "git credential' didn't honor the core.askPass configuration
|
||||
variable (among other things), which has been corrected.
|
||||
(merge 567ad2c0f9 tk/credential-config later to maint).
|
||||
|
||||
* Dev support to catch a tentative definition of a variable in our C
|
||||
code as an error.
|
||||
(merge 5539183622 jk/no-common later to maint).
|
||||
|
||||
* "git rebase --rebase-merges" did not correctly pass --gpg-sign
|
||||
command line option to underlying "git merge" when replaying a merge
|
||||
using non-default merge strategy or when replaying an octopus merge
|
||||
(because replaying a two-head merge with the default strategy was
|
||||
done in a separate codepath, the problem did not trigger for most
|
||||
users), which has been corrected.
|
||||
(merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint).
|
||||
|
||||
* "git apply -R" did not handle patches that touch the same path
|
||||
twice correctly, which has been corrected. This is most relevant
|
||||
in a patch that changes a path from a regular file to a symbolic
|
||||
link (and vice versa).
|
||||
(merge b0f266de11 jt/apply-reverse-twice later to maint).
|
||||
|
||||
* A recent oid->hash conversion missed one spot, breaking "git svn".
|
||||
(merge 03bb366de4 bc/svn-hash-oid-fix later to maint).
|
||||
|
||||
* The documentation on the "--abbrev=<n>" option did not say the
|
||||
output may be longer than "<n>" hexdigits, which has been
|
||||
clarified.
|
||||
(merge cda34e0d0c jc/abbrev-doc later to maint).
|
||||
|
||||
* "git p4" now honors init.defaultBranch configuration.
|
||||
(merge 1b09d1917f js/p4-default-branch later to maint).
|
||||
|
||||
* Recently the format of an internal state file "rebase -i" uses has
|
||||
been tightened up for consistency, which would hurt those who start
|
||||
"rebase -i" with old git and then continue with new git. Loosen
|
||||
the reader side a bit (which we may want to tighten again in a year
|
||||
or so).
|
||||
(merge c779386182 jc/sequencer-stopped-sha-simplify later to maint).
|
||||
|
||||
* The code to see if "git stash drop" can safely remove refs/stash
|
||||
has been made more careful.
|
||||
(merge 4f44c5659b rs/empty-reflog-check-fix later to maint).
|
||||
|
||||
* "git log -L<range>:<path>" is documented to take no pathspec, but
|
||||
this was not enforced by the command line option parser, which has
|
||||
been corrected.
|
||||
(merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint).
|
||||
|
||||
* "git format-patch --output=there" did not work as expected and
|
||||
instead crashed. The option is now supported.
|
||||
(merge dc1672dd10 jk/format-patch-output later to maint).
|
||||
|
||||
* Define ARM64 compiled with MSVC to be little-endian.
|
||||
(merge 0c038fc65a dg/bswap-msvc later to maint).
|
||||
|
||||
* "git rebase -i" did not store ORIG_HEAD correctly.
|
||||
(merge 8843302307 pw/rebase-i-orig-head later to maint).
|
||||
|
||||
* "git blame -L :funcname -- path" did not work well for a path for
|
||||
which a userdiff driver is defined.
|
||||
|
||||
* "make DEVELOPER=1 sparse" used to run sparse and let it emit
|
||||
warnings; now such warnings will cause an error.
|
||||
(merge 521dc56270 jc/sparse-error-for-developer-build later to maint).
|
||||
|
||||
* "git blame --ignore-revs-file=<file>" learned to ignore a
|
||||
non-existent object name in the input, instead of complaining.
|
||||
(merge c714d05875 jc/blame-ignore-fix later to maint).
|
||||
|
||||
* Running "git diff" while allowing external diff in a state with
|
||||
unmerged paths used to segfault, which has been corrected.
|
||||
(merge d66851806f jk/diff-release-filespec-fix later to maint).
|
||||
|
||||
* Build configuration cleanup.
|
||||
(merge b990f02fd8 ab/config-mak-uname-simplify later to maint).
|
||||
|
||||
* Fix regression introduced when nvimdiff support in mergetool was added.
|
||||
(merge 12026f46e7 pd/mergetool-nvimdiff later to maint).
|
||||
|
||||
* The exchange between receive-pack and proc-receive hook did not
|
||||
carefully check for errors.
|
||||
|
||||
* The code was not prepared to deal with pack .idx file that is
|
||||
larger than 4GB.
|
||||
(merge 81c4c5cf2e jk/4gb-idx later to maint).
|
||||
|
||||
* Since jgit does not yet work with SHA-256 repositories, mark the
|
||||
tests that use it not to run unless we are testing with ShA-1
|
||||
repositories.
|
||||
(merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint).
|
||||
|
||||
* Config parser fix for "git notes".
|
||||
(merge 45fef1599a na/notes-displayref-is-not-boolean later to maint).
|
||||
|
||||
* Move a definition of compatibility wrapper from cache.h to
|
||||
git-compat-util.h
|
||||
(merge a76b138daa hn/sleep-millisec-decl later to maint).
|
||||
|
||||
* Error message fix.
|
||||
(merge eaf5341538 km/stash-error-message-fix later to maint).
|
||||
|
||||
* "git pull --rebase --recurse-submodules" checked for local changes
|
||||
in a wrong range and failed to run correctly when it should.
|
||||
(merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint).
|
||||
|
||||
* "git push" that is killed may leave a pack-objects process behind,
|
||||
still computing to find a good compression, wasting cycles. This
|
||||
has been corrected.
|
||||
(merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint).
|
||||
|
||||
* "git fetch" that is killed may leave a pack-objects process behind,
|
||||
still computing to find a good compression, wasting cycles. This
|
||||
has been corrected.
|
||||
(merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint).
|
||||
|
||||
* "git add -i" failed to honor custom colors configured to show
|
||||
patches, which has been corrected.
|
||||
(merge 96386faa03 js/add-i-color-fix later to maint).
|
||||
|
||||
* Processes that access packdata while the .idx file gets removed
|
||||
(e.g. while repacking) did not fail or fall back gracefully as they
|
||||
could.
|
||||
(merge 506ec2fbda tb/idx-midx-race-fix later to maint).
|
||||
|
||||
* "git apply" adjusted the permission bits of working-tree files and
|
||||
directories according to core.sharedRepository setting by mistake and
|
||||
for a long time, which has been corrected.
|
||||
(merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint).
|
||||
|
||||
* "fetch-pack" could pass NULL pointer to unlink(2) when it sees an
|
||||
invalid filename; the error checking has been tightened to make
|
||||
this impossible.
|
||||
(merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint).
|
||||
|
||||
* "git maintenance run/start/stop" needed to be run in a repository
|
||||
to hold the lockfile they use, but didn't make sure they are
|
||||
actually in a repository, which has been corrected.
|
||||
|
||||
* The glossary described a branch as an "active" line of development,
|
||||
which is misleading---a stale and non-moving branch is still a
|
||||
branch.
|
||||
(merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint).
|
||||
|
||||
* Newer versions of xsltproc can assign IDs in HTML documents it
|
||||
generates in a consistent manner. Use the feature to help format
|
||||
HTML version of the user manual reproducibly.
|
||||
(merge 3569e11d69 ae/doc-reproducible-html later to maint).
|
||||
|
||||
* Tighten error checking in the codepath that responds to "git fetch".
|
||||
(merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint).
|
||||
|
||||
* "git pack-redundant" when there is only one packfile used to crash,
|
||||
which has been corrected.
|
||||
(merge 0696232390 jx/pack-redundant-on-single-pack later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint).
|
||||
(merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint).
|
||||
(merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint).
|
||||
(merge 6db29ab213 jk/fast-import-marks-cleanup later to maint).
|
||||
(merge e5cf6d3df4 nk/dir-c-comment-update later to maint).
|
||||
(merge 5710dcce74 jk/report-fn-typedef later to maint).
|
||||
(merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint).
|
||||
(merge 4e1bee9a99 js/t7006-cleanup later to maint).
|
||||
(merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint).
|
||||
(merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint).
|
||||
(merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint).
|
||||
(merge 9542d56379 sd/prompt-local-variable later to maint).
|
||||
(merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint).
|
||||
(merge b7e20b4373 mc/typofix later to maint).
|
||||
(merge f6bcd9a8a4 js/test-whitespace-fixes later to maint).
|
||||
(merge 53b67a801b js/test-file-size later to maint).
|
||||
(merge 970909c2a7 rs/hashwrite-be64 later to maint).
|
||||
(merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint).
|
||||
(merge 1c3e412916 rs/archive-plug-leak-refname later to maint).
|
||||
(merge d44e5267ea rs/plug-diff-cache-leak later to maint).
|
||||
(merge 793c1464d3 ab/gc-keep-base-option later to maint).
|
||||
(merge b86339b12b mt/worktree-error-message-fix later to maint).
|
||||
(merge e01ae2a4a7 js/pull-rebase-use-advise later to maint).
|
||||
(merge e63d774242 sn/config-doc-typofix later to maint).
|
||||
(merge 08e9df2395 jk/multi-line-indent-style-fix later to maint).
|
||||
(merge e66590348a da/vs-build-iconv-fix later to maint).
|
||||
(merge 7fe07275be js/cmake-extra-built-ins-fix later to maint).
|
||||
(merge 633eebe142 jb/midx-doc-update later to maint).
|
||||
(merge 5885367e8f jh/index-v2-doc-on-fsmn later to maint).
|
||||
(merge 14639a4779 jc/compat-util-setitimer-fix later to maint).
|
||||
(merge 56f56ac50b ab/unreachable-break later to maint).
|
||||
(merge 731d578b4f rb/nonstop-config-mak-uname-update later to maint).
|
||||
(merge f4698738f9 es/perf-export-fix later to maint).
|
||||
(merge 773c694142 nk/refspecs-negative-fix later to maint).
|
@ -1,55 +0,0 @@
|
||||
Git v2.30.1 Release Notes
|
||||
=========================
|
||||
|
||||
This release is primarily to merge fixes accumulated on the 'master'
|
||||
front to prepare for 2.31 release that are still relevant to 2.30.x
|
||||
maintenance track.
|
||||
|
||||
Fixes since v2.30
|
||||
-----------------
|
||||
|
||||
* "git fetch --recurse-submodules" failed to update a submodule
|
||||
when it has an uninitialized (hence of no interest to the user)
|
||||
sub-submodule, which has been corrected.
|
||||
|
||||
* Command line error of "git rebase" are diagnosed earlier.
|
||||
|
||||
* "git stash" did not work well in a sparsely checked out working
|
||||
tree.
|
||||
|
||||
* Some tests expect that "ls -l" output has either '-' or 'x' for
|
||||
group executable bit, but setgid bit can be inherited from parent
|
||||
directory and make these fields 'S' or 's' instead, causing test
|
||||
failures.
|
||||
|
||||
* "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
|
||||
any repository when the configuration variable <var> is not defined
|
||||
even once.
|
||||
|
||||
* "git mergetool --tool-help" was broken in 2.29 and failed to list
|
||||
all the available tools.
|
||||
|
||||
* Fix for procedure to building CI test environment for mac.
|
||||
|
||||
* Newline characters in the host and path part of git:// URL are
|
||||
now forbidden.
|
||||
|
||||
* When more than one commit with the same patch ID appears on one
|
||||
side, "git log --cherry-pick A...B" did not exclude them all when a
|
||||
commit with the same patch ID appears on the other side. Now it
|
||||
does.
|
||||
|
||||
* Documentation for "git fsck" lost stale bits that has become
|
||||
incorrect.
|
||||
|
||||
* Doc for packfile URI feature has been clarified.
|
||||
|
||||
* The implementation of "git branch --sort" wrt the detached HEAD
|
||||
display has always been hacky, which has been cleaned up.
|
||||
|
||||
* Our setting of GitHub CI test jobs were a bit too eager to give up
|
||||
once there is even one failure found. Tweak the knob to allow
|
||||
other jobs keep running even when we see a failure, so that we can
|
||||
find more failures in a single run.
|
||||
|
||||
Also contains minor documentation updates and code clean-ups.
|
@ -1,358 +0,0 @@
|
||||
Git 2.31 Release Notes
|
||||
======================
|
||||
|
||||
Updates since v2.30
|
||||
-------------------
|
||||
|
||||
Backward incompatible and other important changes
|
||||
|
||||
* The "pack-redundant" command, which has been left stale with almost
|
||||
unusable performance issues, now warns loudly when it gets used, as
|
||||
we no longer want to recommend its use (instead just "repack -d"
|
||||
instead).
|
||||
|
||||
* The development community has adopted Contributor Covenant v2.0 to
|
||||
update from v1.4 that we have been using.
|
||||
|
||||
* The support for deprecated PCRE1 library has been dropped.
|
||||
|
||||
|
||||
UI, Workflows & Features
|
||||
|
||||
* The "--format=%(trailers)" mechanism gets enhanced to make it
|
||||
easier to design output for machine consumption.
|
||||
|
||||
* When a user does not tell "git pull" to use rebase or merge, the
|
||||
command gives a loud message telling a user to choose between
|
||||
rebase or merge but creates a merge anyway, forcing users who would
|
||||
want to rebase to redo the operation. Fix an early part of this
|
||||
problem by tightening the condition to give the message---there is
|
||||
no reason to stop or force the user to choose between rebase or
|
||||
merge if the history fast-forwards.
|
||||
|
||||
* The configuration variable 'core.abbrev' can be set to 'no' to
|
||||
force no abbreviation regardless of the hash algorithm.
|
||||
|
||||
* "git rev-parse" can be explicitly told to give output as absolute
|
||||
or relative path with the `--path-format=(absolute|relative)` option.
|
||||
|
||||
* Bash completion (in contrib/) update to make it easier for
|
||||
end-users to add completion for their custom "git" subcommands.
|
||||
|
||||
* "git maintenance" learned to drive scheduled maintenance on
|
||||
platforms whose native scheduling methods are not 'cron'.
|
||||
|
||||
* After expiring a reflog and making a single commit, the reflog for
|
||||
the branch would record a single entry that knows both @{0} and
|
||||
@{1}, but we failed to answer "what commit were we on?", i.e. @{1}
|
||||
|
||||
* "git bundle" learns "--stdin" option to read its refs from the
|
||||
standard input. Also, it now does not lose refs whey they point
|
||||
at the same object.
|
||||
|
||||
* "git log" learned a new "--diff-merges=<how>" option.
|
||||
|
||||
* "git ls-files" can and does show multiple entries when the index is
|
||||
unmerged, which is a source for confusion unless -s/-u option is in
|
||||
use. A new option --deduplicate has been introduced.
|
||||
|
||||
* `git worktree list` now annotates worktrees as prunable, shows
|
||||
locked and prunable attributes in --porcelain mode, and gained
|
||||
a --verbose option.
|
||||
|
||||
* "git clone" tries to locally check out the branch pointed at by
|
||||
HEAD of the remote repository after it is done, but the protocol
|
||||
did not convey the information necessary to do so when copying an
|
||||
empty repository. The protocol v2 learned how to do so.
|
||||
|
||||
* There are other ways than ".." for a single token to denote a
|
||||
"commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
|
||||
range-diff" did not understand them.
|
||||
|
||||
* The "git range-diff" command learned "--(left|right)-only" option
|
||||
to show only one side of the compared range.
|
||||
|
||||
* "git mergetool" feeds three versions (base, local and remote) of
|
||||
a conflicted path unmodified. The command learned to optionally
|
||||
prepare these files with unconflicted parts already resolved.
|
||||
|
||||
* The .mailmap is documented to be read only from the root level of a
|
||||
working tree, but a stray file in a bare repository also was read
|
||||
by accident, which has been corrected.
|
||||
|
||||
* "git maintenance" tool learned a new "pack-refs" maintenance task.
|
||||
|
||||
* The error message given when a configuration variable that is
|
||||
expected to have a boolean value has been improved.
|
||||
|
||||
* Signed commits and tags now allow verification of objects, whose
|
||||
two object names (one in SHA-1, the other in SHA-256) are both
|
||||
signed.
|
||||
|
||||
* "git rev-list" command learned "--disk-usage" option.
|
||||
|
||||
* "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
|
||||
discard diff output for early paths or move them to the end of the
|
||||
output.
|
||||
|
||||
* "git difftool" learned "--skip-to=<path>" option to restart an
|
||||
interrupted session from an arbitrary path.
|
||||
|
||||
* "git grep" has been tweaked to be limited to the sparse checkout
|
||||
paths.
|
||||
|
||||
* "git rebase --[no-]fork-point" gained a configuration variable
|
||||
rebase.forkPoint so that users do not have to keep specifying a
|
||||
non-default setting.
|
||||
|
||||
|
||||
Performance, Internal Implementation, Development Support etc.
|
||||
|
||||
* A 3-year old test that was not testing anything useful has been
|
||||
corrected.
|
||||
|
||||
* Retire more names with "sha1" in it.
|
||||
|
||||
* The topological walk codepath is covered by new trace2 stats.
|
||||
|
||||
* Update the Code-of-conduct to version 2.0 from the upstream (we've
|
||||
been using version 1.4).
|
||||
|
||||
* "git mktag" validates its input using its own rules before writing
|
||||
a tag object---it has been updated to share the logic with "git
|
||||
fsck".
|
||||
|
||||
* Two new ways to feed configuration variable-value pairs via
|
||||
environment variables have been introduced, and the way
|
||||
GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
|
||||
to make it more robust.
|
||||
|
||||
* Tests have been updated so that they do not to get affected by the
|
||||
name of the default branch "git init" creates.
|
||||
|
||||
* "git fetch" learns to treat ref updates atomically in all-or-none
|
||||
fashion, just like "git push" does, with the new "--atomic" option.
|
||||
|
||||
* The peel_ref() API has been replaced with peel_iterated_oid().
|
||||
|
||||
* The .use_shell flag in struct child_process that is passed to
|
||||
run_command() API has been clarified with a bit more documentation.
|
||||
|
||||
* Document, clean-up and optimize the code around the cache-tree
|
||||
extension in the index.
|
||||
|
||||
* The ls-refs protocol operation has been optimized to narrow the
|
||||
sub-hierarchy of refs/ it walks to produce response.
|
||||
|
||||
* When removing many branches and tags, the code used to do so one
|
||||
ref at a time. There is another API it can use to delete multiple
|
||||
refs, and it makes quite a lot of performance difference when the
|
||||
refs are packed.
|
||||
|
||||
* The "pack-objects" command needs to iterate over all the tags when
|
||||
automatic tag following is enabled, but it actually iterated over
|
||||
all refs and then discarded everything outside "refs/tags/"
|
||||
hierarchy, which was quite wasteful.
|
||||
|
||||
* A perf script was made more portable.
|
||||
|
||||
* Our setting of GitHub CI test jobs were a bit too eager to give up
|
||||
once there is even one failure found. Tweak the knob to allow
|
||||
other jobs keep running even when we see a failure, so that we can
|
||||
find more failures in a single run.
|
||||
|
||||
* We've carried compatibility codepaths for compilers without
|
||||
variadic macros for quite some time, but the world may be ready for
|
||||
them to be removed. Force compilation failure on exotic platforms
|
||||
where variadic macros are not available to find out who screams in
|
||||
such a way that we can easily revert if it turns out that the world
|
||||
is not yet ready.
|
||||
|
||||
* Code clean-up to ensure our use of hashtables using object names as
|
||||
keys use the "struct object_id" objects, not the raw hash values.
|
||||
|
||||
* Lose the debugging aid that may have been useful in the past, but
|
||||
no longer is, in the "grep" codepaths.
|
||||
|
||||
* Some pretty-format specifiers do not need the data in commit object
|
||||
(e.g. "%H"), but we were over-eager to load and parse it, which has
|
||||
been made even lazier.
|
||||
|
||||
* Get rid of "GETTEXT_POISON" support altogether, which may or may
|
||||
not be controversial.
|
||||
|
||||
* Introduce an on-disk file to record revindex for packdata, which
|
||||
traditionally was always created on the fly and only in-core.
|
||||
|
||||
* The commit-graph learned to use corrected commit dates instead of
|
||||
the generation number to help topological revision traversal.
|
||||
|
||||
* Piecemeal of rewrite of "git bisect" in C continues.
|
||||
|
||||
* When a pager spawned by us exited, the trace log did not record its
|
||||
exit status correctly, which has been corrected.
|
||||
|
||||
* Removal of GIT_TEST_GETTEXT_POISON continues.
|
||||
|
||||
* The code to implement "git merge-base --independent" was poorly
|
||||
done and was kept from the very beginning of the feature.
|
||||
|
||||
* Preliminary changes to fsmonitor integration.
|
||||
|
||||
* Performance optimization work on the rename detection continues.
|
||||
|
||||
* The common code to deal with "chunked file format" that is shared
|
||||
by the multi-pack-index and commit-graph files have been factored
|
||||
out, to help codepaths for both filetypes to become more robust.
|
||||
|
||||
* The approach to "fsck" the incoming objects in "index-pack" is
|
||||
attractive for performance reasons (we have them already in core,
|
||||
inflated and ready to be inspected), but fundamentally cannot be
|
||||
applied fully when we receive more than one pack stream, as a tree
|
||||
object in one pack may refer to a blob object in another pack as
|
||||
".gitmodules", when we want to inspect blobs that are used as
|
||||
".gitmodules" file, for example. Teach "index-pack" to emit
|
||||
objects that must be inspected later and check them in the calling
|
||||
"fetch-pack" process.
|
||||
|
||||
* The logic to handle "trailer" related placeholders in the
|
||||
"--format=" mechanisms in the "log" family and "for-each-ref"
|
||||
family is getting unified.
|
||||
|
||||
* Raise the buffer size used when writing the index file out from
|
||||
(obviously too small) 8kB to (clearly sufficiently large) 128kB.
|
||||
|
||||
|
||||
Fixes since v2.30
|
||||
-----------------
|
||||
|
||||
* Diagnose command line error of "git rebase" early.
|
||||
|
||||
* Clean up option descriptions in "git cmd --help".
|
||||
|
||||
* "git stash" did not work well in a sparsely checked out working
|
||||
tree.
|
||||
|
||||
* Some tests expect that "ls -l" output has either '-' or 'x' for
|
||||
group executable bit, but setgid bit can be inherited from parent
|
||||
directory and make these fields 'S' or 's' instead, causing test
|
||||
failures.
|
||||
|
||||
* "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
|
||||
any repository when the configuration variable <var> is not defined
|
||||
even once.
|
||||
|
||||
* Fix 2.29 regression where "git mergetool --tool-help" fails to list
|
||||
all the available tools.
|
||||
|
||||
* Fix for procedure to building CI test environment for mac.
|
||||
|
||||
* The implementation of "git branch --sort" wrt the detached HEAD
|
||||
display has always been hacky, which has been cleaned up.
|
||||
|
||||
* Newline characters in the host and path part of git:// URL are
|
||||
now forbidden.
|
||||
|
||||
* "git diff" showed a submodule working tree with untracked cruft as
|
||||
"Submodule commit <objectname>-dirty", but a natural expectation is
|
||||
that the "-dirty" indicator would align with "git describe --dirty",
|
||||
which does not consider having untracked files in the working tree
|
||||
as source of dirtiness. The inconsistency has been fixed.
|
||||
|
||||
* When more than one commit with the same patch ID appears on one
|
||||
side, "git log --cherry-pick A...B" did not exclude them all when a
|
||||
commit with the same patch ID appears on the other side. Now it
|
||||
does.
|
||||
|
||||
* Documentation for "git fsck" lost stale bits that has become
|
||||
incorrect.
|
||||
|
||||
* Doc fix for packfile URI feature.
|
||||
|
||||
* When "git rebase -i" processes "fixup" insn, there is no reason to
|
||||
clean up the commit log message, but we did the usual stripspace
|
||||
processing. This has been corrected.
|
||||
(merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).
|
||||
|
||||
* Fix in passing custom args from "git clone" to "upload-pack" on the
|
||||
other side.
|
||||
(merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).
|
||||
|
||||
* The command line completion (in contrib/) completed "git branch -d"
|
||||
with branch names, but "git branch -D" offered tagnames in addition,
|
||||
which has been corrected. "git branch -M" had the same problem.
|
||||
(merge 27dc071b9a jk/complete-branch-force-delete later to maint).
|
||||
|
||||
* When commands are started from a subdirectory, they may have to
|
||||
compare the path to the subdirectory (called prefix and found out
|
||||
from $(pwd)) with the tracked paths. On macOS, $(pwd) and
|
||||
readdir() yield decomposed path, while the tracked paths are
|
||||
usually normalized to the precomposed form, causing mismatch. This
|
||||
has been fixed by taking the same approach used to normalize the
|
||||
command line arguments.
|
||||
(merge 5c327502db tb/precompose-prefix-too later to maint).
|
||||
|
||||
* Even though invocations of "die()" were logged to the trace2
|
||||
system, "BUG()"s were not, which has been corrected.
|
||||
(merge 0a9dde4a04 jt/trace2-BUG later to maint).
|
||||
|
||||
* "git grep --untracked" is meant to be "let's ALSO find in these
|
||||
files on the filesystem" when looking for matches in the working
|
||||
tree files, and does not make any sense if the primary search is
|
||||
done against the index, or the tree objects. The "--cached" and
|
||||
"--untracked" options have been marked as mutually incompatible.
|
||||
(merge 0c5d83b248 mt/grep-cached-untracked later to maint).
|
||||
|
||||
* Fix "git fsck --name-objects" which apparently has not been used by
|
||||
anybody who is motivated enough to report breakage.
|
||||
(merge e89f89361c js/fsck-name-objects-fix later to maint).
|
||||
|
||||
* Avoid individual tests in t5411 from getting affected by each other
|
||||
by forcing them to use separate output files during the test.
|
||||
(merge 822ee894f6 jx/t5411-unique-filenames later to maint).
|
||||
|
||||
* Test to make sure "git rev-parse one-thing one-thing" gives
|
||||
the same thing twice (when one-thing is --since=X).
|
||||
(merge a5cdca4520 ew/rev-parse-since-test later to maint).
|
||||
|
||||
* When certain features (e.g. grafts) used in the repository are
|
||||
incompatible with the use of the commit-graph, we used to silently
|
||||
turned commit-graph off; we now tell the user what we are doing.
|
||||
(merge c85eec7fc3 js/commit-graph-warning later to maint).
|
||||
|
||||
* Objects that lost references can be pruned away, even when they
|
||||
have notes attached to it (and these notes will become dangling,
|
||||
which in turn can be pruned with "git notes prune"). This has been
|
||||
clarified in the documentation.
|
||||
(merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).
|
||||
|
||||
* The error codepath around the "--temp/--prefix" feature of "git
|
||||
checkout-index" has been improved.
|
||||
(merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).
|
||||
|
||||
* The "git maintenance register" command had trouble registering bare
|
||||
repositories, which had been corrected.
|
||||
|
||||
* A handful of multi-word configuration variable names in
|
||||
documentation that are spelled in all lowercase have been corrected
|
||||
to use the more canonical camelCase.
|
||||
(merge 7dd0eaa39c dl/doc-config-camelcase later to maint).
|
||||
|
||||
* "git push $there --delete ''" should have been diagnosed as an
|
||||
error, but instead turned into a matching push, which has been
|
||||
corrected.
|
||||
(merge 20e416409f jc/push-delete-nothing later to maint).
|
||||
|
||||
* Test script modernization.
|
||||
(merge 488acf15df sv/t7001-modernize later to maint).
|
||||
|
||||
* An under-allocation for the untracked cache data has been corrected.
|
||||
(merge 6347d649bc jh/untracked-cache-fix later to maint).
|
||||
|
||||
* Other code cleanup, docfix, build fix, etc.
|
||||
(merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
|
||||
(merge 9d336655ba js/doc-proto-v2-response-end later to maint).
|
||||
(merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
|
||||
(merge 3a837b58e3 cw/pack-config-doc later to maint).
|
||||
(merge 01168a9d89 ug/doc-commit-approxidate later to maint).
|
||||
(merge b865734760 js/params-vs-args later to maint).
|
@ -66,7 +66,7 @@ Fixes since v2.4.3
|
||||
* Some time ago, "git blame" (incorrectly) lost the convert_to_git()
|
||||
call when synthesizing a fake "tip" commit that represents the
|
||||
state in the working tree, which broke folks who record the history
|
||||
with LF line ending to make their project portable across
|
||||
with LF line ending to make their project portabile across
|
||||
platforms while terminating lines in their working tree files with
|
||||
CRLF for their platform.
|
||||
|
||||
|
@ -172,8 +172,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
incorrect patch text to "git apply". Add tests to demonstrate
|
||||
this.
|
||||
|
||||
I have a slight suspicion that this may be
|
||||
cf. <7vtzf77wjp.fsf@gitster.siamese.dyndns.org> coming back
|
||||
I have a slight suspicion that this may be $gmane/87202 coming back
|
||||
and biting us (I seem to have said "let's run with this and see
|
||||
what happens" back then).
|
||||
|
||||
|
@ -40,7 +40,7 @@ UI, Workflows & Features
|
||||
|
||||
* "git interpret-trailers" can now run outside of a Git repository.
|
||||
|
||||
* "git p4" learned to re-encode the pathname it uses to communicate
|
||||
* "git p4" learned to reencode the pathname it uses to communicate
|
||||
with the p4 depot with a new option.
|
||||
|
||||
* Give progress meter to "git filter-branch".
|
||||
|
@ -10,7 +10,7 @@ Fixes since v2.7
|
||||
setting GIT_WORK_TREE environment themselves.
|
||||
|
||||
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
||||
fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
|
||||
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
|
||||
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
||||
array.
|
||||
|
||||
|
@ -20,7 +20,7 @@ Fixes since v2.7.2
|
||||
tests.
|
||||
|
||||
* "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
|
||||
rev, i.e. the object named by the pathname with wildcard
|
||||
rev, i.e. the object named by the the pathname with wildcard
|
||||
characters in a tree object.
|
||||
|
||||
* "git rev-parse --git-common-dir" used in the worktree feature
|
||||
|
@ -189,7 +189,7 @@ Performance, Internal Implementation, Development Support etc.
|
||||
* Some calls to strcpy(3) triggers a false warning from static
|
||||
analyzers that are less intelligent than humans, and reducing the
|
||||
number of these false hits helps us notice real issues. A few
|
||||
calls to strcpy(3) in a couple of programs that are already safe
|
||||
calls to strcpy(3) in a couple of protrams that are already safe
|
||||
has been rewritten to avoid false warnings.
|
||||
|
||||
* The "name_path" API was an attempt to reduce the need to construct
|
||||
@ -270,7 +270,7 @@ notes for details).
|
||||
setting GIT_WORK_TREE environment themselves.
|
||||
|
||||
* The "exclude_list" structure has the usual "alloc, nr" pair of
|
||||
fields to be used by ALLOC_GROW(), but clear_pattern_list() forgot
|
||||
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
|
||||
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
|
||||
array.
|
||||
|
||||
|
@ -55,8 +55,8 @@ Fixes since v2.8.2
|
||||
This is necessary to use Git on Windows shared directories, and is
|
||||
already enabled for the MinGW and plain Windows builds. It also
|
||||
has been used in Cygwin packaged versions of Git for quite a while.
|
||||
See https://lore.kernel.org/git/20160419091055.GF2345@dinwoodie.org/
|
||||
and https://lore.kernel.org/git/20150811100527.GW14466@dinwoodie.org/.
|
||||
See http://thread.gmane.org/gmane.comp.version-control.git/291853
|
||||
and http://thread.gmane.org/gmane.comp.version-control.git/275680.
|
||||
|
||||
* "git replace -e" did not honour "core.editor" configuration.
|
||||
|
||||
|
@ -368,7 +368,7 @@ notes for details).
|
||||
This is necessary to use Git on Windows shared directories, and is
|
||||
already enabled for the MinGW and plain Windows builds. It also
|
||||
has been used in Cygwin packaged versions of Git for quite a while.
|
||||
See https://lore.kernel.org/git/20160419091055.GF2345@dinwoodie.org/
|
||||
See http://thread.gmane.org/gmane.comp.version-control.git/291853
|
||||
|
||||
* "merge-octopus" strategy did not ensure that the index is clean
|
||||
when merge begins.
|
||||
|
@ -36,7 +36,7 @@ Fixes since v2.9.2
|
||||
* One part of "git am" had an oddball helper function that called
|
||||
stuff from outside "his" as opposed to calling what we have "ours",
|
||||
which was not gender-neutral and also inconsistent with the rest of
|
||||
the system where outside stuff is usually called "theirs" in
|
||||
the system where outside stuff is usuall called "theirs" in
|
||||
contrast to "ours".
|
||||
|
||||
* The test framework learned a new helper test_match_signal to
|
||||
|
@ -3,9 +3,8 @@ Submitting Patches
|
||||
|
||||
== Guidelines
|
||||
|
||||
Here are some guidelines for people who want to contribute their code to this
|
||||
software. There is also a link:MyFirstContribution.html[step-by-step tutorial]
|
||||
available which covers many of these same guidelines.
|
||||
Here are some guidelines for people who want to contribute their code
|
||||
to this software.
|
||||
|
||||
[[base-branch]]
|
||||
=== Decide what to base your work on.
|
||||
@ -19,7 +18,7 @@ change is relevant to.
|
||||
base your work on the tip of the topic.
|
||||
|
||||
* A new feature should be based on `master` in general. If the new
|
||||
feature depends on a topic that is in `seen`, but not in `master`,
|
||||
feature depends on a topic that is in `pu`, but not in `master`,
|
||||
base your work on the tip of that topic.
|
||||
|
||||
* Corrections and enhancements to a topic not yet in `master` should
|
||||
@ -28,7 +27,7 @@ change is relevant to.
|
||||
into the series.
|
||||
|
||||
* In the exceptional case that a new feature depends on several topics
|
||||
not in `master`, start working on `next` or `seen` privately and send
|
||||
not in `master`, start working on `next` or `pu` privately and send
|
||||
out patches for discussion. Before the final merge, you may have to
|
||||
wait until some of the dependent topics graduate to `master`, and
|
||||
rebase your work.
|
||||
@ -38,7 +37,7 @@ change is relevant to.
|
||||
these parts should be based on their trees.
|
||||
|
||||
To find the tip of a topic branch, run `git log --first-parent
|
||||
master..seen` and look for the merge commit. The second parent of this
|
||||
master..pu` and look for the merge commit. The second parent of this
|
||||
commit is the tip of the topic branch.
|
||||
|
||||
[[separate-commits]]
|
||||
@ -143,25 +142,19 @@ archive, summarize the relevant points of the discussion.
|
||||
|
||||
[[commit-reference]]
|
||||
If you want to reference a previous commit in the history of a stable
|
||||
branch, use the format "abbreviated hash (subject, date)", like this:
|
||||
branch, use the format "abbreviated sha1 (subject, date)",
|
||||
with the subject enclosed in a pair of double-quotes, like this:
|
||||
|
||||
....
|
||||
Commit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)
|
||||
Commit f86a374 ("pack-bitmap.c: fix a memleak", 2015-03-30)
|
||||
noticed that ...
|
||||
....
|
||||
|
||||
The "Copy commit summary" command of gitk can be used to obtain this
|
||||
format (with the subject enclosed in a pair of double-quotes), or this
|
||||
invocation of `git show`:
|
||||
format, or this invocation of `git show`:
|
||||
|
||||
....
|
||||
git show -s --pretty=reference <commit>
|
||||
....
|
||||
|
||||
or, on an older version of Git without support for --pretty=reference:
|
||||
|
||||
....
|
||||
git show -s --date=short --pretty='format:%h (%s, %ad)' <commit>
|
||||
git show -s --date=short --pretty='format:%h ("%s", %ad)' <commit>
|
||||
....
|
||||
|
||||
[[git-tools]]
|
||||
@ -209,7 +202,7 @@ send them as replies to either an additional "cover letter" message
|
||||
(see below), the first patch, or the respective preceding patch.
|
||||
|
||||
If your log message (including your name on the
|
||||
`Signed-off-by` trailer) is not writable in ASCII, make sure that
|
||||
Signed-off-by line) is not writable in ASCII, make sure that
|
||||
you send off a message in the correct encoding.
|
||||
|
||||
WARNING: Be wary of your MUAs word-wrap
|
||||
@ -229,7 +222,7 @@ previously sent.
|
||||
The `git format-patch` command follows the best current practice to
|
||||
format the body of an e-mail message. At the beginning of the
|
||||
patch should come your commit message, ending with the
|
||||
`Signed-off-by` trailers, and a line that consists of three dashes,
|
||||
Signed-off-by: lines, and a line that consists of three dashes,
|
||||
followed by the diffstat information and the patch itself. If
|
||||
you are forwarding a patch from somebody else, optionally, at
|
||||
the beginning of the e-mail message just before the commit
|
||||
@ -290,24 +283,25 @@ identify them), to solicit comments and reviews.
|
||||
:git-ml: footnote:[The mailing list: git@vger.kernel.org]
|
||||
|
||||
After the list reached a consensus that it is a good idea to apply the
|
||||
patch, re-send it with "To:" set to the maintainer{current-maintainer}
|
||||
and "cc:" the list{git-ml} for inclusion. This is especially relevant
|
||||
when the maintainer did not heavily participate in the discussion and
|
||||
instead left the review to trusted others.
|
||||
patch, re-send it with "To:" set to the maintainer{current-maintainer} and "cc:" the
|
||||
list{git-ml} for inclusion.
|
||||
|
||||
Do not forget to add trailers such as `Acked-by:`, `Reviewed-by:` and
|
||||
`Tested-by:` lines as necessary to credit people who helped your
|
||||
patch, and "cc:" them when sending such a final version for inclusion.
|
||||
patch.
|
||||
|
||||
[[sign-off]]
|
||||
=== Certify your work by adding your `Signed-off-by` trailer
|
||||
=== Certify your work by adding your "Signed-off-by: " line
|
||||
|
||||
To improve tracking of who did what, we ask you to certify that you
|
||||
wrote the patch or have the right to pass it on under the same license
|
||||
as ours, by "signing off" your patch. Without sign-off, we cannot
|
||||
accept your patches.
|
||||
To improve tracking of who did what, we've borrowed the
|
||||
"sign-off" procedure from the Linux kernel project on patches
|
||||
that are being emailed around. Although core Git is a lot
|
||||
smaller project it is a good discipline to follow it.
|
||||
|
||||
If (and only if) you certify the below D-C-O:
|
||||
The sign-off is a simple line at the end of the explanation for
|
||||
the patch, which certifies that you wrote it or otherwise have
|
||||
the right to pass it on as an open-source patch. The rules are
|
||||
pretty simple: if you can certify the below D-C-O:
|
||||
|
||||
[[dco]]
|
||||
.Developer's Certificate of Origin 1.1
|
||||
@ -337,29 +331,23 @@ d. I understand and agree that this project and the contribution
|
||||
this project or the open source license(s) involved.
|
||||
____
|
||||
|
||||
you add a "Signed-off-by" trailer to your commit, that looks like
|
||||
this:
|
||||
then you just add a line saying
|
||||
|
||||
....
|
||||
Signed-off-by: Random J Developer <random@developer.example.org>
|
||||
....
|
||||
|
||||
This line can be added by Git if you run the git-commit command with
|
||||
the -s option.
|
||||
This line can be automatically added by Git if you run the git-commit
|
||||
command with the -s option.
|
||||
|
||||
Notice that you can place your own `Signed-off-by` trailer when
|
||||
Notice that you can place your own Signed-off-by: line when
|
||||
forwarding somebody else's patch with the above rules for
|
||||
D-C-O. Indeed you are encouraged to do so. Do not forget to
|
||||
place an in-body "From: " line at the beginning to properly attribute
|
||||
the change to its true author (see (2) above).
|
||||
|
||||
This procedure originally came from the Linux kernel project, so our
|
||||
rule is quite similar to theirs, but what exactly it means to sign-off
|
||||
your patch differs from project to project, so it may be different
|
||||
from that of the project you are accustomed to.
|
||||
|
||||
[[real-name]]
|
||||
Also notice that a real name is used in the `Signed-off-by` trailer. Please
|
||||
Also notice that a real name is used in the Signed-off-by: line. Please
|
||||
don't hide your real name.
|
||||
|
||||
[[commit-trailers]]
|
||||
@ -384,9 +372,9 @@ such as "Thanks-to:", "Based-on-patch-by:", or "Mentored-by:".
|
||||
Some parts of the system have dedicated maintainers with their own
|
||||
repositories.
|
||||
|
||||
- `git-gui/` comes from git-gui project, maintained by Pratyush Yadav:
|
||||
- `git-gui/` comes from git-gui project, maintained by Pat Thoyts:
|
||||
|
||||
https://github.com/prati0100/git-gui.git
|
||||
git://repo.or.cz/git-gui.git
|
||||
|
||||
- `gitk-git/` comes from Paul Mackerras's gitk project:
|
||||
|
||||
@ -429,7 +417,7 @@ help you find out who they are.
|
||||
and cooked further and eventually graduates to `master`.
|
||||
|
||||
In any time between the (2)-(3) cycle, the maintainer may pick it up
|
||||
from the list and queue it to `seen`, in order to make it easier for
|
||||
from the list and queue it to `pu`, in order to make it easier for
|
||||
people play with it without having to pick up and apply the patch to
|
||||
their trees themselves.
|
||||
|
||||
@ -440,7 +428,7 @@ their trees themselves.
|
||||
master. `git pull --rebase` will automatically skip already-applied
|
||||
patches, and will let you know. This works only if you rebase on top
|
||||
of the branch in which your patch has been merged (i.e. it will not
|
||||
tell you if your patch is merged in `seen` if you rebase on top of
|
||||
tell you if your patch is merged in pu if you rebase on top of
|
||||
master).
|
||||
|
||||
* Read the Git mailing list, the maintainer regularly posts messages
|
||||
|
@ -31,6 +31,24 @@ ifdef::backend-docbook[]
|
||||
endif::backend-docbook[]
|
||||
|
||||
ifdef::backend-docbook[]
|
||||
ifndef::git-asciidoc-no-roff[]
|
||||
# "unbreak" docbook-xsl v1.68 for manpages. v1.69 works with or without this.
|
||||
# v1.72 breaks with this because it replaces dots not in roff requests.
|
||||
[listingblock]
|
||||
<example><title>{title}</title>
|
||||
<literallayout class="monospaced">
|
||||
ifdef::doctype-manpage[]
|
||||
.ft C
|
||||
endif::doctype-manpage[]
|
||||
|
|
||||
ifdef::doctype-manpage[]
|
||||
.ft
|
||||
endif::doctype-manpage[]
|
||||
</literallayout>
|
||||
{title#}</example>
|
||||
endif::git-asciidoc-no-roff[]
|
||||
|
||||
ifdef::git-asciidoc-no-roff[]
|
||||
ifdef::doctype-manpage[]
|
||||
# The following two small workarounds insert a simple paragraph after screen
|
||||
[listingblock]
|
||||
@ -49,6 +67,7 @@ ifdef::doctype-manpage[]
|
||||
{title#}</para></formalpara>
|
||||
{title%}<simpara></simpara>
|
||||
endif::doctype-manpage[]
|
||||
endif::git-asciidoc-no-roff[]
|
||||
endif::backend-docbook[]
|
||||
|
||||
ifdef::doctype-manpage[]
|
||||
@ -59,9 +78,9 @@ template::[header-declarations]
|
||||
<refmeta>
|
||||
<refentrytitle>{mantitle}</refentrytitle>
|
||||
<manvolnum>{manvolnum}</manvolnum>
|
||||
<refmiscinfo class="source">{mansource}</refmiscinfo>
|
||||
<refmiscinfo class="version">{manversion}</refmiscinfo>
|
||||
<refmiscinfo class="manual">{manmanual}</refmiscinfo>
|
||||
<refmiscinfo class="source">Git</refmiscinfo>
|
||||
<refmiscinfo class="version">{git_version}</refmiscinfo>
|
||||
<refmiscinfo class="manual">Git Manual</refmiscinfo>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>{manname}</refname>
|
||||
|
@ -9,11 +9,8 @@ module Git
|
||||
named :chrome
|
||||
|
||||
def process(parent, target, attrs)
|
||||
if parent.document.basebackend? 'html'
|
||||
prefix = parent.document.attr('git-relative-html-prefix')
|
||||
if parent.document.doctype == 'book'
|
||||
"<ulink url=\"#{prefix}#{target}.html\">" \
|
||||
"#{target}(#{attrs[1]})</ulink>"
|
||||
elsif parent.document.basebackend? 'html'
|
||||
%(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>)
|
||||
elsif parent.document.basebackend? 'docbook'
|
||||
"<citerefentry>\n" \
|
||||
@ -23,26 +20,9 @@ module Git
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor
|
||||
def process document, output
|
||||
if document.basebackend? 'docbook'
|
||||
mansource = document.attributes['mansource']
|
||||
manversion = document.attributes['manversion']
|
||||
manmanual = document.attributes['manmanual']
|
||||
new_tags = "" \
|
||||
"<refmiscinfo class=\"source\">#{mansource}</refmiscinfo>\n" \
|
||||
"<refmiscinfo class=\"version\">#{manversion}</refmiscinfo>\n" \
|
||||
"<refmiscinfo class=\"manual\">#{manmanual}</refmiscinfo>\n"
|
||||
output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>")
|
||||
end
|
||||
output
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Asciidoctor::Extensions.register do
|
||||
inline_macro Git::Documentation::LinkGitProcessor, :linkgit
|
||||
postprocessor Git::Documentation::DocumentPostProcessor
|
||||
end
|
||||
|
@ -1,6 +1,6 @@
|
||||
-b::
|
||||
Show blank SHA-1 for boundary commits. This can also
|
||||
be controlled via the `blame.blankBoundary` config option.
|
||||
be controlled via the `blame.blankboundary` config option.
|
||||
|
||||
--root::
|
||||
Do not treat root commits as boundaries. This can also be
|
||||
@ -11,12 +11,11 @@
|
||||
|
||||
-L <start>,<end>::
|
||||
-L :<funcname>::
|
||||
Annotate only the line range given by '<start>,<end>',
|
||||
or by the function name regex '<funcname>'.
|
||||
May be specified multiple times. Overlapping ranges are allowed.
|
||||
Annotate only the given line range. May be specified multiple times.
|
||||
Overlapping ranges are allowed.
|
||||
+
|
||||
'<start>' and '<end>' are optional. `-L <start>` or `-L <start>,` spans from
|
||||
'<start>' to end of file. `-L ,<end>` spans from start of file to '<end>'.
|
||||
<start> and <end> are optional. ``-L <start>'' or ``-L <start>,'' spans from
|
||||
<start> to end of file. ``-L ,<end>'' spans from start of file to <end>.
|
||||
+
|
||||
include::line-range-format.txt[]
|
||||
|
||||
@ -37,12 +36,6 @@ include::line-range-format.txt[]
|
||||
START. `git blame --reverse START` is taken as `git blame
|
||||
--reverse START..HEAD` for convenience.
|
||||
|
||||
--first-parent::
|
||||
Follow only the first parent commit upon seeing a merge
|
||||
commit. This option can be used to determine when a line
|
||||
was introduced to a particular integration branch, rather
|
||||
than when it was introduced to the history overall.
|
||||
|
||||
-p::
|
||||
--porcelain::
|
||||
Show in a format designed for machine consumption.
|
||||
|
@ -6,14 +6,9 @@ sub format_one {
|
||||
my ($out, $nameattr) = @_;
|
||||
my ($name, $attr) = @$nameattr;
|
||||
my ($state, $description);
|
||||
my $mansection;
|
||||
$state = 0;
|
||||
open I, '<', "$name.txt" or die "No such file $name.txt";
|
||||
while (<I>) {
|
||||
if (/^git[a-z0-9-]*\(([0-9])\)$/) {
|
||||
$mansection = $1;
|
||||
next;
|
||||
}
|
||||
if (/^NAME$/) {
|
||||
$state = 1;
|
||||
next;
|
||||
@ -32,7 +27,7 @@ sub format_one {
|
||||
die "No description found in $name.txt";
|
||||
}
|
||||
if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) {
|
||||
print $out "linkgit:$name\[$mansection\]::\n\t";
|
||||
print $out "linkgit:$name\[1\]::\n\t";
|
||||
if ($attr =~ / deprecated /) {
|
||||
print $out "(deprecated) ";
|
||||
}
|
||||
@ -43,15 +38,12 @@ sub format_one {
|
||||
}
|
||||
}
|
||||
|
||||
my ($input, @categories) = @ARGV;
|
||||
|
||||
open IN, "<$input";
|
||||
while (<IN>) {
|
||||
while (<>) {
|
||||
last if /^### command list/;
|
||||
}
|
||||
|
||||
my %cmds = ();
|
||||
for (sort <IN>) {
|
||||
for (sort <>) {
|
||||
next if /^#/;
|
||||
|
||||
chomp;
|
||||
@ -59,10 +51,17 @@ for (sort <IN>) {
|
||||
$attr = '' unless defined $attr;
|
||||
push @{$cmds{$cat}}, [$name, " $attr "];
|
||||
}
|
||||
close IN;
|
||||
|
||||
for my $out (@categories) {
|
||||
my ($cat) = $out =~ /^cmds-(.*)\.txt$/;
|
||||
for my $cat (qw(ancillaryinterrogators
|
||||
ancillarymanipulators
|
||||
mainporcelain
|
||||
plumbinginterrogators
|
||||
plumbingmanipulators
|
||||
synchingrepositories
|
||||
foreignscminterface
|
||||
purehelpers
|
||||
synchelpers)) {
|
||||
my $out = "cmds-$cat.txt";
|
||||
open O, '>', "$out+" or die "Cannot open output file $out+";
|
||||
for (@{$cmds{$cat}}) {
|
||||
format_one(\*O, $_);
|
||||
|
@ -3,12 +3,11 @@ CONFIGURATION FILE
|
||||
|
||||
The Git configuration file contains a number of variables that affect
|
||||
the Git commands' behavior. The files `.git/config` and optionally
|
||||
`config.worktree` (see the "CONFIGURATION FILE" section of
|
||||
linkgit:git-worktree[1]) in each repository are used to store the
|
||||
configuration for that repository, and `$HOME/.gitconfig` is used to
|
||||
store a per-user configuration as fallback values for the `.git/config`
|
||||
file. The file `/etc/gitconfig` can be used to store a system-wide
|
||||
default configuration.
|
||||
`config.worktree` (see `extensions.worktreeConfig` below) in each
|
||||
repository are used to store the configuration for that repository, and
|
||||
`$HOME/.gitconfig` is used to store a per-user configuration as
|
||||
fallback values for the `.git/config` file. The file `/etc/gitconfig`
|
||||
can be used to store a system-wide default configuration.
|
||||
|
||||
The configuration variables are used by both the Git plumbing
|
||||
and the porcelains. The variables are divided into sections, wherein
|
||||
@ -64,7 +63,7 @@ The variable names are case-insensitive, allow only alphanumeric characters
|
||||
and `-`, and must start with an alphabetic character.
|
||||
|
||||
A line that defines a value can be continued to the next line by
|
||||
ending it with a `\`; the backslash and the end-of-line are
|
||||
ending it with a `\`; the backquote and the end-of-line are
|
||||
stripped. Leading whitespaces after 'name =', the remainder of the
|
||||
line after the first comment character '#' or ';', and trailing
|
||||
whitespaces of the line are discarded unless they are enclosed in
|
||||
@ -143,7 +142,7 @@ refer to linkgit:gitignore[5] for details. For convenience:
|
||||
|
||||
`gitdir/i`::
|
||||
This is the same as `gitdir` except that matching is done
|
||||
case-insensitively (e.g. on case-insensitive file systems)
|
||||
case-insensitively (e.g. on case-insensitive file sytems)
|
||||
|
||||
`onbranch`::
|
||||
The data that follows the keyword `onbranch:` is taken to be a
|
||||
@ -179,7 +178,6 @@ to either specify only the realpath version, or both versions.
|
||||
Example
|
||||
~~~~~~~
|
||||
|
||||
----
|
||||
# Core variables
|
||||
[core]
|
||||
; Don't trust file modes
|
||||
@ -226,7 +224,6 @@ Example
|
||||
; currently checked out
|
||||
[includeIf "onbranch:foo-branch"]
|
||||
path = foo.inc
|
||||
----
|
||||
|
||||
Values
|
||||
~~~~~~
|
||||
@ -264,9 +261,7 @@ color::
|
||||
+
|
||||
The basic colors accepted are `normal`, `black`, `red`, `green`, `yellow`,
|
||||
`blue`, `magenta`, `cyan` and `white`. The first color given is the
|
||||
foreground; the second is the background. All the basic colors except
|
||||
`normal` have a bright variant that can be specified by prefixing the
|
||||
color with `bright`, like `brightred`.
|
||||
foreground; the second is the background.
|
||||
+
|
||||
Colors may also be given as numbers between 0 and 255; these use ANSI
|
||||
256-color mode (but note that not all terminals may support this). If
|
||||
@ -334,16 +329,12 @@ include::config/checkout.txt[]
|
||||
|
||||
include::config/clean.txt[]
|
||||
|
||||
include::config/clone.txt[]
|
||||
|
||||
include::config/color.txt[]
|
||||
|
||||
include::config/column.txt[]
|
||||
|
||||
include::config/commit.txt[]
|
||||
|
||||
include::config/commitgraph.txt[]
|
||||
|
||||
include::config/credential.txt[]
|
||||
|
||||
include::config/completion.txt[]
|
||||
@ -352,12 +343,8 @@ include::config/diff.txt[]
|
||||
|
||||
include::config/difftool.txt[]
|
||||
|
||||
include::config/extensions.txt[]
|
||||
|
||||
include::config/fastimport.txt[]
|
||||
|
||||
include::config/feature.txt[]
|
||||
|
||||
include::config/fetch.txt[]
|
||||
|
||||
include::config/format.txt[]
|
||||
@ -398,14 +385,10 @@ include::config/interactive.txt[]
|
||||
|
||||
include::config/log.txt[]
|
||||
|
||||
include::config/lsrefs.txt[]
|
||||
|
||||
include::config/mailinfo.txt[]
|
||||
|
||||
include::config/mailmap.txt[]
|
||||
|
||||
include::config/maintenance.txt[]
|
||||
|
||||
include::config/man.txt[]
|
||||
|
||||
include::config/merge.txt[]
|
||||
@ -458,8 +441,6 @@ include::config/submodule.txt[]
|
||||
|
||||
include::config/tag.txt[]
|
||||
|
||||
include::config/tar.txt[]
|
||||
|
||||
include::config/trace2.txt[]
|
||||
|
||||
include::config/transfer.txt[]
|
||||
|
@ -5,8 +5,3 @@ add.ignore-errors (deprecated)::
|
||||
option of linkgit:git-add[1]. `add.ignore-errors` is deprecated,
|
||||
as it does not follow the usual naming convention for configuration
|
||||
variables.
|
||||
|
||||
add.interactive.useBuiltin::
|
||||
[EXPERIMENTAL] Set to `true` to use the experimental built-in
|
||||
implementation of the interactive version of linkgit:git-add[1]
|
||||
instead of the Perl script version. Is `false` by default.
|
||||
|
@ -10,8 +10,9 @@ advice.*::
|
||||
that the check is disabled.
|
||||
pushUpdateRejected::
|
||||
Set this variable to 'false' if you want to disable
|
||||
'pushNonFFCurrent', 'pushNonFFMatching', 'pushAlreadyExists',
|
||||
'pushFetchFirst', 'pushNeedsForce', and 'pushRefNeedsUpdate'
|
||||
'pushNonFFCurrent',
|
||||
'pushNonFFMatching', 'pushAlreadyExists',
|
||||
'pushFetchFirst', and 'pushNeedsForce'
|
||||
simultaneously.
|
||||
pushNonFFCurrent::
|
||||
Advice shown when linkgit:git-push[1] fails due to a
|
||||
@ -40,10 +41,6 @@ advice.*::
|
||||
we can still suggest that the user push to either
|
||||
refs/heads/* or refs/tags/* based on the type of the
|
||||
source object.
|
||||
pushRefNeedsUpdate::
|
||||
Shown when linkgit:git-push[1] rejects a forced update of
|
||||
a branch when its remote-tracking ref has updates that we
|
||||
do not have locally.
|
||||
statusAheadBehind::
|
||||
Shown when linkgit:git-status[1] computes the ahead/behind
|
||||
counts for a local ref compared to its remote tracking ref,
|
||||
@ -110,13 +107,4 @@ advice.*::
|
||||
editor input from the user.
|
||||
nestedTag::
|
||||
Advice shown if a user attempts to recursively tag a tag object.
|
||||
submoduleAlternateErrorStrategyDie::
|
||||
Advice shown when a submodule.alternateErrorStrategy option
|
||||
configured to "die" causes a fatal error.
|
||||
addIgnoredFile::
|
||||
Advice shown if a user attempts to add an ignored file to
|
||||
the index.
|
||||
addEmptyPathspec::
|
||||
Advice shown if a user runs the add command without providing
|
||||
the pathspec parameter.
|
||||
--
|
||||
|
@ -81,16 +81,15 @@ branch.<name>.rebase::
|
||||
"git pull" is run. See "pull.rebase" for doing this in a non
|
||||
branch-specific manner.
|
||||
+
|
||||
When `merges` (or just 'm'), pass the `--rebase-merges` option to 'git rebase'
|
||||
When `merges`, pass the `--rebase-merges` option to 'git rebase'
|
||||
so that the local merge commits are included in the rebase (see
|
||||
linkgit:git-rebase[1] for details).
|
||||
+
|
||||
When `preserve` (or just 'p', deprecated in favor of `merges`), also pass
|
||||
When `preserve` (deprecated in favor of `merges`), also pass
|
||||
`--preserve-merges` along to 'git rebase' so that locally committed merge
|
||||
commits will not be flattened by running 'git pull'.
|
||||
+
|
||||
When the value is `interactive` (or just 'i'), the rebase is run in interactive
|
||||
mode.
|
||||
When the value is `interactive`, the rebase is run in interactive mode.
|
||||
+
|
||||
*NOTE*: this is a possibly dangerous operation; do *not* use
|
||||
it unless you understand the implications (see linkgit:git-rebase[1]
|
||||
|
@ -1,23 +1,18 @@
|
||||
checkout.defaultRemote::
|
||||
When you run `git checkout <something>`
|
||||
or `git switch <something>` and only have one
|
||||
When you run 'git checkout <something>'
|
||||
or 'git switch <something>' and only have one
|
||||
remote, it may implicitly fall back on checking out and
|
||||
tracking e.g. `origin/<something>`. This stops working as soon
|
||||
as you have more than one remote with a `<something>`
|
||||
tracking e.g. 'origin/<something>'. This stops working as soon
|
||||
as you have more than one remote with a '<something>'
|
||||
reference. This setting allows for setting the name of a
|
||||
preferred remote that should always win when it comes to
|
||||
disambiguation. The typical use-case is to set this to
|
||||
`origin`.
|
||||
+
|
||||
Currently this is used by linkgit:git-switch[1] and
|
||||
linkgit:git-checkout[1] when `git checkout <something>`
|
||||
or `git switch <something>`
|
||||
will checkout the `<something>` branch on another remote,
|
||||
and by linkgit:git-worktree[1] when `git worktree add` refers to a
|
||||
linkgit:git-checkout[1] when 'git checkout <something>'
|
||||
or 'git switch <something>'
|
||||
will checkout the '<something>' branch on another remote,
|
||||
and by linkgit:git-worktree[1] when 'git worktree add' refers to a
|
||||
remote branch. This setting might be used for other checkout-like
|
||||
commands or functionality in the future.
|
||||
|
||||
checkout.guess::
|
||||
Provides the default value for the `--guess` or `--no-guess`
|
||||
option in `git checkout` and `git switch`. See
|
||||
linkgit:git-switch[1] and linkgit:git-checkout[1].
|
||||
|
@ -1,4 +0,0 @@
|
||||
clone.defaultRemoteName::
|
||||
The name of the remote to create when cloning a repository. Defaults to
|
||||
`origin`, and can be overridden by passing the `--origin` command-line
|
||||
option to linkgit:git-clone[1].
|
@ -1,8 +0,0 @@
|
||||
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.readChangedPaths::
|
||||
If true, then git will use the changed-path Bloom filters in the
|
||||
commit-graph file (if it exists, and they are present). Defaults to
|
||||
true. See linkgit:git-commit-graph[1] for more information.
|
@ -68,17 +68,6 @@ core.fsmonitor::
|
||||
avoiding unnecessary processing of files that have not changed.
|
||||
See the "fsmonitor-watchman" section of linkgit:githooks[5].
|
||||
|
||||
core.fsmonitorHookVersion::
|
||||
Sets the version of hook that is to be used when calling fsmonitor.
|
||||
There are currently versions 1 and 2. When this is not set,
|
||||
version 2 will be tried first and if it fails then version 1
|
||||
will be tried. Version 1 uses a timestamp as input to determine
|
||||
which files have changes since that time but some monitors
|
||||
like watchman have race conditions when used with a timestamp.
|
||||
Version 2 uses an opaque string so that the monitor can return
|
||||
something that can be used to determine what files have changed
|
||||
without race conditions.
|
||||
|
||||
core.trustctime::
|
||||
If false, the ctime differences between the index and the
|
||||
working tree are ignored; useful when the inode change time
|
||||
@ -97,9 +86,7 @@ core.untrackedCache::
|
||||
it will automatically be removed, if set to `false`. Before
|
||||
setting it to `true`, you should check that mtime is working
|
||||
properly on your system.
|
||||
See linkgit:git-update-index[1]. `keep` by default, unless
|
||||
`feature.manyFiles` is enabled which sets this setting to
|
||||
`true` by default.
|
||||
See linkgit:git-update-index[1]. `keep` by default.
|
||||
|
||||
core.checkStat::
|
||||
When missing or is set to `default`, many fields in the stat
|
||||
@ -399,7 +386,7 @@ the largest projects. You probably do not need to adjust this value.
|
||||
Common unit suffixes of 'k', 'm', or 'g' are supported.
|
||||
|
||||
core.deltaBaseCacheLimit::
|
||||
Maximum number of bytes per thread to reserve for caching base objects
|
||||
Maximum number of bytes to reserve for caching base objects
|
||||
that may be referenced by multiple deltified objects. By storing the
|
||||
entire decompressed base objects in a cache Git is able
|
||||
to avoid unpacking and decompressing frequently used base
|
||||
@ -570,12 +557,6 @@ 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
|
||||
@ -596,7 +577,7 @@ the `GIT_NOTES_REF` environment variable. See linkgit:git-notes[1].
|
||||
|
||||
core.commitGraph::
|
||||
If true, then git will read the commit-graph file (if it exists)
|
||||
to parse the graph structure of commits. Defaults to true. See
|
||||
to parse the graph structure of commits. Defaults to false. See
|
||||
linkgit:git-commit-graph[1] for more information.
|
||||
|
||||
core.useReplaceRefs::
|
||||
@ -606,18 +587,12 @@ core.useReplaceRefs::
|
||||
|
||||
core.multiPackIndex::
|
||||
Use the multi-pack-index file to track multiple packfiles using a
|
||||
single index. See linkgit:git-multi-pack-index[1] for more
|
||||
information. Defaults to true.
|
||||
single index. See link:technical/multi-pack-index.html[the
|
||||
multi-pack-index design document].
|
||||
|
||||
core.sparseCheckout::
|
||||
Enable "sparse checkout" feature. See linkgit:git-sparse-checkout[1]
|
||||
for more information.
|
||||
|
||||
core.sparseCheckoutCone::
|
||||
Enables the "cone mode" of the sparse checkout feature. When the
|
||||
sparse-checkout file contains a limited set of patterns, then this
|
||||
mode provides significant performance advantages. See
|
||||
linkgit:git-sparse-checkout[1] for more information.
|
||||
Enable "sparse checkout" feature. See section "Sparse checkout" in
|
||||
linkgit:git-read-tree[1] for more information.
|
||||
|
||||
core.abbrev::
|
||||
Set the length object names are abbreviated to. If
|
||||
@ -625,6 +600,4 @@ core.abbrev::
|
||||
computed based on the approximate number of packed objects
|
||||
in your repository, which hopefully is enough for
|
||||
abbreviated object names to stay unique for some time.
|
||||
If set to "no", no abbreviation is made and the object names
|
||||
are shown in their full length.
|
||||
The minimum length is 4.
|
||||
|
@ -1,13 +1,9 @@
|
||||
credential.helper::
|
||||
Specify an external helper to be called when a username or
|
||||
password credential is needed; the helper may consult external
|
||||
storage to avoid prompting the user for the credentials. This is
|
||||
normally the name of a credential helper with possible
|
||||
arguments, but may also be an absolute path with arguments or, if
|
||||
preceded by `!`, shell commands.
|
||||
+
|
||||
Note that multiple helpers may be defined. See linkgit:gitcredentials[7]
|
||||
for details and examples.
|
||||
storage to avoid prompting the user for the credentials. Note
|
||||
that multiple helpers may be defined. See linkgit:gitcredentials[7]
|
||||
for details.
|
||||
|
||||
credential.useHttpPath::
|
||||
When acquiring credentials, consider the "path" component of an http
|
||||
@ -28,9 +24,3 @@ credential.<url>.*::
|
||||
|
||||
credentialCache.ignoreSIGHUP::
|
||||
Tell git-credential-cache--daemon to ignore SIGHUP, instead of quitting.
|
||||
|
||||
credentialStore.lockTimeoutMS::
|
||||
The length of time, in milliseconds, for git-credential-store to retry
|
||||
when trying to lock the credentials file. Value 0 means not to retry at
|
||||
all; -1 means to try indefinitely. Default is 1000 (i.e., retry for
|
||||
1s).
|
||||
|
@ -85,8 +85,6 @@ diff.ignoreSubmodules::
|
||||
and 'git status' when `status.submoduleSummary` is set unless it is
|
||||
overridden by using the --ignore-submodules command-line option.
|
||||
The 'git submodule' commands are not affected by this setting.
|
||||
By default this is set to untracked so that any untracked
|
||||
submodules are ignored.
|
||||
|
||||
diff.mnemonicPrefix::
|
||||
If set, 'git diff' uses a prefix pair that is different from the
|
||||
@ -107,10 +105,6 @@ diff.mnemonicPrefix::
|
||||
diff.noprefix::
|
||||
If set, 'git diff' does not show any source or destination prefix.
|
||||
|
||||
diff.relative::
|
||||
If set to 'true', 'git diff' does not show changes outside of the directory
|
||||
and show pathnames relative to the current directory.
|
||||
|
||||
diff.orderFile::
|
||||
File indicating how to order files within a diff.
|
||||
See the '-O' option to linkgit:git-diff[1] for details.
|
||||
@ -195,7 +189,7 @@ diff.guitool::
|
||||
include::../mergetools-diff.txt[]
|
||||
|
||||
diff.indentHeuristic::
|
||||
Set this option to `false` to disable the default heuristics
|
||||
Set this option to `true` to enable experimental heuristics
|
||||
that shift diff hunk boundaries to make patches easier to read.
|
||||
|
||||
diff.algorithm::
|
||||
|
@ -1,8 +0,0 @@
|
||||
extensions.objectFormat::
|
||||
Specify the hash algorithm to use. The acceptable values are `sha1` and
|
||||
`sha256`. If not specified, `sha1` is assumed. It is an error to specify
|
||||
this key unless `core.repositoryFormatVersion` is 1.
|
||||
+
|
||||
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.
|
@ -1,26 +0,0 @@
|
||||
feature.*::
|
||||
The config settings that start with `feature.` modify the defaults of
|
||||
a group of other config settings. These groups are created by the Git
|
||||
developer community as recommended defaults and are subject to change.
|
||||
In particular, new config options may be added with different defaults.
|
||||
|
||||
feature.experimental::
|
||||
Enable config options that are new to Git, and are being considered for
|
||||
future defaults. Config settings included here may be added or removed
|
||||
with each release, including minor version updates. These settings may
|
||||
have unintended interactions since they are so new. Please enable this
|
||||
setting if you are interested in providing feedback on experimental
|
||||
features. The new default values are:
|
||||
+
|
||||
* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
|
||||
skipping more commits at a time, reducing the number of round trips.
|
||||
|
||||
feature.manyFiles::
|
||||
Enable config options that optimize for repos with many files in the
|
||||
working directory. With many files, commands such as `git status` and
|
||||
`git checkout` may be slow and these new defaults improve performance:
|
||||
+
|
||||
* `index.version=4` enables path-prefix compression in the index.
|
||||
+
|
||||
* `core.untrackedCache=true` enables the untracked cache. This setting assumes
|
||||
that mtime is working on your machine.
|
@ -1,14 +1,11 @@
|
||||
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 either set 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
|
||||
pull will only recurse into a populated submodule when its
|
||||
superproject retrieves a commit that updates the submodule's
|
||||
unconditionally recurse into submodules when set to true or to not
|
||||
recurse at all when set to false. When set to 'on-demand' (the default
|
||||
value), 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.
|
||||
|
||||
fetch.fsckObjects::
|
||||
If it is set to true, git-fetch-pack will check all fetched
|
||||
@ -60,13 +57,9 @@ fetch.negotiationAlgorithm::
|
||||
sent when negotiating the contents of the packfile to be sent by the
|
||||
server. 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 certainly result in a larger-than-necessary packfile, but
|
||||
will skip the negotiation step.
|
||||
The default is "default" which instructs Git to use the default algorithm
|
||||
packfile; The default is "default" which instructs Git to use the default algorithm
|
||||
that never skips commits (unless the server has acknowledged it or one
|
||||
of its descendants). If `feature.experimental` is enabled, then this
|
||||
setting defaults to "skipping".
|
||||
of its descendants).
|
||||
Unknown values will cause 'git fetch' to error out.
|
||||
+
|
||||
See also the `--negotiation-tip` option for linkgit:git-fetch[1].
|
||||
@ -75,22 +68,3 @@ 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.
|
||||
|
||||
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).
|
||||
+
|
||||
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::
|
||||
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.
|
||||
|
@ -8,15 +8,3 @@ merge.log::
|
||||
most the specified number of one-line descriptions from the
|
||||
actual commits that are being merged. Defaults to false, and
|
||||
true is a synonym for 20.
|
||||
|
||||
merge.suppressDest::
|
||||
By adding a glob that matches the names of integration
|
||||
branches to this multi-valued configuration variable, the
|
||||
default merge message computed for merges into these
|
||||
integration branches will omit "into <branch name>" from
|
||||
its title.
|
||||
+
|
||||
An element with an empty value can be used to clear the list
|
||||
of globs accumulated from previous configuration entries.
|
||||
When there is no `merge.suppressDest` variable defined, the
|
||||
default value of `master` is used for backward compatibility.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user