Git with broken hash generation to generate collisions between object IDs. Don't use this! https://undefinedbehavior.de/posts/commit-vandalism/
Go to file
Jeff King f6adec4e32 submodule-config: ban submodule urls that start with dash
The previous commit taught the submodule code to invoke our
"git clone $url $path" with a "--" separator so that we
aren't confused by urls or paths that start with dashes.

However, that's just one code path. It's not clear if there
are others, and it would be an easy mistake to add one in
the future. Moreover, even with the fix in the previous
commit, it's quite hard to actually do anything useful with
such an entry. Any url starting with a dash must fall into
one of three categories:

 - it's meant as a file url, like "-path". But then any
   clone is not going to have the matching path, since it's
   by definition relative inside the newly created clone. If
   you spell it as "./-path", the submodule code sees the
   "/" and translates this to an absolute path, so it at
   least works (assuming the receiver has the same
   filesystem layout as you). But that trick does not apply
   for a bare "-path".

 - it's meant as an ssh url, like "-host:path". But this
   already doesn't work, as we explicitly disallow ssh
   hostnames that begin with a dash (to avoid option
   injection against ssh).

 - it's a remote-helper scheme, like "-scheme::data". This
   _could_ work if the receiver bends over backwards and
   creates a funny-named helper like "git-remote--scheme".
   But normally there would not be any helper that matches.

Since such a url does not work today and is not likely to do
anything useful in the future, let's simply disallow them
entirely. That protects the existing "git clone" path (in a
belt-and-suspenders way), along with any others that might
exist.

Our tests cover two cases:

  1. A file url with "./" continues to work, showing that
     there's an escape hatch for people with truly silly
     repo names.

  2. A url starting with "-" is rejected.

Note that we expect case (2) to fail, but it would have done
so even without this commit, for the reasons given above.
So instead of just expecting failure, let's also check for
the magic word "ignoring" on stderr. That lets us know that
we failed for the right reason.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-09-27 09:34:58 -07:00
.github
block-sha1
builtin submodule--helper: use "--" to signal end of clone options 2018-09-27 09:34:55 -07:00
ci travis-ci: fix "skip_branch_tip_with_tag()" string comparison 2017-09-22 10:58:29 +09:00
compat Merge branch 'rb/compat-poll-fix' into maint 2017-10-18 14:19:05 +09:00
contrib Merge branch 'tb/complete-describe' into maint 2017-10-18 14:19:14 +09:00
Documentation Git 2.14.4 2018-05-22 14:12:02 +09:00
ewah
git-gui
gitk-git
gitweb Merge branch 'hb/gitweb-project-list' into maint 2017-08-23 14:33:44 -07:00
mergetools
perl Merge branch 'jc/perl-git-comment-typofix' into maint 2017-09-10 17:02:57 +09:00
po
ppc
refs convert less-trivial versions of "write_in_full() != len" 2017-09-14 15:17:59 +09:00
sha1collisiondetection@19d97bf5af
sha1dc
t submodule-config: ban submodule urls that start with dash 2018-09-27 09:34:58 -07:00
templates
vcs-svn Merge branch 'jn/vcs-svn-cleanup' into maint 2017-09-10 17:03:09 +09:00
xdiff xdiff -W: relax end-of-file function detection 2017-01-15 16:08:11 -08:00
.gitattributes
.gitignore
.gitmodules
.mailmap .mailmap: normalize name for René Scharfe 2017-10-06 11:31:41 +09:00
.travis.yml travis-ci: move Travis CI code into dedicated scripts 2017-09-11 09:54:08 +09:00
.tsan-suppressions ThreadSanitizer: add suppressions 2017-08-23 10:38:56 -07:00
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
apply.c Sync with Git 2.13.7 2018-05-22 14:10:49 +09:00
apply.h
archive-tar.c
archive-zip.c
archive.c archive: don't add empty directories to archives 2017-09-14 15:08:22 +09:00
archive.h
argv-array.c
argv-array.h
attr.c
attr.h
base85.c
bisect.c
bisect.h
blame.c
blame.h
blob.c
blob.h
branch.c Merge branch 'nd/worktree-kill-parse-ref' into maint 2017-10-23 14:14:16 +09:00
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h Sync with Git 2.13.7 2018-05-22 14:10:49 +09:00
check_bindir
check-builtins.sh
check-racy.c
color.c Revert "color: check color.ui in git_default_config()" 2017-10-17 15:09:52 +09:00
color.h
column.c
column.h
combine-diff.c
command-list.txt
commit-slab.h commit-slab.h: avoid -Wsign-compare warnings 2017-09-22 13:00:36 +09:00
commit.c
commit.h commit: remove unused inline function single_parent() 2017-08-19 09:24:05 -07:00
common-main.c
config.c Merge branch 'jk/write-in-full-fix' into maint 2017-10-23 14:37:22 +09:00
config.h
config.mak.in
config.mak.uname
configure.ac
connect.c
connect.h
connected.c
connected.h
convert.c Merge branch 'ma/ts-cleanups' into maint 2017-10-23 14:19:02 +09:00
convert.h Merge branch 'tb/apply-with-crlf' into maint 2017-09-10 17:02:55 +09:00
copy.c
COPYING
credential-cache--daemon.c
credential-cache.c Merge branch 'dl/credential-cache-socket-in-xdg-cache' into maint 2017-08-23 14:33:45 -07:00
credential-store.c
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c
diff-no-index.c
diff.c Merge branch 'jk/write-in-full-fix' into maint 2017-10-23 14:37:22 +09:00
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'rs/stat-data-unaligned-reads-fix' into maint 2017-08-23 14:33:48 -07:00
dir.h
editor.c
entry.c convert less-trivial versions of "write_in_full() != len" 2017-09-14 15:17:59 +09:00
environment.c
exec_cmd.c git_extract_argv0_path: do nothing without RUNTIME_PREFIX 2017-09-07 09:41:14 +09:00
exec_cmd.h
fast-import.c Merge branch 'jk/write-in-full-fix' into maint 2017-10-23 14:37:22 +09:00
fetch-pack.c
fetch-pack.h
fmt-merge-msg.h
fsck.c fsck: handle NULL return of lookup_blob() and lookup_tree() 2017-10-06 11:04:34 +09:00
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl
git-archimport.perl archimport: use safe_pipe_capture for user input 2017-09-12 11:08:15 +09:00
git-bisect.sh
git-compat-util.h Sync with Git 2.13.7 2018-05-22 14:10:49 +09:00
git-cvsexportcommit.perl
git-cvsimport.perl cvsimport: shell-quote variable used in backticks 2017-09-12 11:10:22 +09:00
git-cvsserver.perl cvsserver: use safe_pipe_capture for constant commands as well 2017-09-11 14:52:29 +09: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
git-mergetool.sh
git-p4.py
git-parse-remote.sh
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh
git-rebase--merge.sh
git-rebase.sh
git-remote-testgit.sh
git-request-pull.sh request-pull: capitalise "Git" to make it a proper noun 2017-10-03 13:11:57 +09:00
git-send-email.perl send-email: don't use Mail::Address, even if available 2017-08-24 14:40:17 -07:00
git-sh-i18n.sh
git-sh-setup.sh
git-stash.sh Merge branch 'mf/no-dashed-subcommands' into maint 2017-09-10 17:02:56 +09:00
git-submodule.sh Sync with Git 2.13.7 2018-05-22 14:10:49 +09:00
git-svn.perl
GIT-VERSION-GEN Git 2.14.4 2018-05-22 14:12:02 +09:00
git-web--browse.sh
git.c
git.rc
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c Merge branch 'as/grep-quiet-no-match-exit-code-fix' into maint 2017-09-10 17:02:55 +09:00
grep.h
hash.h
hashmap.c
hashmap.h
help.c
help.h
hex.c
http-backend.c avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
http-fetch.c
http-push.c http-push: fix construction of hex value from path 2017-10-04 13:48:35 +09:00
http-walker.c
http.c Merge branch 'jc/http-sslkey-and-ssl-cert-are-paths' into maint 2017-08-23 14:33:43 -07:00
http.h
ident.c
imap-send.c
INSTALL
iterator.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
LGPL-2.1
line-log.c ALLOC_GROW: avoid -Wsign-compare warnings 2017-09-22 13:21:11 +09:00
line-log.h ALLOC_GROW: avoid -Wsign-compare warnings 2017-09-22 13:21:11 +09:00
line-range.c
line-range.h
list-objects.c
list-objects.h
list.h
ll-merge.c avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
ll-merge.h
lockfile.c
lockfile.h
log-tree.c
log-tree.h
mailinfo.c Merge branch 'rs/mailinfo-qp-decode-fix' into maint 2017-10-18 14:19:03 +09:00
mailinfo.h
mailmap.c
mailmap.h
Makefile Merge branch 'jn/vcs-svn-cleanup' into maint 2017-09-10 17:03:09 +09:00
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c
merge-recursive.h
merge.c
mergesort.c
mergesort.h
mru.c
mru.h
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c notes-merge: use ssize_t for write_in_full() return value 2017-09-14 15:17:59 +09:00
notes-merge.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object.c
object.h
oidset.c
oidset.h
pack-bitmap-write.c
pack-bitmap.c
pack-bitmap.h
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c
parse-options-cb.c
parse-options.c
parse-options.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c Sync with Git 2.13.7 2018-05-22 14:10:49 +09:00
path.h
pathspec.c
pathspec.h
pkt-line.c Merge branch 'jk/write-in-full-fix' into maint 2017-10-23 14:37:22 +09:00
pkt-line.h
preload-index.c
pretty.c
prio-queue.c
prio-queue.h
progress.c
progress.h
prompt.c
prompt.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c Sync with Git 2.13.7 2018-05-22 14:10:49 +09:00
README.md
ref-filter.c ref-filter.c: pass empty-string as NULL to atom parsers 2017-10-05 10:41:57 +09:00
ref-filter.h
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'jk/write-in-full-fix' into maint 2017-10-23 14:37:22 +09:00
refs.h refs: strip out not allowed flags from ref_transaction_update 2017-09-14 14:46:05 +09:00
RelNotes Git 2.14.4 2018-05-22 14:12:02 +09:00
remote-curl.c
remote-testsvn.c
remote.c
remote.h
replace_object.c
repository.c
repository.h
rerere.c avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
rerere.h
resolve-undo.c
resolve-undo.h
revision.c ALLOC_GROW: avoid -Wsign-compare warnings 2017-09-22 13:21:11 +09:00
revision.h
run-command.c run-command: use ALLOC_ARRAY 2017-10-03 08:42:57 +09:00
run-command.h
send-pack.c
send-pack.h
sequencer.c
sequencer.h
server-info.c
setup.c
sh-i18n--envsubst.c
sha1_file.c Merge branch 'jk/info-alternates-fix' into maint 2017-10-23 14:40:00 +09:00
sha1_name.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h sha1-lookup: remove sha1_entry_pos() from header file 2017-08-25 09:54:26 -07:00
sha1dc_git.c
sha1dc_git.h
shallow.c avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
shell.c shell: drop git-cvsserver support by default 2017-09-12 11:05:58 +09:00
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
split-index.c
split-index.h
strbuf.c Merge branch 'rs/strbuf-getwholeline-fix' into maint 2017-10-18 14:18:58 +09:00
strbuf.h Merge branch 'ma/ts-cleanups' into maint 2017-10-23 14:19:02 +09:00
streaming.c convert less-trivial versions of "write_in_full() != len" 2017-09-14 15:17:59 +09:00
streaming.h
string-list.c
string-list.h for_each_string_list_item: avoid undefined behavior for empty list 2017-09-20 14:41:08 +09:00
sub-process.c Merge branch 'cc/subprocess-handshake-missing-capabilities' into maint 2017-10-18 14:19:10 +09:00
sub-process.h
submodule-config.c submodule-config: ban submodule urls that start with dash 2018-09-27 09:34:58 -07:00
submodule-config.h Sync with Git 2.13.7 2018-05-22 14:10:49 +09:00
submodule.c Merge branch 'bw/push-options-recursively-to-submodules' into maint 2017-09-10 17:02:49 +09:00
submodule.h submodule.h: typofix 2017-09-22 10:59:52 +09:00
symlinks.c
tag.c tag: avoid NULL pointer arithmetic 2017-10-02 13:14:33 +09:00
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h
trailer.c
trailer.h
transport-helper.c Merge branch 'jk/write-in-full-fix' into maint 2017-10-23 14:37:22 +09:00
transport.c
transport.h
tree-diff.c
tree-walk.c ALLOC_GROW: avoid -Wsign-compare warnings 2017-09-22 13:21:11 +09:00
tree-walk.h
tree.c
tree.h
unicode_width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c
unpack-trees.h
upload-pack.c
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c Merge branch 'ik/userdiff-html-h-element-fix' into maint 2017-10-18 14:19:02 +09:00
userdiff.h
utf8.c is_hfs_dotgit: match other .git files 2018-05-21 23:50:11 -04:00
utf8.h is_hfs_dotgit: match other .git files 2018-05-21 23:50:11 -04:00
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c Merge branch 'nd/worktree-kill-parse-ref' into maint 2017-10-23 14:14:16 +09:00
worktree.h
wrap-for-bin.sh
wrapper.c avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
write_or_die.c
ws.c
wt-status.c
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c

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-.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://public-inbox.org/git/, http://marc.info/?l=git and other archival sites.

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