Git with broken hash generation to generate collisions between object IDs. Don't use this! https://undefinedbehavior.de/posts/commit-vandalism/
Go to file
Elijah Newren 434e0636db sequencer: do not export GIT_DIR and GIT_WORK_TREE for 'exec'
Commands executed from `git rebase --exec` can give different behavior
from within that environment than they would outside of it, due to the
fact that sequencer.c exports both GIT_DIR and GIT_WORK_TREE.  For
example, if the relevant script calls something like

  git -C ../otherdir log --format=%H --no-walk

the user may be surprised to find that the command above does not show a
commit hash from ../otherdir, because $GIT_DIR prevents automatic gitdir
detection and makes the -C option useless.

This is a regression in behavior from the original legacy
implemented-in-shell rebase.  It is perhaps rare for it to cause
problems in practice, especially since most small problems that were
caused by this area of bugs has been fixed-up in the past in a way that
masked the particular bug observed without fixing the real underlying
problem.

An explanation of how we arrived at the current situation is perhaps
merited.  The setting of GIT_DIR and GIT_WORK_TREE done by sequencer.c
arose from a sequence of historical accidents:

* When rebase was implemented as a shell command, it would call
  git-sh-setup, which among other things would set GIT_DIR -- but not
  export it.  This meant that when rebase --exec commands were run via
      /bin/sh -c "$COMMAND"
  they would not inherit the GIT_DIR setting.  The fact that GIT_DIR
  was not set in the run $COMMAND is the behavior we'd like to restore.

* When the rebase--helper builtin was introduced to allow incrementally
  replacing shell with C code, we had an implementation that was half
  shell, half C.  In particular, commit 18633e1a22 ("rebase -i: use the
  rebase--helper builtin", 2017-02-09) added calls to
      exec git rebase--helper ...
  which caused rebase--helper to inherit the GIT_DIR environment
  variable from the shell.  git's setup would change the environment
  variable from an absolute path to a relative one (".git"), but would
  leave it set.  This meant that when rebase --exec commands were run
  via
      run_command_v_opt(...)
  they would inherit the GIT_DIR setting.

* In commit 09d7b6c6fa ("sequencer: pass absolute GIT_DIR to exec
  commands", 2017-10-31), it was noted that the GIT_DIR caused problems
  with some commands; e.g.
      git rebase --exec 'cd subdir && git describe' ...
  would have GIT_DIR=.git which was invalid due to the change to the
  subdirectory.  Instead of questioning why GIT_DIR was set, that commit
  instead made sequencer change GIT_DIR to be an absolute path and
  explicitly export it via
      argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
      run_command_v_opt_cd_env(..., child_env.argv)

* In commit ab5e67d751 ("sequencer: pass absolute GIT_WORK_TREE to exec
  commands", 2018-07-14), it was noted that when GIT_DIR is set but
  GIT_WORK_TREE is not, that we do not discover GIT_WORK_TREE but just
  assume it is '.'.  That is incorrect if trying to run commands from a
  subdirectory.  However, rather than question why GIT_DIR was set, that
  commit instead also added GIT_WORK_TREE to the list of things to
  export.

Each of the above problems would have been fixed automatically when
git-rebase became a full builtin, had it not been for the fact that
sequencer.c started exporting GIT_DIR and GIT_WORK_TREE in the interim.
Stop exporting them now.

Signed-off-by: Elijah Newren <newren@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Acked-by: Johannes Altmanninger <aclopte@gmail.com>
Acked-by: Phillip Wood <phillip.wood123@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-12-04 23:41:05 -08:00
.github Merge branch 'js/windows-ci-path-fix' 2021-10-18 15:47:58 -07:00
block-sha1 block-sha1: drop trailing semicolon from macro definition 2021-03-17 10:20:01 -07:00
builtin Merge branch 'ev/pull-already-up-to-date-is-noop' into maint 2021-11-23 14:48:04 -08:00
ci Merge branch 'cb/ci-build-pedantic' into maint 2021-10-12 13:51:31 -07:00
compat simple-ipc: work around issues with Cygwin's Unix socket emulation 2021-11-10 09:12:19 -08:00
contrib Merge branch 're/completion-fix-test-equality' 2021-10-29 15:43:16 -07:00
Documentation Git 2.34.1 2021-11-24 10:55:13 -08:00
ewah use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
git-gui Merge https://github.com/prati0100/git-gui 2021-03-04 12:38:50 -08:00
gitk-git Merge remote-tracking branch 'paulus/master' into pm/gitk-update 2020-10-03 10:06:27 -07:00
gitweb Merge branch 'gh/gitweb-branch-sort' 2021-09-10 11:46:32 -07:00
mergetools mergetools/xxdiff: prevent segfaults from stopping difftool 2021-10-13 11:04:04 -07:00
negotiator use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
perl Merge branch 'ab/send-email-optim' 2021-07-22 13:05:54 -07:00
po l10n: pl: 2.34.0 round 3 2021-11-14 15:19:23 +01:00
ppc
refs Merge branch 'jt/no-abuse-alternate-odb-for-submodules' 2021-10-25 16:06:56 -07:00
sha1collisiondetection@855827c583
sha1dc
sha256
t sequencer: do not export GIT_DIR and GIT_WORK_TREE for 'exec' 2021-12-04 23:41:05 -08:00
templates hook: add sample template for push-to-checkout 2020-10-16 08:47:02 -07:00
trace2 Merge branch 'js/trace2-raise-format-version' 2021-11-12 15:29:25 -08:00
xdiff Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
.cirrus.yml ci: update freebsd 12 cirrus job 2021-08-12 14:00:52 -07:00
.clang-format
.editorconfig
.gitattributes CoC: explicitly take any whitespace breakage 2021-01-04 09:44:49 -08:00
.gitignore Merge branch 'js/retire-preserve-merges' 2021-10-18 15:47:56 -07:00
.gitmodules
.mailmap Add entry for Ramkumar Ramachandra 2021-03-08 09:56:34 -08:00
.travis.yml ci: remove GETTEXT_POISON jobs 2021-01-21 15:50:00 -08:00
.tsan-suppressions
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 *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
add-interactive.h
add-patch.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
advice.c Merge branch 'ds/add-rm-with-sparse-index' 2021-10-13 15:15:56 -07:00
advice.h Merge branch 'en/pull-conflicting-options' into maint 2021-10-12 13:51:36 -07:00
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'jc/trivial-threeway-binary-merge' into maint 2021-10-12 13:51:45 -07:00
apply.h
archive-tar.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
archive-zip.c
archive.c archive: convert queue_directory to struct object_id 2021-08-27 14:19:00 -07:00
archive.h archive: expand only a single %(describe) per archive 2021-03-11 13:22:44 -08:00
attr.c attr: be careful about sparse directories 2021-09-07 22:41:10 -07:00
attr.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
banned.h banned.h: mark ctime_r() and asctime_r() as banned 2020-12-02 14:30:39 -08:00
base85.c
bisect.c bisect: simplify return code from bisect_checkout() 2021-07-28 10:57:37 -07:00
bisect.h
blame.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
blame.h blame: simplify 'setup_blame_bloom_data' interface 2020-11-01 15:54:15 -08:00
blob.c
blob.h
bloom.c Merge branch 'ah/plugleaks' 2021-05-07 12:47:41 +09:00
bloom.h
branch.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
branch.h
builtin.h builtin.h: remove cmd_tar_tree() declaration 2021-10-01 14:39:46 -07:00
bulk-checkin.c pack-write: split up finish_tmp_packfile() function 2021-09-09 18:23:11 -07:00
bulk-checkin.h
bundle.c bundle API: change "flags" to be "extra_index_pack_args" 2021-09-07 10:59:23 -07:00
bundle.h bundle API: change "flags" to be "extra_index_pack_args" 2021-09-07 10:59:23 -07:00
cache-tree.c Merge branch 'pw/sparse-cache-tree-verify-fix' 2021-10-25 16:06:57 -07:00
cache-tree.h cache-tree: extract subtree_pos() 2021-01-23 17:14:07 -08:00
cache.h Merge branch 'ab/fix-commit-error-message-upon-unwritable-object-store' 2021-10-25 16:06:57 -07:00
cbtree.c oidtree: a crit-bit tree for odb_loose_cache 2021-07-07 21:28:04 -07:00
cbtree.h cbtree.h: define cb_init() in terms of CBTREE_INIT 2021-09-27 14:48:00 -07:00
chdir-notify.c
chdir-notify.h add chdir-notify API 2018-03-30 12:49:57 -07:00
check-builtins.sh
checkout.c *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
checkout.h
chunk-format.c csum-file.h: increase hashfile buffer size 2021-05-19 16:41:21 +09:00
chunk-format.h chunk-format: create read chunk API 2021-02-18 13:38:16 -08:00
CODE_OF_CONDUCT.md CoC: update to version 2.0 + local changes 2021-01-13 17:45:04 -08:00
color.c
color.h
column.c
column.h
combine-diff.c Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
command-list.txt command-list.txt: remove 'sparse-index' from main help 2021-10-25 09:10:43 -07:00
commit-graph.c Merge branch 'js/run-command-close-packs' 2021-09-20 15:20:45 -07:00
commit-graph.h revision: avoid hitting packfiles when commits are in commit-graph 2021-08-09 09:51:12 -07:00
commit-reach.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
commit-reach.h commit-graph: return 64-bit generation number 2021-01-18 16:21:18 -08:00
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c advice: move advice.graftFileDeprecated squashing to commit.[ch] 2021-08-25 12:07:52 -07:00
commit.h advice: move advice.graftFileDeprecated squashing to commit.[ch] 2021-08-25 12:07:52 -07:00
common-main.c
config.c config.c: don't leak memory in handle_path_include() 2021-10-21 16:26:45 -07:00
config.h Merge branch 'ab/retire-git-config-key-is-valid' 2021-10-11 10:21:47 -07:00
config.mak.dev Makefile: restrict -Wpedantic and -Wno-pedantic-ms-format better 2021-09-28 21:15:53 -07:00
config.mak.in
config.mak.uname Merge branch 'ab/config-based-hooks-1' 2021-10-13 15:15:57 -07:00
configure.ac Remove support for v1 of the PCRE library 2021-01-23 21:15:43 -08:00
connect.c Merge branch 'ah/connect-parse-feature-v0-fix' into maint 2021-10-12 13:51:49 -07:00
connect.h
connected.c Merge branch 'ps/connectivity-optim' 2021-11-12 15:29:24 -08:00
connected.h connected: refactor iterator to return next object ID directly 2021-09-01 12:43:56 -07:00
convert.c convert: release strbuf to avoid leak 2021-07-26 12:19:20 -07:00
convert.h Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
copy.c
COPYING
credential.c urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT 2021-10-01 14:22:51 -07:00
credential.h *.h: move some *_INIT to designated initializers 2021-07-01 12:31:45 -07:00
csum-file.c use xopen() to handle fatal open(2) failures 2021-08-25 14:39:08 -07:00
csum-file.h Merge branch 'tb/midx-use-checksum' 2021-07-16 17:42:46 -07:00
ctype.c
daemon.c Merge branch 'ab/pkt-line-cleanup' 2021-10-25 16:07:00 -07:00
date.c comments: avoid using the gender of our users 2021-06-16 11:25:11 +09:00
decorate.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
decorate.h
delta-islands.c
delta-islands.h delta-islands: respect progress flag 2019-06-20 13:29:49 -07:00
delta.h
detect-compiler build: catch clang that identifies itself as "$VENDOR clang" 2021-08-06 13:35:37 -07:00
diff-delta.c
diff-lib.c Merge branch 'dd/diff-files-unmerged-fix' into maint 2021-10-12 13:51:40 -07:00
diff-merges.c diff-index: restore -c/--cc options handling 2021-09-07 11:11:35 -07:00
diff-merges.h diff-index: restore -c/--cc options handling 2021-09-07 11:11:35 -07:00
diff-no-index.c dir: introduce readdir_skip_dot_and_dotdot() helper 2021-05-27 14:02:37 +09:00
diff.c *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
diff.h diff.h: move pickaxe fields together again 2021-05-11 12:47:31 +09:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c xdiff-interface: replace discard_hunk_line() with a flag 2021-05-11 12:47:31 +09:00
diffcore-rename.c Merge branch 'en/ort-perf-batch-15' 2021-08-24 15:32:39 -07:00
diffcore-rotate.c diff: --{rotate,skip}-to=<path> 2021-02-16 09:30:42 -08:00
diffcore.h merge-ort: store filepairs and filespecs in our mem_pool 2021-07-30 09:01:19 -07:00
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'ds/add-rm-with-sparse-index' into maint 2021-11-23 14:48:11 -08:00
dir.h Merge branch 'ds/sparse-index-ignored-files' 2021-09-20 15:20:44 -07:00
editor.c Merge branch 'jc/save-restore-terminal-revert' into maint 2021-11-23 14:48:15 -08:00
entry.c entry: show finer-grained counter in "Filtering content" progress line 2021-09-09 09:58:19 -07:00
entry.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
environment.c Merge branch 'jk/ref-paranoia' 2021-10-11 10:21:47 -07:00
environment.h environment: make getenv_safe() a public function 2021-01-15 13:03:45 -08:00
exec-cmd.c
exec-cmd.h
fetch-negotiator.c repo-settings.c: simplify the setup 2021-09-22 13:15:00 -07:00
fetch-negotiator.h
fetch-pack.c fetch-pack: optimize loading of refs via commit graph 2021-09-01 12:43:56 -07:00
fetch-pack.h fetch: teach independent negotiation (no packfile) 2021-05-05 10:41:29 +09:00
fmt-merge-msg.c Merge branch 'fs/ssh-signing' 2021-10-25 16:06:58 -07:00
fmt-merge-msg.h
fsck.c fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW 2021-05-04 11:52:02 +09:00
fsck.h fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW 2021-05-04 11:52:02 +09:00
fsmonitor.c Merge branch 'jh/fsmonitor-prework' 2021-03-19 15:25:37 -07:00
fsmonitor.h fsmonitor: add assertion that fsmonitor is valid to check_removed 2021-03-18 13:31:13 -07:00
fuzz-commit-graph.c
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh
generate-configlist.sh
generate-hooklist.sh hook-list.h: add a generated list of hooks, like config-list.h 2021-09-27 09:44:54 -07:00
gettext.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
gettext.h gettext: remove optional non-standard parens in N_() definition 2021-09-03 11:40:30 -07: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-4' 2021-09-23 13:44:48 -07:00
git-compat-util.h wrapper: remove xunsetenv() 2021-10-29 14:59:29 -07:00
git-curl-compat.h http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors 2021-09-27 10:58:07 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl git-cvsserver: protect against NULL in crypt(3) 2021-09-16 20:47:23 -07:00
git-difftool--helper.sh mergetool: break setup_tool out into separate initialization function 2021-02-09 14:09:16 -08:00
git-filter-branch.sh filter-branch: drop $_x40 glob 2021-03-10 14:16:58 -08:00
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh Merge branch 'sh/mergetool-hideresolved' 2021-02-17 17:21:41 -08:00
git-mergetool.sh mergetool: do not enable hideResolved by default 2021-03-13 15:30:29 -08:00
git-p4.py git-p4: fix failed submit by skip non-text data files 2021-06-28 09:49:30 -07:00
git-quiltimport.sh
git-request-pull.sh
git-send-email.perl Merge branch 'ab/send-email-config-fix' into maint 2021-10-12 13:51:44 -07:00
git-sh-i18n.sh git-sh-i18n: remove unused eval_ngettext() 2021-10-21 16:04:29 -07:00
git-sh-setup.sh git-sh-setup: remove messaging supporting --preserve-merges 2021-10-21 16:04:29 -07:00
git-submodule.sh Merge branch 'ab/unused-script-helpers' 2021-09-23 13:44:47 -07:00
git-svn.perl git-svn: drop support for --preserve-merges 2021-09-07 21:45:33 -07:00
GIT-VERSION-GEN Git 2.34.1 2021-11-24 10:55:13 -08:00
git-web--browse.sh
git.c Merge branch 'js/retire-preserve-merges' 2021-10-18 15:47:56 -07:00
git.rc
gpg-interface.c Merge branch 'jx/message-fixes' 2021-11-03 13:32:28 -07:00
gpg-interface.h ssh signing: provide a textual signing_key_id 2021-09-10 14:15:52 -07:00
graph.c graph: improve grammar of "invalid color" error message 2021-06-15 12:54:26 +09:00
graph.h
grep.c Revert "grep/pcre2: fix an edge case concerning ascii patterns and UTF-8 data" 2021-11-19 09:10:27 -08:00
grep.h Merge branch 'hm/paint-hits-in-log-grep' 2021-11-01 13:48:08 -07: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 oidtree: avoid unaligned access to crit-bit tree 2021-08-15 13:13:50 -07:00
hashmap.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
hashmap.h hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
help.c help: move column config discovery to help.c library 2021-09-23 10:30:43 -07:00
help.h help: move column config discovery to help.c library 2021-09-23 10:30:43 -07:00
hex.c hex: print objects using the hash algorithm member 2021-04-27 16:31:39 +09:00
hook.c hook.c: add a hook_exists() wrapper and use it in bugreport.c 2021-09-27 09:44:54 -07:00
hook.h hook.c: add a hook_exists() wrapper and use it in bugreport.c 2021-09-27 09:44:54 -07:00
http-backend.c http-backend: remove a duplicated code branch 2021-10-25 08:56:01 -07:00
http-fetch.c http-fetch: allow custom index-pack args 2021-02-22 12:07:40 -08:00
http-push.c http: rename CURLOPT_FILE to CURLOPT_WRITEDATA 2021-07-30 16:01:54 -07:00
http-walker.c http: rename CURLOPT_FILE to CURLOPT_WRITEDATA 2021-07-30 16:01:54 -07:00
http.c Merge branch 'ab/designated-initializers-more' 2021-10-18 15:47:57 -07:00
http.h http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors 2021-09-27 10:58:07 -07:00
ident.c
imap-send.c http: centralize the accounting of libcurl dependencies 2021-09-13 10:39:04 -07:00
INSTALL INSTALL: mention that we need libcurl 7.19.4 or newer to build 2021-09-13 10:39:03 -07:00
iterator.h
json-writer.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
json-writer.h *.h: move some *_INIT to designated initializers 2021-07-01 12:31:45 -07:00
khash.h khash: clarify that allocations never fail 2021-07-06 13:07:50 -07:00
kwset.c
kwset.h
levenshtein.c
levenshtein.h
LGPL-2.1
line-log.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
line-log.h
line-range.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c help: fix small typo in error message 2021-05-21 07:52:10 +09:00
list-objects-filter-options.h list-objects: implement object type filter 2021-04-19 14:09:11 -07:00
list-objects-filter.c list-objects: implement object type filter 2021-04-19 14:09:11 -07:00
list-objects-filter.h list-objects: support filtering by tag and commit 2021-04-12 09:35:50 -07:00
list-objects.c list-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits" 2021-08-12 13:08:30 -07:00
list-objects.h
list.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
ll-merge.c ll_union_merge(): rename path_unused parameter 2021-06-11 12:37:33 +09:00
ll-merge.h
lockfile.c
lockfile.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
log-tree.c Merge branch 'fs/ssh-signing' 2021-10-25 16:06:58 -07:00
log-tree.h log-tree.h: remove unused function declarations 2021-10-01 14:39:46 -07:00
ls-refs.c Merge branch 'jk/ref-paranoia' 2021-10-11 10:21:47 -07:00
ls-refs.h serve.[ch]: don't pass "struct strvec *keys" to commands 2021-08-05 08:59:37 -07:00
mailinfo.c Merge branch 'ar/mailinfo-memcmp-to-skip-prefix' 2021-07-08 13:15:03 -07:00
mailinfo.h am: learn to process quoted lines that ends with CRLF 2021-05-10 15:06:22 +09:00
mailmap.c Merge branch 'ab/mailmap-leakfix' into maint 2021-10-12 13:51:30 -07:00
mailmap.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
Makefile Merge branch 'ab/make-sparse-for-real' 2021-10-29 15:43:12 -07:00
match-trees.c Always use oidread to read into struct object_id 2021-04-27 16:31:38 +09:00
mem-pool.c mem-pool: drop trailing semicolon from macro definition 2021-03-17 10:20:16 -07:00
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-ort-wrappers.c merge(s): apply consistent punctuation to "up to date" messages 2021-05-03 14:14:56 +09: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 branch 'jt/no-abuse-alternate-odb-for-submodules' 2021-10-25 16:06:56 -07:00
merge-ort.h merge-ort: avoid accidental API mis-use 2021-05-20 15:40:39 +09:00
merge-recursive.c Merge branch 'jt/no-abuse-alternate-odb-for-submodules' 2021-10-25 16:06:56 -07:00
merge-recursive.h
merge.c unpack-trees: introduce preserve_ignored to unpack_trees_options 2021-09-27 13:38:37 -07:00
mergesort.c mergesort: use ranks stack 2021-10-01 12:43:09 -07:00
mergesort.h
midx.c Merge branch 'tb/repack-write-midx' 2021-10-18 15:47:57 -07:00
midx.h Merge branch 'tb/repack-write-midx' 2021-10-18 15:47:57 -07:00
name-hash.c Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
notes-cache.c
notes-cache.h
notes-merge.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
notes-merge.h
notes-utils.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
notes-utils.h
notes.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
notes.h
object-file.c Merge branch 'ab/fsck-unexpected-type' 2021-11-12 15:29:25 -08:00
object-name.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
object-store.h Merge branch 'ab/fix-commit-error-message-upon-unwritable-object-store' 2021-10-25 16:06:57 -07:00
object.c Merge branch 'ab/fsck-unexpected-type' 2021-10-25 16:06:56 -07:00
object.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
oid-array.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
oid-array.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
oidmap.c hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
oidmap.h
oidset.c oidset: make oidset_size() an inline function 2021-09-12 16:14:32 -07:00
oidset.h oidset: make oidset_size() an inline function 2021-09-12 16:14:32 -07:00
oidtree.c oidtree: avoid unaligned access to crit-bit tree 2021-08-15 13:13:50 -07:00
oidtree.h oidtree: a crit-bit tree for odb_loose_cache 2021-07-07 21:28:04 -07:00
pack-bitmap-write.c pack-bitmap: read multi-pack bitmaps 2021-09-01 13:56:43 -07:00
pack-bitmap.c Merge branch 'tb/repack-write-midx' 2021-10-18 15:47:57 -07:00
pack-bitmap.h Merge branch 'tb/repack-write-midx' 2021-10-18 15:47:57 -07:00
pack-check.c Merge branch 'ab/fsck-unexpected-type' 2021-10-25 16:06:56 -07:00
pack-objects.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
pack-objects.h pack-objects: move static inline from a header to the sole consumer 2021-05-27 12:14:41 +09:00
pack-revindex.c Merge branch 'tb/reverse-midx' 2021-04-08 13:23:25 -07:00
pack-revindex.h pack-revindex.h: correct the time complexity descriptions 2021-09-15 22:16:25 -07:00
pack-write.c Merge branch 'tb/pack-finalize-ordering' into maint 2021-10-12 13:51:46 -07:00
pack.h pack-write: split up finish_tmp_packfile() function 2021-09-09 18:23:11 -07:00
packfile.c Merge branch 'rs/close-pack-leakfix' 2021-10-03 21:49:20 -07:00
packfile.h packfile: convert has_packed_and_bad() to object_id 2021-09-12 16:14:32 -07:00
pager.c pager: avoid setting COLUMNS when we're guessing its value 2021-06-28 10:42:10 -07:00
parallel-checkout.c pkt-line.[ch]: remove unused packet_read_line_buf() 2021-10-15 13:09:40 -07:00
parallel-checkout.h parallel-checkout: support progress displaying 2021-04-19 11:57:05 -07:00
parse-options-cb.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
parse-options.c Merge branch 'ab/parse-options-cleanup' 2021-11-09 13:19:06 -08:00
parse-options.h Merge branch 'ab/parse-options-cleanup' 2021-11-09 13:19:06 -08:00
patch-delta.c
patch-ids.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
patch-ids.h patch-ids: handle duplicate hashmap entries 2021-01-12 11:13:32 -08:00
path.c Merge branch 'lh/systemd-timers' 2021-09-20 15:20:40 -07:00
path.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
pathspec.c add: skip tracked paths outside sparse-checkout cone 2021-09-28 10:31:02 -07:00
pathspec.h Merge branch 'ds/gender-neutral-doc' 2021-07-16 17:42:53 -07:00
pkt-line.c Merge branch 'ab/pkt-line-cleanup' 2021-10-25 16:07:00 -07:00
pkt-line.h Merge branch 'ab/pkt-line-cleanup' 2021-10-25 16:07:00 -07:00
preload-index.c preload-index: log the number of lstat calls to trace2 2021-02-16 17:14:34 -08:00
pretty.c Merge branch 'hm/paint-hits-in-log-grep' 2021-11-01 13:48:08 -07:00
pretty.h log: avoid loading decorations for userformats that don't need it 2021-06-28 20:30:17 -07:00
prio-queue.c
prio-queue.h
progress.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
progress.h
promisor-remote.c Merge branch 'jt/partial-clone-submodule-1' 2021-07-16 17:42:53 -07:00
promisor-remote.h promisor-remote: support per-repository config 2021-06-28 09:57:42 -07:00
prompt.c
prompt.h
protocol-caps.c Merge branch 'ab/serve-cleanup' 2021-09-20 15:20:43 -07:00
protocol-caps.h serve.[ch]: don't pass "struct strvec *keys" to commands 2021-08-05 08:59:37 -07:00
protocol.c connect, protocol: log negotiated protocol version 2021-08-10 11:46:33 -07:00
protocol.h
prune-packed.c
prune-packed.h
quote.c ref-filter: --format=%(raw) support --perl 2021-07-26 12:01:25 -07:00
quote.h Merge branch 'zh/ref-filter-raw-data' 2021-08-24 15:32:37 -07:00
range-diff.c Merge branch 'rs/range-diff-avoid-segfault-with-I' into maint 2021-10-12 13:51:45 -07:00
range-diff.h Merge branch 'js/range-diff-one-side-only' 2021-02-17 17:21:41 -08:00
reachable.c object.h: add lookup_object_by_type() function 2021-06-28 20:30:18 -07:00
reachable.h
read-cache.c Merge branch 'rs/add-dry-run-without-objects' 2021-10-25 16:06:57 -07:00
README.md
rebase-interactive.c rebase: remove a no-longer-used function 2021-09-07 21:45:33 -07:00
rebase-interactive.h rebase: remove a no-longer-used function 2021-09-07 21:45:33 -07:00
rebase.c pull: remove support for --rebase=preserve 2021-09-07 21:45:32 -07:00
rebase.h pull: remove support for --rebase=preserve 2021-09-07 21:45:32 -07:00
ref-filter.c i18n: fix typos found during l10n for git 2.34.0 2021-10-31 22:49:49 -07:00
ref-filter.h ref-filter API user: add and use a ref_sorting_release() 2021-10-20 11:36:13 -07:00
reflog-walk.c refs: make repo_dwim_log() accept a NULL oid 2021-08-25 13:27:37 -07:00
reflog-walk.h
refs.c Merge branch 'jt/no-abuse-alternate-odb-for-submodules' 2021-10-25 16:06:56 -07:00
refs.h Merge branch 'jk/ref-paranoia' 2021-10-11 10:21:47 -07: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
RelNotes Git 2.34.1 2021-11-24 10:55:13 -08:00
remote-curl.c Merge branch 'ab/pkt-line-cleanup' 2021-10-25 16:07:00 -07:00
remote.c *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
remote.h Merge branch 'jt/clone-unborn-head' 2021-02-17 17:21:40 -08:00
replace-object.c
replace-object.h
repo-settings.c repository.h: don't use a mix of int and bitfields 2021-09-22 13:15:00 -07:00
repository.c Merge branch 'jt/add-submodule-odb-clean-up' 2021-10-06 13:40:11 -07:00
repository.h Merge branch 'ab/repo-settings-cleanup' 2021-10-06 13:40:11 -07:00
rerere.c dir: introduce readdir_skip_dot_and_dotdot() helper 2021-05-27 14:02:37 +09:00
rerere.h
reset.c Change unpack_trees' 'reset' flag into an enum 2021-09-27 13:38:37 -07:00
reset.h
resolve-undo.c Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
resolve-undo.h
revision.c Merge branch 'ps/connectivity-optim' 2021-11-12 15:29:24 -08:00
revision.h Merge branch 'jt/add-submodule-odb-clean-up' 2021-10-06 13:40:11 -07:00
run-command.c Merge branch 'vd/pthread-setspecific-g11-fix' into maint 2021-11-04 12:24:20 -07:00
run-command.h Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
SECURITY.md SECURITY: describe how to report vulnerabilities 2021-03-27 15:13:02 -07:00
send-pack.c Merge branch 'fs/ssh-signing' 2021-10-25 16:06:58 -07:00
send-pack.h
sequencer.c sequencer: do not export GIT_DIR and GIT_WORK_TREE for 'exec' 2021-12-04 23:41:05 -08:00
sequencer.h Merge branch 'js/retire-preserve-merges' 2021-10-18 15:47:56 -07:00
serve.c serve: reject commands used as capabilities 2021-09-15 12:25:19 -07:00
serve.h serve.[ch]: remove "serve_options", split up --advertise-refs code 2021-08-05 08:59:37 -07:00
server-info.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
setup.c setup: use xopen and xdup in sanitize_stdfds 2021-09-09 17:40:02 -07:00
sh-i18n--envsubst.c builtins + test helpers: use return instead of exit() in cmd_* 2021-06-09 09:15:58 +09:00
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 *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
shell.c builtins + test helpers: use return instead of exit() in cmd_* 2021-06-09 09:15:58 +09:00
shortlog.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
sideband.c sideband: don't lose clear-to-eol at packet boundary 2021-06-17 14:11:36 +09:00
sideband.h sideband: diagnose more sideband anomalies 2020-10-29 09:23:29 -07:00
sigchain.c
sigchain.h
simple-ipc.h Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
sparse-index.c Merge branch 'ds/sparse-index-ignored-files' 2021-09-20 15:20:44 -07:00
sparse-index.h sparse-index: add SPARSE_INDEX_MEMORY_ONLY flag 2021-09-07 22:41:10 -07:00
split-index.c split-index: use oideq instead of memcmp to compare object_id's 2021-06-15 12:07:56 +09:00
split-index.h
stable-qsort.c
strbuf.c merge-{ort,recursive}: remove add_submodule_odb() 2021-10-08 15:06:06 -07:00
strbuf.h Merge branch 'jt/no-abuse-alternate-odb-for-submodules' 2021-10-25 16:06:56 -07:00
streaming.c object-file.c: stop dying in parse_loose_header() 2021-10-01 15:06:00 -07:00
streaming.h
string-list.c string-list.[ch]: remove string_list_init() compatibility function 2021-09-28 14:43:38 -07:00
string-list.h string-list.[ch]: remove string_list_init() compatibility function 2021-09-28 14:43:38 -07:00
strmap.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07: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 *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
strvec.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -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 submodule-config: pass repo upon blob config read 2021-09-08 11:48:09 -07:00
submodule-config.h submodule-config.h: remove unused SUBMODULE_INIT macro 2021-09-27 14:47:59 -07:00
submodule.c Merge branch 'jt/no-abuse-alternate-odb-for-submodules' 2021-10-25 16:06:56 -07:00
submodule.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
symlinks.c checkout: don't follow symlinks when removing entries 2021-03-18 12:58:10 -07:00
tag.c gpg-interface: improve interface for parsing tags 2021-02-10 23:35:42 -08:00
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c packfile: prepare for the existence of '*.rev' files 2021-01-25 18:32:43 -08:00
tmp-objdir.h tmp-objdir: introduce API for temporary object directories 2016-10-10 13:54:02 -07:00
trace2.c trace2: add trace2_child_ready() to report on background children 2021-09-20 08:57:58 -07:00
trace2.h Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
trace.c
trace.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
trailer.c trailer: add new .cmd config option 2021-05-04 12:09:43 +09:00
trailer.h pretty format %(trailers): add a "key_value_separator" 2020-12-09 14:16:42 -08:00
transport-helper.c Merge branch 'jk/http-push-status-fix' 2021-10-29 15:43:12 -07:00
transport-internal.h transport: rename "fetch" in transport_vtable to "fetch_refs" 2021-08-05 08:59:36 -07:00
transport.c hook.[ch]: move find_hook() from run-command.c to hook.c 2021-09-27 09:44:54 -07:00
transport.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
tree-diff.c tree-diff: fix leak when not HAVE_ALLOCA_H 2021-09-16 13:43:42 -07:00
tree-walk.c Always use oidread to read into struct object_id 2021-04-27 16:31:38 +09:00
tree-walk.h
tree.c tree.h API: simplify read_tree_recursive() signature 2021-03-20 16:09:26 -07:00
tree.h tree.h API: simplify read_tree_recursive() signature 2021-03-20 16:09:26 -07:00
unicode-width.h unicode: update the width tables to Unicode 14 2021-09-17 17:26:21 -07:00
unimplemented.sh
unix-socket.c unix-socket: disallow chdir() when creating unix domain sockets 2021-03-15 14:32:51 -07:00
unix-socket.h unix-socket: disallow chdir() when creating unix domain sockets 2021-03-15 14:32:51 -07:00
unix-stream-server.c unix-stream-server: create unix domain socket under lock 2021-03-15 14:32:51 -07:00
unix-stream-server.h unix-stream-server: create unix domain socket under lock 2021-03-15 14:32:51 -07:00
unpack-trees.c Merge branch 'ab/unpack-trees-leakfix' 2021-10-25 16:06:56 -07:00
unpack-trees.h Change unpack_trees' 'reset' flag into an enum 2021-09-27 13:38:37 -07:00
upload-pack.c Merge branch 'ab/serve-cleanup' 2021-09-20 15:20:43 -07:00
upload-pack.h serve.[ch]: remove "serve_options", split up --advertise-refs code 2021-08-05 08:59:37 -07:00
url.c
url.h
urlmatch.c
urlmatch.h urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT 2021-10-01 14:22:51 -07:00
usage.c usage.c: don't copy/paste the same comment three times 2021-04-13 14:56:28 -07:00
userdiff.c userdiff-cpp: back out the digit-separators in numbers 2021-10-25 08:47:44 -07:00
userdiff.h userdiff: add and use for_each_userdiff_driver() 2021-04-08 12:19:10 -07:00
utf8.c t0060: test ntfs/hfs-obscured dotfiles 2021-05-04 11:52:02 +09:00
utf8.h t0060: test ntfs/hfs-obscured dotfiles 2021-05-04 11:52:02 +09:00
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c lookup_unknown_object(): take a repository argument 2021-04-13 13:18:46 -07:00
walker.h
wildmatch.c
wildmatch.h
worktree.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07: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 wrapper: remove xunsetenv() 2021-10-29 14:59:29 -07:00
write-or-die.c pkt-line: add stdio packet write functions 2021-09-01 10:20:39 -07:00
ws.c
wt-status.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
wt-status.h status: skip sparse-checkout percentage with sparse-index 2021-07-14 13:42:49 -07:00
xdiff-interface.c Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
xdiff-interface.h xdiff-interface: replace discard_hunk_line() with a flag 2021-05-11 12:47:31 +09:00
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