Go to file
Elijah Newren c6d5ca10e3 merge-ort: add a new mergeability_only option
Git Forges may be interested in whether two branches can be merged while
not being interested in what the resulting merge tree is nor which files
conflicted.  For such cases, add a new mergeability_only option.  This
option allows the merge machinery to, in the "outer layer" of the merge:
  * exit upon first[-ish] conflict
  * avoid (not prevent) writing merged blobs/trees to the object store

I have a number of qualifiers there, so let me explain each:

"outer layer":

Note that since the recursive merge of merge bases (corresponding to
call_depth > 0) can conflict without the outer final merge
(corresponding to call_depth == 0) conflicting, we can't short-circuit
nor avoid writing merged blobs/trees to the object store during those
inner merges.

"first-ish conflict":

The current patch only exits early from process_entries() on the first
conflict it detects, but conflicts could have been detected in a
previous function call, namely detect_and_process_renames().  However:
  * conflicts detected by detect_and_process_renames() are quite rare
    conflict types
  * the detection would still come after regular rename detection
    (which is the expensive part of detect_and_process_renames()), so
    it is not saving us much in computation time given that
    process_entries() directly follows detect_and_process_renames()
  * [this overlaps with the next bullet point] process_entries() is the
    place where virtually all object writing occurs (object writing is
    sometimes more of a concern for Forges than computation time), so
    exiting early here isn't saving us much in object writes either
  * the code changes needed to handle an earlier exit are slightly
    more invasive in detect_and_process_renames() than for
    process_entries().
Given the rareness of the even earlier conflicts, the limited savings
we'd get from exiting even earlier, and in an attempt to keep this
patch simpler, we don't guarantee that we actually exit on the first
conflict detected.  We can always revisit this decision later if we
decide that a further micro-optimization to exit slightly earlier in
rare cases is worthwhile.

"avoid (not prevent) writing objects":

The detect_and_process_renames() call can also write objects to the
object store, when rename/rename conflicts involve one (or more) files
that have also been modified on both sides.  Because of this alternate
call path leading to handle_content_merges(), our "early exit" does not
prevent writing objects entirely, even within the "outer layer"
(i.e. even within call_depth == 0).  I figure that's fine though, since
we're already writing objects for the inner merges (i.e. for call_depth
> 0), which are likely going to represent vastly more objects than files
involved in rename/rename+modify/modify cases in the outer merge, on
average.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-05-16 15:09:14 -07:00
.github Merge branch 'kn/meson-hdr-check' 2025-05-05 14:56:25 -07:00
Documentation The twelfth batch 2025-05-08 12:36:32 -07:00
bin-wrappers
block-sha1
builtin Merge branch 'ps/mv-contradiction-fix' 2025-05-08 12:36:32 -07:00
ci Merge branch 'kn/meson-hdr-check' 2025-05-05 14:56:25 -07:00
compat Merge branch 'js/windows-arm64' 2025-05-05 14:56:24 -07:00
compiler-tricks git-compat-util: add NOT_CONSTANT macro and use it in atfork_prepare() 2025-03-17 17:30:49 -07:00
contrib Merge branch 'kn/meson-hdr-check' 2025-05-05 14:56:25 -07:00
ewah ewah: implement `struct ewah_or_iterator` 2025-03-21 04:34:04 -07:00
git-gui Merge branch 'master' of https://github.com/j6t/git-gui 2025-05-09 13:14:36 -07:00
gitk-git Merge branch 'master' of https://github.com/j6t/gitk 2025-05-09 13:16:51 -07:00
gitweb meson: distinguish build and target host binaries 2025-04-01 02:20:44 -07:00
mergetools Merge branch 'fr/vimdiff-layout-fixes' 2025-04-08 11:43:16 -07:00
negotiator
oss-fuzz object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
perl
po Merge branch 'js/po-update-workflow' 2025-05-09 19:17:19 +02:00
refs Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
reftable Merge branch 'ps/reftable-api-revamp' 2025-04-29 14:21:30 -07:00
sha1
sha1collisiondetection@855827c583
sha1dc
sha256
subprojects
t Merge branch 'ps/mv-contradiction-fix' 2025-05-08 12:36:32 -07:00
templates meson: distinguish build and target host binaries 2025-04-01 02:20:44 -07:00
trace2
xdiff Merge branch 'js/comma-semicolon-confusion' 2025-04-15 13:50:17 -07:00
.cirrus.yml
.clang-format
.editorconfig
.gitattributes merge-file doc: set conflict-marker-size attribute 2025-03-29 10:31:19 +09:00
.gitignore
.gitlab-ci.yml ci: use Visual Studio for win+meson job on GitHub Workflows 2025-04-01 02:20:44 -07:00
.gitmodules
.mailmap
.tsan-suppressions
CODE_OF_CONDUCT.md
COPYING
GIT-BUILD-OPTIONS.in
GIT-VERSION-FILE.in
GIT-VERSION-GEN Start 2.50 cycle (batch #1) 2025-03-26 16:26:11 +09:00
INSTALL
LGPL-2.1
Makefile git-gui: treat the message template file as a built file 2025-05-07 19:55:15 +02:00
README.md
RelNotes Start 2.50 cycle (batch #1) 2025-03-26 16:26:11 +09:00
SECURITY.md
abspath.c
abspath.h
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c
advice.c advice: allow disabling default branch name advice 2025-03-25 16:09:28 -07:00
advice.h advice: allow disabling default branch name advice 2025-03-25 16:09:28 -07:00
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'ps/parse-options-integers' 2025-04-24 17:25:34 -07:00
apply.h
archive-tar.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
archive-zip.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
archive.c Merge branch 'ps/parse-options-integers' 2025-04-24 17:25:34 -07:00
archive.h
attr.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
attr.h
banned.h
base85.c
base85.h
bisect.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
bisect.h
blame.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
blame.h
blob.c
blob.h
bloom.c
bloom.h
branch.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
branch.h
builtin.h Merge branch 'jt/diff-pairs' 2025-03-26 16:26:09 +09:00
bulk-checkin.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
bulk-checkin.h object-file: drop `index_blob_stream()` 2025-04-15 08:24:36 -07:00
bundle-uri.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
bundle-uri.h
bundle.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
bundle.h
cache-tree.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
cache-tree.h
cbtree.c
cbtree.h
chdir-notify.c
chdir-notify.h
check-builtins.sh
checkout.c
checkout.h
chunk-format.c
chunk-format.h
color.c
color.h
column.c
column.h
combine-diff.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
command-list.txt
commit-graph.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
commit-graph.h object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
commit-reach.c
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
commit.h
common-exit.c
common-init.c
common-init.h
common-main.c
config.c Merge branch 'ps/object-wo-the-repository' 2025-04-15 13:50:15 -07:00
config.h
config.mak.dev Merge branch 'js/comma-semicolon-confusion' 2025-04-15 13:50:17 -07:00
config.mak.in
config.mak.uname Merge branch 'js/windows-arm64' 2025-05-05 14:56:24 -07:00
configure.ac config.mak.uname: add sysinfo() configuration for cygwin 2025-04-16 20:43:45 -07:00
connect.c
connect.h
connected.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
connected.h
convert.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
convert.h
copy.c
copy.h
credential.c
credential.h
csum-file.c csum-file: stop depending on `the_repository` 2025-03-10 13:16:18 -07:00
csum-file.h csum-file: stop depending on `the_repository` 2025-03-10 13:16:18 -07:00
ctype.c
daemon.c
date.c
date.h
decorate.c decorate: fix sign comparison warnings 2025-03-10 13:21:13 -07:00
decorate.h
delta-islands.c delta-islands: stop depending on `the_repository` 2025-03-10 13:16:20 -07:00
delta-islands.h delta-islands: stop depending on `the_repository` 2025-03-10 13:16:20 -07:00
delta.h
detect-compiler detect-compiler: detect clang even if it found CUDA 2025-03-28 17:38:12 -07:00
diagnose.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
diagnose.h
diff-delta.c diff-delta: avoid using the comma operator 2025-03-28 17:38:10 -07:00
diff-lib.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
diff-merges.c
diff-merges.h
diff-no-index.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
diff.c Merge branch 'js/diff-codeql-false-positive-workaround' 2025-05-08 12:36:32 -07:00
diff.h Merge branch 'ps/object-wo-the-repository' 2025-04-15 13:50:15 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
diffcore-rotate.c
diffcore.h
dir-iterator.c refs/iterator: separate lifecycle from iteration 2025-03-12 11:31:18 -07:00
dir-iterator.h refs/iterator: separate lifecycle from iteration 2025-03-12 11:31:18 -07:00
dir.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
dir.h Merge branch 'am/dir-dedup-decl-of-repository' 2025-03-29 16:39:09 +09:00
editor.c
editor.h
entry.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
entry.h
environment.c Merge branch 'js/windows-arm64' 2025-05-05 14:56:24 -07:00
environment.h Merge branch 'ab/environment-clean-header' 2025-04-17 10:28:20 -07:00
exec-cmd.c
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
fetch-pack.h
fmt-merge-msg.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
fmt-merge-msg.h
fsck.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
fsck.h Merge branch 'sj/ref-consistency-checks-more' 2025-03-26 16:26:10 +09:00
fsmonitor--daemon.h
fsmonitor-ipc.c
fsmonitor-ipc.h
fsmonitor-ll.h
fsmonitor-path-utils.h
fsmonitor-settings.c
fsmonitor-settings.h
fsmonitor.c
fsmonitor.h
generate-cmdlist.sh
generate-configlist.sh completion: take into account the formatting backticks for options 2025-03-20 19:27:29 -07:00
generate-hooklist.sh
generate-perl.sh
generate-python.sh
generate-script.sh
gettext.c
gettext.h
git-archimport.perl
git-compat-util.h Merge branch 'ps/parse-options-integers' 2025-04-24 17:25:34 -07:00
git-curl-compat.h http.c: allow custom TCP keepalive behavior via config 2025-03-21 01:38:52 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-filter-branch.sh filter-branch: stop depending on Perl 2025-04-16 07:30:29 -07:00
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py
git-quiltimport.sh
git-request-pull.sh request-pull: stop depending on Perl 2025-04-16 07:30:29 -07:00
git-send-email.perl send-email: finer-grained SMTP error handling 2025-04-07 14:54:05 -07:00
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git-zlib.c Merge branch 'jk/zlib-inflate-fixes' 2025-04-15 13:50:14 -07:00
git-zlib.h git-zlib: use `struct z_stream_s` instead of typedef 2025-04-07 14:53:11 -07:00
git.c
git.rc.in
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
grep.h
hash-lookup.c
hash-lookup.h
hash.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
hash.h Merge branch 'jt/help-sha-backend-info-in-build-options' 2025-04-16 13:54:20 -07:00
hashmap.c Merge branch 'en/hashmap-clear-fix' 2025-05-08 12:36:31 -07:00
hashmap.h
help.c help: include unsafe SHA-1 build info in version 2025-04-07 14:39:27 -07:00
help.h
hex-ll.c
hex-ll.h
hex.c
hex.h
hook.c
hook.h
http-backend.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
http-fetch.c
http-push.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
http-walker.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
http.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
http.h
ident.c
ident.h
imap-send.c imap-send: explicitly verify the peer certificate 2025-03-25 15:48:58 -07:00
iterator.h refs/iterator: separate lifecycle from iteration 2025-03-12 11:31:18 -07:00
json-writer.c
json-writer.h
khash.h
kwset.c kwset: avoid using the comma operator unnecessarily 2025-03-28 17:38:09 -07:00
kwset.h
levenshtein.c
levenshtein.h
line-log.c
line-log.h
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c
list-objects-filter-options.h
list-objects-filter.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
list-objects-filter.h
list-objects.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
list-objects.h
list.h
lockfile.c
lockfile.h
log-tree.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
log-tree.h
loose.c
loose.h
ls-refs.c
ls-refs.h
mailinfo.c
mailinfo.h
mailmap.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
mailmap.h
match-trees.c object-file: split out functions relating to object store subsystem 2025-04-15 08:24:36 -07:00
match-trees.h
mem-pool.c
mem-pool.h
merge-blobs.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
merge-blobs.h
merge-ll.c
merge-ll.h
merge-ort-wrappers.c merge-ort: support having merge verbosity be set to 0 2025-03-18 09:48:51 -07:00
merge-ort-wrappers.h merge-recursive.[ch]: thoroughly debug these 2025-04-08 13:59:13 -07:00
merge-ort.c merge-ort: add a new mergeability_only option 2025-05-16 15:09:14 -07:00
merge-ort.h merge-ort: add a new mergeability_only option 2025-05-16 15:09:14 -07:00
merge.c
merge.h
mergesort.h
meson.build Merge branch 'kn/meson-hdr-check' 2025-05-05 14:56:25 -07:00
meson_options.txt meson: wire up benchmarking options 2025-04-28 13:13:52 -07:00
midx-write.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
midx.c object-file: move `git_open_cloexec()` to "compat/open.c" 2025-04-15 08:24:35 -07:00
midx.h
name-hash.c
name-hash.h
notes-cache.c object-file: split out functions relating to object store subsystem 2025-04-15 08:24:36 -07:00
notes-cache.h
notes-merge.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
notes-merge.h
notes-utils.c
notes-utils.h
notes.c object-file: split out functions relating to object store subsystem 2025-04-15 08:24:36 -07:00
notes.h
object-file-convert.c object-file-convert: stop depending on `the_repository` 2025-03-10 13:16:19 -07:00
object-file-convert.h object-file-convert: stop depending on `the_repository` 2025-03-10 13:16:19 -07:00
object-file.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
object-file.h object-file: split up concerns of `HASH_*` flags 2025-04-15 08:24:36 -07:00
object-name.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
object-name.h object-name: introduce `repo_get_oid_with_flags()` 2025-03-12 11:31:16 -07:00
object-store.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
object-store.h object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
object.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
object.h Merge branch 'kn/bundle-dedup-optim' 2025-04-23 13:58:50 -07:00
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c
oidtree.h
pack-bitmap-write.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
pack-bitmap.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
pack-bitmap.h Merge branch 'ps/cat-file-filter-batch' 2025-04-16 13:54:21 -07:00
pack-check.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
pack-mtimes.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
pack-mtimes.h
pack-objects.c
pack-objects.h object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
pack-revindex.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
pack-revindex.h
pack-write.c pack-write: stop depending on `the_repository` and `the_hash_algo` 2025-03-10 13:16:18 -07:00
pack.h pack-write: stop depending on `the_repository` and `the_hash_algo` 2025-03-10 13:16:18 -07:00
packfile.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
packfile.h builtin/pack-objects.c: freshen objects from existing cruft packs 2025-03-13 11:48:04 -07:00
pager.c
pager.h
parallel-checkout.c treewide: replace assert() with ASSERT() in special cases 2025-03-21 03:32:10 -07:00
parallel-checkout.h
parse-options-cb.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
parse-options.c parse-options: introduce precision handling for `OPTION_UNSIGNED` 2025-04-17 08:15:16 -07:00
parse-options.h parse-options: detect mismatches in integer signedness 2025-04-17 08:15:16 -07:00
parse.c parse-options: introduce precision handling for `OPTION_UNSIGNED` 2025-04-17 08:15:16 -07:00
parse.h parse-options: introduce precision handling for `OPTION_UNSIGNED` 2025-04-17 08:15:16 -07:00
patch-delta.c
patch-ids.c
patch-ids.h
path-walk.c
path-walk.h
path.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
path.h object-file: move `safe_create_leading_directories()` into "path.c" 2025-04-15 08:24:35 -07:00
pathspec.c pathspec: fix sign comparison warnings 2025-04-01 02:51:47 -07:00
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
preload-index.h
pretty.c
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
promisor-remote.h
prompt.c
prompt.h
protocol-caps.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
protocol-caps.h
protocol.c
protocol.h
prune-packed.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
prune-packed.h
pseudo-merge.c
pseudo-merge.h Merge branch 'tb/bitamp-typofix' 2025-04-07 14:23:20 -07:00
quote.c
quote.h
range-diff.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
range-diff.h
reachable.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
reachable.h
read-cache-ll.h
read-cache.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
read-cache.h
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
ref-filter.h global: use designated initializers for options 2025-04-17 08:15:15 -07:00
reflog-walk.c
reflog-walk.h
reflog.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
reflog.h builtin/reflog: make functions regarding `reflog_expire_options` public 2025-04-08 07:53:27 -07:00
refs.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
refs.h Merge branch 'kn/non-transactional-batch-updates' 2025-04-16 13:54:19 -07:00
refspec.c refspec: replace `refspec_item_init()` with fetch/push variants 2025-03-21 01:45:16 -07:00
refspec.h refspec: replace `refspec_item_init()` with fetch/push variants 2025-03-21 01:45:16 -07:00
remote-curl.c remote-curl: avoid using the comma operator unnecessarily 2025-03-28 17:38:08 -07:00
remote.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
remote.h remote: allow `guess_remote_head()` to suppress advice 2025-03-25 16:09:27 -07:00
replace-object.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
replace-object.h object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
repo-settings.c environment: move access to "core.bigFileThreshold" into repo settings 2025-03-10 13:16:18 -07:00
repo-settings.h environment: move access to "core.bigFileThreshold" into repo settings 2025-03-10 13:16:18 -07:00
repository.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
repository.h
rerere.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
rerere.h
reset.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
reset.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
revision.h Merge branch 'lo/remove-log-reencode-from-rev-info' 2025-04-29 14:21:31 -07:00
run-command.c git-compat-util: add NOT_CONSTANT macro and use it in atfork_prepare() 2025-03-17 17:30:49 -07:00
run-command.h
sane-ctype.h
scalar.c treewide: replace assert() with ASSERT() in special cases 2025-03-21 03:32:10 -07:00
send-pack.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
send-pack.h
sequencer.c Merge branch 'ps/object-file-cleanup' 2025-04-24 17:25:33 -07:00
sequencer.h
serve.c
serve.h
server-info.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
server-info.h
setup.c
setup.h
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h
shallow.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
shallow.h
shared.mak
shell.c
shortlog.h
sideband.c
sideband.h
sigchain.c
sigchain.h
simple-ipc.h
sparse-index.c
sparse-index.h
split-index.c
split-index.h
stable-qsort.c
statinfo.c
statinfo.h
strbuf.c
strbuf.h
streaming.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
streaming.h
string-list.c
string-list.h
strmap.c
strmap.h
strvec.c
strvec.h
sub-process.c
sub-process.h
submodule-config.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
submodule-config.h
submodule.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
submodule.h
symlinks.c
symlinks.h
tag.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trailer.c
trailer.h
transport-helper.c refspec: replace `refspec_init()` with fetch/push variants 2025-03-21 01:45:16 -07:00
transport-internal.h
transport.c
transport.h
tree-diff.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
tree-walk.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
tree-walk.h
tree.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
tree.h
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unix-stream-server.c
unix-stream-server.h
unpack-trees.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
unpack-trees.h
upload-pack.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c userdiff: add builtin driver for INI files 2025-04-01 03:02:09 -07:00
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version-def.h.in
version.c
version.h
versioncmp.c
versioncmp.h
walker.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
walker.h
wildmatch.c wildmatch: avoid using of the comma operator 2025-03-28 17:38:11 -07:00
wildmatch.h
worktree.c Merge branch 'sj/ref-consistency-checks-more' 2025-03-26 16:26:10 +09:00
worktree.h Merge branch 'sj/ref-consistency-checks-more' 2025-03-26 16:26:10 +09:00
wrapper.c object-file: move `xmmap()` into "wrapper.c" 2025-04-15 08:24:35 -07:00
wrapper.h
write-or-die.c
write-or-die.h
ws.c
ws.h
wt-status.c hash: stop depending on `the_repository` in `null_oid()` 2025-03-10 13:16:20 -07:00
wt-status.h
xdiff-interface.c object-store: merge "object-store-ll.h" and "object-store.h" 2025-04-15 08:24:37 -07:00
xdiff-interface.h

README.md

Build status

Git - fast, scalable, distributed revision control system

Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.

Git is an Open Source project covered by the GNU General Public License version 2 (some parts of it are under different licenses, compatible with the GPLv2). It was originally written by Linus Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

Many Git online resources are accessible from https://git-scm.com/ including full documentation and Git related tools.

See Documentation/gittutorial.adoc to get started, then see Documentation/giteveryday.adoc for a useful minimum set of commands, and Documentation/git-<commandname>.adoc for documentation of each command. If git has been correctly installed, then the tutorial can also be read with man gittutorial or git help tutorial, and the documentation of each command with man git-<commandname> or git help <commandname>.

CVS users may also want to read Documentation/gitcvs-migration.adoc (man gitcvs-migration or git help cvs-migration if git is installed).

The user discussion and development of Git take place on the Git mailing list -- everyone is welcome to post bug reports, feature requests, comments and patches to git@vger.kernel.org (read Documentation/SubmittingPatches for instructions on patch submission and Documentation/CodingGuidelines).

Those wishing to help with error message, usage and informational message string translations (localization l10) should see po/README.md (a po file is a Portable Object file that holds the translations).

To subscribe to the list, send an email to git+subscribe@vger.kernel.org (see https://subspace.kernel.org/subscribing.html for details). The mailing list archives are available at https://lore.kernel.org/git/, https://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

The maintainer frequently sends the "What's cooking" reports that list the current status of various development topics to the mailing list. The discussion following them give a good reference for project status, development direction and remaining tasks.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):

  • random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
  • stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
  • "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
  • "goddamn idiotic truckload of sh*t": when it breaks