1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-18 22:56:07 +02:00
Git Source Code Mirror. Please follow Documentation/SubmittingPatches procedure for any of your improvements.
Go to file
Elijah Newren 64aceb6d73 merge-ort: add code to check for whether cached renames can be reused
We need to know when renames detected in a previous merge operation can
be reused in a later merge operation.  Consider the following setup
(from the git-rebase manpage):

                     A---B---C topic
                    /
               D---E---F---G master

After rebasing, this will appear as:

                             A'--B'--C' topic
                            /
               D---E---F---G master

Further, let's say that 'oldfile' was renamed to 'newfile' between E
and G.  The rebase or cherry-pick of A onto G will involve a three-way
merge between E (as the merge base) and G and A.  After detecting the
rename between E:oldfile and G:newfile, there will be a three-way
content merge of the following:
    E:oldfile
    G:newfile
    A:oldfile
and produce a new result:
    A':newfile

Now, when we want to pick B onto A', we will need to do a three-way
merge between A (as the merge-base) and A' and B.  This will involve
a three-way content merge of
    A:oldfile
    A':newfile
    B:oldfile
but only if we can detect that A:oldfile is similar enough to A':newfile
to be used together in a three-way content merge, i.e. only if we can
detect that A:oldfile and A':newfile are a rename.  But we already know
that A:oldfile and A':newfile are similar enough to be used in a
three-way content merge, because that is precisely where A':newfile came
from in the previous merge.

Note that A & A' both appear in both merges.  That gives us the
condition under which we can reuse renames.

There are a couple important points about this optimization:

  - If the rebase or cherry-pick halts for user conflicts, these caches
    are NOT saved anywhere.  Thus, resuming a halted rebase or
    cherry-pick will result in no reused renames for the next commit.
    This is intentional, as user resolution can change files
    significantly and in ways that violate the similarity assumptions
    here.

  - Technically, in a *very* narrow case this might give slightly
    different results for rename detection.  Using the example above,
    if:
      * E:oldfile had 20 lines
      * G:newfile added 10 new lines at the beginning of the file
      * A:oldfile deleted all but the first three lines of the file
    then
      => A':newfile would have 13 lines, 3 of which matches those
         in A:oldfile.

    Consider the two cases:
      * Without this optimization:
        - the next step of the rebase operation (moving B to B')
          would not detect the rename betwen A:oldfile and A':newfile
        - we'd thus get a modify/delete conflict with the rebase
          operation halting for the user to resolve, and have both
          A':newfile and B:oldfile sitting in the working tree.
      * With this optimization:
        - the rename between A:oldfile and A':newfile would be detected
          via the cache of renames
        - a three-way merge between A:oldfile, A':newfile, and B:oldfile
          would commence and be written to A':newfile

    Now, is the difference in behavior a bug...or a bugfix?  I can't
    tell.  Given that A:oldfile and A':newfile are not very similar,
    when we three-way merge with B:oldfile it seems likely we'll hit a
    conflict for the user to resolve.  And it shouldn't be too hard for
    users to see why we did that three-way merge; oldfile and newfile
    *were* renames somewhere in the sequence.  So, most of these corner
    cases will still behave similarly -- namely, a conflict given to the
    user to resolve.  Also, consider the interesting case when commit B
    is a clean revert of commit A.  Without this optimization, a rebase
    could not both apply a weird patch like A and then immediately
    revert it; users would be forced to resolve merge conflicts.  With
    this optimization, it would successfully apply the clean revert.
    So, there is certainly at least one case that behaves better.  Even
    if it's considered a "difference in behavior", I think both behaviors
    are reasonable, and the time savings provided by this optimization
    justify using the slightly altered rename heuristics.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-05-20 15:40:39 +09:00
.github Merge branch 'tb/ci-run-cocci-with-18.04' into maint 2021-02-11 13:57:36 -08:00
Documentation t6429: testcases for remembering renames 2021-05-20 15:40:39 +09:00
block-sha1 block-sha1: take a size_t length parameter 2020-11-16 13:41:35 -08:00
builtin merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict 2021-03-20 12:35:40 -07:00
ci Add testing with merge-ort merge strategy 2021-03-20 12:35:40 -07:00
compat Merge branch 'da/vs-build-iconv-fix' 2020-12-14 10:21:38 -08:00
contrib Remove support for v1 of the PCRE library 2021-01-23 21:15:43 -08:00
ewah bitmap: implement bitmap_is_subset() 2020-12-08 14:48:16 -08:00
git-gui Merge https://github.com/prati0100/git-gui 2020-12-18 15:07:10 -08:00
gitk-git Merge remote-tracking branch 'paulus/master' into pm/gitk-update 2020-10-03 10:06:27 -07:00
gitweb gitweb/Makefile: conditionally include ../GIT-VERSION-FILE 2020-12-08 16:56:56 -08:00
mergetools Merge branch 'pd/mergetool-nvimdiff' 2020-11-21 15:14:39 -08:00
negotiator negotiator/noop: add noop fetch negotiator 2020-08-18 13:25:05 -07:00
perl Merge branch 'jk/perl-warning' 2020-11-09 14:06:25 -08:00
po tests: remove support for GIT_TEST_GETTEXT_POISON 2021-01-21 15:50:01 -08:00
ppc
refs refs/files-backend: don't peek into `struct lock_file` 2021-01-06 13:53:32 -08:00
sha1collisiondetection@855827c583
sha1dc
sha256 hash: implement and use a context cloning function 2020-02-24 09:33:21 -08:00
t t6429: testcases for remembering renames 2021-05-20 15:40:39 +09:00
templates hook: add sample template for push-to-checkout 2020-10-16 08:47:02 -07:00
trace2 trace2: teach Git to log environment variables 2020-03-23 13:14:53 -07:00
vcs-svn drop vcs-svn experiment 2020-08-13 11:02:15 -07:00
xdiff diff: add -I<regex> that ignores matching changes 2020-10-20 12:53:26 -07:00
.cirrus.yml CI: add FreeBSD CI support via Cirrus-CI 2019-12-20 12:09:12 -08:00
.clang-format
.editorconfig editorconfig: indent text files with tabs 2020-01-06 08:46:32 -08:00
.gitattributes CoC: explicitly take any whitespace breakage 2021-01-04 09:44:49 -08:00
.gitignore Merge branch 'fc/random-cleanup' 2020-12-08 15:11:21 -08:00
.gitmodules
.mailmap Merge branch 'bc/wildcard-credential' 2020-03-05 10:43:02 -08:00
.travis.yml ci: remove GETTEXT_POISON jobs 2021-01-21 15:50:00 -08:00
.tsan-suppressions replace-object: make replace operations thread-safe 2020-01-17 13:52:14 -08:00
CODE_OF_CONDUCT.md CoC: update to version 2.0 + local changes 2021-01-13 17:45:04 -08:00
COPYING
GIT-VERSION-GEN Git 2.30.1 2021-02-08 14:05:55 -08:00
INSTALL doc: mention Python 3.x supports 2020-12-14 15:01:03 -08:00
LGPL-2.1
Makefile Merge branch 'ab/grep-pcre-invalid-utf8' 2021-02-10 14:48:33 -08:00
README.md ci: retire the Azure Pipelines definition 2020-04-10 10:30:40 -07:00
RelNotes Prepare for 2.30.1 2021-02-05 16:31:28 -08:00
abspath.c abspath: add a function to resolve paths with missing components 2020-12-12 23:35:47 -08:00
aclocal.m4
add-interactive.c Merge branch 'js/add-i-color-fix' 2020-12-08 15:11:17 -08:00
add-interactive.h built-in add -p: respect the `interactive.singlekey` config setting 2020-01-15 12:06:17 -08:00
add-patch.c Merge branch 'js/add-i-color-fix' 2020-12-08 15:11:17 -08:00
advice.c push: parse and set flag for "--force-if-includes" 2020-10-03 09:59:19 -07:00
advice.h push: parse and set flag for "--force-if-includes" 2020-10-03 09:59:19 -07:00
alias.c
alias.h
alloc.c commit: move members graph_pos, generation to a slab 2020-06-17 14:37:30 -07:00
alloc.h object: drop parsed_object_pool->commit_count 2020-06-17 14:37:14 -07:00
apply.c Merge branch 'ab/unreachable-break' 2020-12-18 15:15:18 -08:00
apply.h
archive-tar.c archive: support compression levels beyond 9 2020-11-09 11:25:45 -08:00
archive-zip.c archive: read short blobs in archive.c::write_archive_entry() 2020-09-19 15:56:05 -07:00
archive.c Merge branch 'rs/archive-plug-leak-refname' 2020-11-25 15:24:53 -08:00
archive.h Merge branch 'rs/archive-plug-leak-refname' 2020-11-25 15:24:53 -08:00
attr.c Use new HASHMAP_INIT macro to simplify hashmap initialization 2020-11-11 12:55:27 -08:00
attr.h
banned.h banned.h: mark ctime_r() and asctime_r() as banned 2020-12-02 14:30:39 -08:00
base85.c
bisect.c hash-lookup: rename from sha1-lookup 2021-01-04 13:01:55 -08:00
bisect.h bisect: combine args passed to find_bisection() 2020-08-07 15:13:03 -07:00
blame.c Merge branch 'en/strmap' 2020-11-21 15:14:38 -08:00
blame.h blame: simplify 'setup_blame_bloom_data' interface 2020-11-01 15:54:15 -08:00
blob.c object: drop parsed_object_pool->commit_count 2020-06-17 14:37:14 -07:00
blob.h
bloom.c Use new HASHMAP_INIT macro to simplify hashmap initialization 2020-11-11 12:55:27 -08:00
bloom.h bloom: encode out-of-bounds filters as non-empty 2020-09-17 21:55:50 -07:00
branch.c merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict 2021-03-20 12:35:40 -07:00
branch.h
builtin.h Merge branch 'ds/maintenance-part-3' 2020-11-18 13:32:53 -08:00
bulk-checkin.c
bulk-checkin.h
bundle.c bundle: arguments can be read from stdin 2021-01-11 21:50:41 -08:00
bundle.h Merge branch 'bc/sha-256-part-3' 2020-08-11 18:04:11 -07:00
cache-tree.c cache-tree: extract subtree_pos() 2021-01-23 17:14:07 -08:00
cache-tree.h cache-tree: extract subtree_pos() 2021-01-23 17:14:07 -08:00
cache.h Merge branch 'ds/more-index-cleanups' 2021-02-10 14:48:33 -08:00
chdir-notify.c
chdir-notify.h
check-builtins.sh
check_bindir
checkout.c config: drop git_config_get_string_const() 2020-08-17 15:35:47 -07:00
checkout.h
color.c color.c: alias RGB colors 8-15 to aixterm colors 2020-02-11 11:19:00 -08:00
color.h
column.c Merge branch 'jk/strvec' 2020-08-10 10:23:57 -07:00
column.h
combine-diff.c Merge branch 'jk/diff-cc-oidfind-fix' 2020-10-05 14:01:55 -07:00
command-list.txt mailmap doc: create a new "gitmailmap(5)" man page 2021-01-12 14:04:39 -08:00
commit-graph.c Merge branch 'jk/use-oid-pos' 2021-02-10 14:48:31 -08:00
commit-graph.h Merge branch 'tb/bloom-improvements' 2020-09-29 14:01:20 -07:00
commit-reach.c commit-reach: fix in_merge_bases_many bug 2020-10-02 10:26:31 -07:00
commit-reach.h commit-reach: avoid is_descendant_of() shim 2020-06-23 16:36:53 -07:00
commit-slab-decl.h Merge branch 'sg/commit-graph-cleanups' into master 2020-07-30 13:20:30 -07:00
commit-slab-impl.h commit-slab: add a function to deep free entries on the slab 2020-06-08 12:28:49 -07:00
commit-slab.h commit-slab: add a function to deep free entries on the slab 2020-06-08 12:28:49 -07:00
commit.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
commit.h commit_graft_pos(): take an oid instead of a bare hash 2021-01-28 11:21:07 -08:00
common-main.c
config.c Merge branch 'ab/detox-gettext-tests' 2021-02-10 14:48:33 -08:00
config.h Merge branch 'ps/config-env-pairs' 2021-01-25 14:19:19 -08:00
config.mak.dev Merge branch 'jc/sparse-error-for-developer-build' 2020-11-18 13:32:54 -08:00
config.mak.in
config.mak.uname config.mak.uname: remove redundant NO_LIBPCRE1_JIT flag 2021-01-23 21:15:12 -08:00
configure.ac Remove support for v1 of the PCRE library 2021-01-23 21:15:43 -08:00
connect.c Merge branch 'jk/forbid-lf-in-git-url' into maint 2021-02-05 16:31:27 -08:00
connect.h Merge branch 'bc/sha-256-part-2' 2020-07-06 22:09:13 -07:00
connected.c Merge branch 'rs/more-buffered-io' 2020-08-24 14:54:31 -07:00
connected.h connected: always use partial clone optimization 2020-03-29 10:37:44 -07:00
convert.c convert: drop unused crlf_action from check_global_conv_flags_eol() 2020-09-30 12:53:47 -07:00
convert.h convert: provide additional metadata to filters 2020-03-16 11:37:02 -07:00
copy.c
credential.c credential: treat CR/LF as line endings in the credential protocol 2020-10-03 10:41:03 -07:00
credential.h credential: correct order of parameters for credential_match 2020-05-04 22:56:33 -07:00
csum-file.c hash: implement and use a context cloning function 2020-02-24 09:33:21 -08:00
csum-file.h csum-file: add hashwrite_be64() 2020-11-12 09:40:06 -08:00
ctype.c
daemon.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
date.c date.c: allow compact version of ISO-8601 datetime 2020-04-24 14:06:09 -07:00
decorate.c
decorate.h
delta-islands.c oid_array: rename source file from sha1-array 2020-03-30 10:59:08 -07:00
delta-islands.h
delta.h
detect-compiler
diff-delta.c
diff-lib.c Merge branch 'rs/plug-diff-cache-leak' 2020-11-25 15:24:53 -08:00
diff-merges.c diff-merges: add '--diff-merges=1' as synonym for 'first-parent' 2020-12-21 13:47:32 -08:00
diff-merges.h diff-merges: get rid of now empty diff_merges_init_revs() 2020-12-21 13:47:31 -08:00
diff-no-index.c
diff.c Merge branch 'sj/untracked-files-in-submodule-directory-is-not-dirty' 2021-01-25 14:19:18 -08:00
diff.h Merge branch 'sj/untracked-files-in-submodule-directory-is-not-dirty' 2021-01-25 14:19:18 -08:00
diffcore-break.c diff: restrict when prefetching occurs 2020-04-07 16:09:29 -07:00
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c diffcore-rename: determine which relevant_sources are no longer relevant 2021-03-18 14:32:56 -07:00
diffcore.h merge-ort: record the reason that we want a rename for a file 2021-03-18 14:32:56 -07:00
dir-iterator.c
dir-iterator.h
dir.c sparse-checkout: load sparse-checkout patterns 2021-01-23 17:14:07 -08:00
dir.h sparse-checkout: load sparse-checkout patterns 2021-01-23 17:14:07 -08:00
editor.c config: fix leaks from git_config_get_string_const() 2020-08-14 10:52:04 -07:00
entry.c checkout_entry(): remove unreachable error() call 2020-08-18 13:26:10 -07:00
environment.c config: allow specifying config entries via envvar pairs 2021-01-15 13:03:45 -08:00
environment.h environment: make `getenv_safe()` a public function 2021-01-15 13:03:45 -08:00
exec-cmd.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
exec-cmd.h argv-array: rename to strvec 2020-07-28 15:02:17 -07:00
fetch-negotiator.c negotiator/noop: add noop fetch negotiator 2020-08-18 13:25:05 -07:00
fetch-negotiator.h
fetch-pack.c fetch-pack: refactor writing promisor file 2021-01-12 16:01:07 -08:00
fetch-pack.h Merge branch 'jt/lazy-fetch' 2020-09-03 12:37:04 -07:00
fmt-merge-msg.c Merge branch 'so/log-diff-merge' 2021-02-05 16:40:44 -08:00
fmt-merge-msg.h Lib-ify fmt-merge-msg 2020-03-24 15:04:43 -07:00
fsck.c Merge branch 'jk/forbid-lf-in-git-url' into maint 2021-02-05 16:31:27 -08:00
fsck.h fsck: make fsck_config() re-usable 2021-01-05 14:58:29 -08:00
fsmonitor.c fsmonitor: de-duplicate BUG()s around dirty bits 2021-01-23 17:14:07 -08:00
fsmonitor.h
fuzz-commit-graph.c commit-graph: pass a 'struct repository *' in more places 2020-09-09 12:51:48 -07:00
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh Fit to Plan 9's ANSI/POSIX compatibility layer 2020-09-09 22:31:31 -07:00
generate-configlist.sh help: move list_config_help to builtin/help 2020-04-16 15:22:16 -07:00
gettext.c Merge branch 'ab/detox-gettext-tests' 2021-02-10 14:48:33 -08:00
gettext.h tests: remove support for GIT_TEST_GETTEXT_POISON 2021-01-21 15:50:01 -08:00
git-add--interactive.perl Merge branch 'js/add-i-color-fix' 2020-12-08 15:11:17 -08:00
git-archimport.perl
git-bisect.sh Merge branch 'mr/bisect-in-c-3' 2020-11-09 14:06:25 -08:00
git-compat-util.h git-compat-util: always enable variadic macros 2021-01-27 22:14:37 -08:00
git-cvsexportcommit.perl cvsexportcommit: do not run git programs in dashed form 2020-08-26 14:49:52 -07:00
git-cvsimport.perl git-cvsimport: port to SHA-256 2020-06-22 11:21:07 -07:00
git-cvsserver.perl git-cvsserver: port to SHA-256 2020-06-22 11:21:07 -07:00
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh Merge branch 'pb/mergetool-tool-help-fix' into maint 2021-02-05 16:31:24 -08:00
git-mergetool.sh
git-p4.py Merge branch 'dl/p4-encode-after-kw-expansion' into maint 2021-02-08 14:05:54 -08:00
git-quiltimport.sh
git-rebase--preserve-merges.sh rebase: remove unused function reschedule_last_action 2020-08-12 12:25:42 -07:00
git-request-pull.sh
git-send-email.perl git-send-email: die if sendmail.* config is set 2020-07-23 18:00:34 -07:00
git-sh-i18n.sh tests: remove support for GIT_TEST_GETTEXT_POISON 2021-01-21 15:50:01 -08:00
git-sh-setup.sh
git-submodule.sh submodule: fix fetch_in_submodule logic 2020-11-24 13:14:09 -08:00
git-svn.perl perl: check for perl warnings while running tests 2020-10-21 23:11:48 -07:00
git-web--browse.sh
git.c Merge branch 'ps/config-env-pairs' 2021-01-25 14:19:19 -08:00
git.rc
gpg-interface.c strvec: fix indentation in renamed calls 2020-07-28 15:02:18 -07:00
gpg-interface.h gpg-interface: prefer check_signature() for GPG verification 2020-03-15 09:46:28 -07:00
graph.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
graph.h
grep.c Merge branch 'ab/grep-pcre-invalid-utf8' 2021-02-10 14:48:33 -08:00
grep.h Merge branch 'ab/grep-pcre-invalid-utf8' 2021-02-10 14:48:33 -08:00
hash-lookup.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
hash-lookup.h oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
hash.h cache.h: move hash/oid functions to hash.h 2020-12-04 13:55:14 -08:00
hashmap.c hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
hashmap.h hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
help.c help.c: help.autocorrect=never means "do not compute suggestions" 2020-11-25 13:02:15 -08:00
help.h help: do not expect built-in commands to be hardlinked 2020-10-07 15:25:10 -07:00
hex.c hex: add functions to parse hex object IDs in any algorithm 2020-02-24 09:33:21 -08:00
http-backend.c strvec: fix indentation in renamed calls 2020-07-28 15:02:18 -07:00
http-fetch.c http-fetch: set up git directory before parsing pack hashes 2020-07-30 09:16:48 -07:00
http-push.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
http-walker.c http: refactor finish_http_pack_request() 2020-06-10 18:06:34 -07:00
http.c strvec: fix indentation in renamed calls 2020-07-28 15:02:18 -07:00
http.h Merge branch 'jt/cdn-offload' 2020-06-25 12:27:47 -07:00
ident.c Merge branch 'pw/rebase-i-more-options' 2020-09-03 12:37:01 -07:00
imap-send.c imap-send: parse default git config 2020-12-01 11:10:59 -08:00
iterator.h
json-writer.c
json-writer.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c line-log: handle deref_tag() returning NULL 2020-10-12 12:25:14 -07:00
line-log.h line-log: more responsive, incremental 'git log -L' 2020-05-11 09:33:56 -07:00
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c list-objects-filter-options: fix function name in BUG 2020-11-16 14:28:25 -08:00
list-objects-filter-options.h list_objects_filter_options: introduce 'list_object_filter_config_name' 2020-08-03 18:03:24 -07:00
list-objects-filter.c object-name.c: rename from sha1-name.c 2021-01-04 13:01:55 -08:00
list-objects-filter.h
list-objects.c
list-objects.h
list.h
ll-merge.c parse_config_key(): return subsection len as size_t 2020-04-10 14:44:29 -07:00
ll-merge.h
lockfile.c lockfile.c: introduce 'hold_lock_file_for_update_mode' 2020-04-27 11:27:36 -07:00
lockfile.h lockfile.c: introduce 'hold_lock_file_for_update_mode' 2020-04-27 11:27:36 -07:00
log-tree.c Merge branch 'so/log-diff-merge' 2021-02-05 16:40:44 -08:00
log-tree.h format-patch: make output filename configurable 2020-11-09 17:44:41 -08:00
ls-refs.c Merge branch 'tb/ls-refs-optim' 2021-02-05 16:40:45 -08:00
ls-refs.h argv-array: rename to strvec 2020-07-28 15:02:17 -07:00
mailinfo.c mailinfo: disallow NUL character in mail's header 2020-04-22 14:01:03 -07:00
mailinfo.h
mailmap.c shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
mailmap.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
match-trees.c
mem-pool.c mem-pool: use consistent pool variable name 2020-08-18 12:16:08 -07:00
mem-pool.h mem-pool: use consistent pool variable name 2020-08-18 12:16:08 -07:00
merge-blobs.c
merge-blobs.h
merge-ort-wrappers.c merge-ort-wrappers: new convience wrappers to mimic the old merge API 2020-10-26 22:36:14 -07:00
merge-ort-wrappers.h merge-ort-wrappers: new convience wrappers to mimic the old merge API 2020-10-26 22:36:14 -07:00
merge-ort.c merge-ort: add code to check for whether cached renames can be reused 2021-05-20 15:40:39 +09:00
merge-ort.h merge-ort: implement merge_incore_recursive() 2020-12-16 21:56:39 -08:00
merge-recursive.c merge-recursive: add a bunch of FIXME comments documenting known bugs 2021-03-20 12:35:40 -07:00
merge-recursive.h merge-recursive: fix unclear and outright wrong comments 2020-08-02 11:03:57 -07:00
merge.c dir: fix problematic API to avoid memory leaks 2020-08-18 17:17:31 -07:00
mergesort.c
mergesort.h
midx.c Merge branch 'ma/more-opaque-lock-file' 2021-01-25 14:19:17 -08:00
midx.h Merge branch 'ds/multi-pack-index' 2020-05-01 13:39:55 -07:00
name-hash.c name-hash: use trace2 regions for init 2021-01-23 17:14:07 -08:00
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c strbuf: add and use strbuf_insertstr() 2020-02-10 09:04:45 -08:00
notes-utils.h
notes.c Merge branch 'na/notes-displayref-is-not-boolean' 2020-11-30 14:49:44 -08:00
notes.h Merge branch 'dl/format-patch-notes-config-fixup' 2019-12-25 11:21:58 -08:00
object-file.c hash-lookup: rename from sha1-lookup 2021-01-04 13:01:55 -08:00
object-name.c object-name.c: rename from sha1-name.c 2021-01-04 13:01:55 -08:00
object-store.h sha1-file: introduce no-lazy-fetch has_object() 2020-08-06 13:01:02 -07:00
object.c bundle: lost objects when removing duplicate pendings 2021-01-11 21:50:41 -08:00
object.h object: allow clear_commit_marks_all to handle any repo 2020-10-31 10:46:34 -07:00
oid-array.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
oid-array.h oid-array: provide a for-loop iterator 2020-12-07 12:32:04 -08:00
oidmap.c hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
oidmap.h
oidset.c blame: silently ignore invalid ignore file objects 2020-11-10 13:05:06 -08:00
oidset.h blame: validate and peel the object names on the ignore list 2020-09-24 22:20:58 -07:00
pack-bitmap-write.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
pack-bitmap.c rebuild_existing_bitmaps(): convert to new revindex API 2021-01-13 21:53:46 -08:00
pack-bitmap.h pack-bitmap: factor out 'bitmap_for_commit()' 2020-12-08 14:49:04 -08:00
pack-check.c fsck: correctly compute checksums on idx files larger than 4GB 2020-11-16 13:41:35 -08:00
pack-objects.c pack-objects: convert oe_set_delta_ext() to use object_id 2020-02-24 12:55:52 -08:00
pack-objects.h pack-objects: convert oe_set_delta_ext() to use object_id 2020-02-24 12:55:52 -08:00
pack-revindex.c pack-revindex.c: avoid direct revindex access in 'offset_to_pack_pos()' 2021-01-13 21:53:48 -08:00
pack-revindex.h pack-revindex: hide the definition of 'revindex_entry' 2021-01-13 21:53:48 -08:00
pack-write.c pack-write: die on error in write_promisor_file() 2021-01-14 17:02:22 -08:00
pack.h fetch-pack: refactor writing promisor file 2021-01-12 16:01:07 -08:00
packfile.c Merge branch 'tb/pack-revindex-api' 2021-01-25 14:19:20 -08:00
packfile.h midx: traverse the local MIDX first 2020-08-28 14:07:09 -07:00
pager.c strvec: convert remaining callers away from argv_array name 2020-07-28 15:02:18 -07:00
parse-options-cb.c assert PARSE_OPT_NONEG in parse-options callbacks 2020-09-30 12:53:47 -07:00
parse-options.c parse-options: add --git-completion-helper-all 2020-08-19 17:46:17 -07:00
parse-options.h parse-options: format argh like error messages 2021-01-06 15:10:27 -08:00
patch-delta.c
patch-ids.c Merge branch 'jk/log-cherry-pick-duplicate-patches' into maint 2021-02-05 16:31:28 -08:00
patch-ids.h patch-ids: handle duplicate hashmap entries 2021-01-12 11:13:32 -08:00
path.c merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict 2021-03-20 12:35:40 -07:00
path.h merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict 2021-03-20 12:35:40 -07:00
pathspec.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
pathspec.h Merge branch 'hw/doc-in-header' 2019-12-16 13:08:39 -08:00
pkt-line.c sideband: diagnose more sideband anomalies 2020-10-29 09:23:29 -07:00
pkt-line.h Merge branch 'bc/sha-256-part-2' 2020-07-06 22:09:13 -07:00
preload-index.c
pretty.c pretty: lazy-load commit data when expanding user-format 2021-01-28 14:07:35 -08:00
pretty.h pretty: refactor `format_sanitized_subject()` 2020-08-28 13:52:51 -07:00
prio-queue.c
prio-queue.h
progress.c Merge branch 'ma/stop-progress-null-fix' 2020-08-17 17:02:48 -07:00
progress.h progress.c: silence cgcc suggestion about internal linkage 2020-04-27 11:21:28 -07:00
promisor-remote.c promisor-remote: remove unused variable 2020-09-21 22:32:49 -07:00
promisor-remote.h promisor-remote: remove unused variable 2020-09-21 22:32:49 -07:00
prompt.c interactive: explicitly `fflush` stdout before expecting input 2020-04-10 10:27:16 -07:00
prompt.h interactive: refactor code asking the user for interactive input 2020-04-10 10:26:31 -07:00
protocol.c protocol: re-enable v2 protocol by default 2020-09-25 11:40:42 -07:00
protocol.h
prune-packed.c Lib-ify prune-packed 2020-03-24 15:04:44 -07:00
prune-packed.h Lib-ify prune-packed 2020-03-24 15:04:44 -07:00
quote.c quote: make sq_dequote_step() a public function 2021-01-12 12:03:18 -08:00
quote.h quote: make sq_dequote_step() a public function 2021-01-12 12:03:18 -08:00
range-diff.c Use new HASHMAP_INIT macro to simplify hashmap initialization 2020-11-11 12:55:27 -08:00
range-diff.h strvec: convert remaining callers away from argv_array name 2020-07-28 15:02:18 -07:00
reachable.c pack-bitmap: basic noop bitmap filter infrastructure 2020-02-14 10:46:22 -08:00
reachable.h
read-cache.c read-cache: try not to peek into `struct {lock_,temp}file` 2021-01-06 13:53:32 -08:00
rebase-interactive.c Merge branch 'rt/format-zero-length-fix' 2020-03-09 11:21:21 -07:00
rebase-interactive.h Merge branch 'en/rebase-backend' 2020-03-02 15:07:19 -08:00
rebase.c pull --rebase/remote rename: document and honor single-letter abbreviations rebase types 2020-02-10 10:52:10 -08:00
rebase.h pull --rebase/remote rename: document and honor single-letter abbreviations rebase types 2020-02-10 10:52:10 -08:00
ref-filter.c Merge branch 'tb/ls-refs-optim' 2021-02-05 16:40:45 -08:00
ref-filter.h branch: sort detached HEAD based on a flag 2021-01-07 15:13:21 -08:00
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'tb/ls-refs-optim' 2021-02-05 16:40:45 -08:00
refs.h Merge branch 'tb/ls-refs-optim' 2021-02-05 16:40:45 -08:00
refspec.c Merge branch 'fc/atmark-in-refspec' 2020-12-14 10:21:36 -08:00
refspec.h Merge branch 'sb/clone-origin' 2020-10-27 15:09:50 -07:00
remote-curl.c push: parse and set flag for "--force-if-includes" 2020-10-03 09:59:19 -07:00
remote.c Merge branch 'nk/refspecs-negative-fix' 2020-12-23 13:59:46 -08:00
remote.h fetch: extract writing to FETCH_HEAD 2021-01-12 12:06:14 -08:00
replace-object.c replace-object: make replace operations thread-safe 2020-01-17 13:52:14 -08:00
replace-object.h replace-object: make replace operations thread-safe 2020-01-17 13:52:14 -08:00
repo-settings.c Merge branch 'ds/maintenance-part-2' 2020-10-27 15:09:47 -07:00
repository.c repository: add repo reference to index_state 2021-01-23 17:14:07 -08:00
repository.h Merge branch 'ds/maintenance-part-2' 2020-10-27 15:09:47 -07:00
rerere.c rerere: use strmap to store rerere directories 2021-01-28 11:26:20 -08:00
rerere.h
reset.c Merge branch 'dl/merge-autostash' 2020-04-29 16:15:27 -07:00
reset.h reset: extract reset_head() from rebase 2020-04-10 09:28:02 -07:00
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'ab/lose-grep-debug' 2021-02-10 14:48:31 -08:00
revision.h Merge branch 'so/log-diff-merge' 2021-02-05 16:40:44 -08:00
run-command.c maintenance: optionally skip --auto process 2020-09-25 10:59:44 -07:00
run-command.h run-command: document use_shell option 2021-01-22 14:21:32 -08:00
send-pack.c Merge branch 'js/trace2-session-id' 2020-12-08 15:11:20 -08:00
send-pack.h
sequencer.c merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict 2021-03-20 12:35:40 -07:00
sequencer.h Merge branch 'en/merge-ort-api-null-impl' 2020-11-18 13:32:53 -08:00
serve.c upload-pack, serve: log received client session ID 2020-11-11 18:26:53 -08:00
serve.h argv-array: rename to strvec 2020-07-28 15:02:17 -07:00
server-info.c
setup.c Merge branch 'bc/sha-256-part-3' 2020-08-11 18:04:11 -07:00
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h
shallow.c commit_graft_pos(): take an oid instead of a bare hash 2021-01-28 11:21:07 -08:00
shallow.h shallow: use struct 'shallow_lock' for additional safety 2020-04-30 14:19:13 -07:00
shell.c interactive: refactor code asking the user for interactive input 2020-04-10 10:26:31 -07:00
shortlog.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
sideband.c Merge branch 'jk/sideband-more-error-checking' 2020-11-09 14:06:29 -08:00
sideband.h sideband: diagnose more sideband anomalies 2020-10-29 09:23:29 -07:00
sigchain.c
sigchain.h
split-index.c mem-pool: use more standard initialization and finalization 2020-08-18 12:16:06 -07:00
split-index.h
stable-qsort.c
strbuf.c Merge branch 'rs/retire-strbuf-write-fd' 2020-06-29 14:17:26 -07:00
strbuf.h Merge branch 'rs/retire-strbuf-write-fd' 2020-06-29 14:17:26 -07:00
streaming.c streaming: allow open_istream() to handle any repo 2020-01-31 10:45:39 -08:00
streaming.h streaming: allow open_istream() to handle any repo 2020-01-31 10:45:39 -08:00
string-list.c
string-list.h Merge branch 'en/string-list-can-be-custom-sorted' into maint 2020-02-14 12:42:27 -08:00
strmap.c strmap: take advantage of FLEXPTR_ALLOC_STR when relevant 2020-11-11 12:55:27 -08:00
strmap.h strmap: make callers of strmap_remove() to call it in void context 2020-12-15 15:30:44 -08:00
strvec.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
strvec.h strvec: rename struct fields 2020-07-30 19:18:06 -07:00
sub-process.c strvec: convert remaining callers away from argv_array name 2020-07-28 15:02:18 -07:00
sub-process.h
submodule-config.c hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
submodule-config.h submodule-config: add skip_if_read option to repo_read_gitmodules() 2020-01-17 13:52:14 -08:00
submodule.c Merge branch 'sj/untracked-files-in-submodule-directory-is-not-dirty' 2021-01-25 14:19:18 -08:00
submodule.h submodule: rename helper functions to avoid ambiguity 2020-08-12 14:12:58 -07:00
symlinks.c
tag.c object: drop parsed_object_pool->commit_count 2020-06-17 14:37:14 -07:00
tag.h
tar.h
tempfile.c tempfile.c: introduce 'create_tempfile_mode' 2020-04-27 11:27:35 -07:00
tempfile.h tempfile.c: introduce 'create_tempfile_mode' 2020-04-27 11:27:35 -07:00
thread-utils.c
thread-utils.h
tmp-objdir.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
tmp-objdir.h
trace.c http, imap-send: stop using CURLOPT_VERBOSE 2020-05-11 11:18:01 -07:00
trace.h http, imap-send: stop using CURLOPT_VERBOSE 2020-05-11 11:18:01 -07:00
trace2.c trace2: add a public function for getting the SID 2020-11-11 18:26:52 -08:00
trace2.h trace2: add a public function for getting the SID 2020-11-11 18:26:52 -08:00
trailer.c pretty format %(trailers): add a "key_value_separator" 2020-12-09 14:16:42 -08:00
trailer.h pretty format %(trailers): add a "key_value_separator" 2020-12-09 14:16:42 -08:00
transport-helper.c push: parse and set flag for "--force-if-includes" 2020-10-03 09:59:19 -07:00
transport-internal.h strvec: convert remaining callers away from argv_array name 2020-07-28 15:02:18 -07:00
transport.c transport: log received server session ID 2020-11-11 18:26:53 -08:00
transport.h push: parse and set flag for "--force-if-includes" 2020-10-03 09:59:19 -07:00
tree-diff.c bloom/diff: properly short-circuit on max_changes 2020-09-17 09:31:25 -07:00
tree-walk.c tree-walk: report recursion counts 2021-01-04 15:23:08 -08:00
tree-walk.h tree-walk.c: break circular dependency with unpack-trees 2020-02-04 10:32:15 -08:00
tree.c tree: enable cmp_cache_name_compare() to be used elsewhere 2020-12-13 14:18:20 -08:00
tree.h tree: enable cmp_cache_name_compare() to be used elsewhere 2020-12-13 14:18:20 -08:00
unicode-width.h unicode: update the width tables to Unicode 13.0 2020-03-17 15:06:37 -07:00
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c sparse-checkout: load sparse-checkout patterns 2021-01-23 17:14:07 -08:00
unpack-trees.h strvec: convert remaining callers away from argv_array name 2020-07-28 15:02:18 -07:00
upload-pack.c refs: switch peel_ref() to peel_iterated_oid() 2021-01-21 15:51:31 -08:00
upload-pack.h argv-array: rename to strvec 2020-07-28 15:02:17 -07:00
url.c
url.h
urlmatch.c credential: handle `credential.<partial-URL>.<key>` again 2020-04-24 15:53:46 -07:00
urlmatch.h credential: handle `credential.<partial-URL>.<key>` again 2020-04-24 15:53:46 -07:00
usage.c Merge branch 'jt/trace-error-on-warning' 2020-12-08 15:11:17 -08:00
userdiff.c Merge branch 've/userdiff-bash' 2020-11-02 13:17:46 -08:00
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c Merge branch 'rs/show-progress-in-dumb-http-fetch' 2020-03-09 11:21:21 -07:00
walker.h remote-curl: show progress for fetches over dumb HTTP 2020-03-03 13:15:40 -08:00
wildmatch.c
wildmatch.h
worktree.c worktree: teach worktree_lock_reason() to gently handle main worktree 2021-01-30 09:57:20 -08:00
worktree.h worktree: teach worktree to lazy-load "prunable" reason 2021-01-30 09:57:16 -08:00
wrap-for-bin.sh
wrapper.c xrealloc: do not reuse pointer freed by zero-length realloc() 2020-09-02 12:18:14 -07:00
write-or-die.c
ws.c
wt-status.c Merge branch 'sj/untracked-files-in-submodule-directory-is-not-dirty' 2021-01-25 14:19:18 -08:00
wt-status.h branch: sort detached HEAD based on a flag 2021-01-07 15:13:21 -08:00
xdiff-interface.c xdiff: avoid computing non-zero offset from NULL pointer 2020-01-28 23:13:25 -08:00
xdiff-interface.h
zlib.c

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.txt to get started, then see Documentation/giteveryday.txt for a useful minimum set of commands, and Documentation/git-<commandname>.txt 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.txt (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). To subscribe to the list, send an email with just "subscribe git" in the body to majordomo@vger.kernel.org. The mailing list archives are available at https://lore.kernel.org/git/, http://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