Go to file
Jeff King 55cccf4bb3 color_parse_mem: allow empty color spec
Prior to c2f41bf52 (color.c: fix color_parse_mem() with
value_len == 0, 2017-01-19), the empty string was
interpreted as a color "reset". This was an accidental
outcome, and that commit turned it into an error.

However, scripts may pass the empty string as a default
value to "git config --get-color" to disable color when the
value is not defined. The git-add--interactive script does
this. As a result, the script is unusable since c2f41bf52
unless you have color.diff.plain defined (if it is defined,
then we don't parse the empty default at all).

Our test scripts didn't notice the recent breakage because
they run without a terminal, and thus without color. They
never hit this code path at all. And nobody noticed the
original buggy "reset" behavior, because it was effectively
a noop.

Let's fix the code to have an empty color name produce an
empty sequence of color codes. The tests need a few fixups:

  - we'll add a new test in t4026 to cover this case. But
    note that we need to tweak the color() helper. While
    we're there, let's factor out the literal ANSI ESC
    character. Otherwise it makes the diff quite hard to
    read.

  - we'll add a basic sanity-check in t4026 that "git add
    -p" works at all when color is enabled. That would have
    caught this bug, as well as any others that are specific
    to the color code paths.

  - 73c727d69 (log --graph: customize the graph lines with
    config log.graphColors, 2017-01-19) added a test to
    t4202 that checks some "invalid" graph color config.
    Since ",, blue" before yielded only "blue" as valid, and
    now yields "empty, empty, blue", we don't match the
    expected output.

    One way to fix this would be to change the expectation
    to the empty color strings. But that makes the test much
    less interesting, since we show only two graph lines,
    both of which would be colorless.

    Since the empty-string case is now covered by t4026,
    let's remove them entirely here. They're just in the way
    of the primary thing the test is supposed to be
    checking.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-01-31 21:02:04 -08:00
Documentation log --graph: customize the graph lines with config log.graphColors 2017-01-23 18:32:11 -08:00
block-sha1
builtin Merge branch 'mh/blame-worktree' 2016-08-31 10:03:50 -07:00
ci
compat Merge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile' 2016-08-25 13:55:07 -07:00
contrib git-multimail: update to release 1.4.0 2016-08-17 11:36:08 -07:00
ewah
git-gui
gitk-git
gitweb
mergetools
perl
po Merge branch 'master' of https://github.com/vnwildman/git 2016-09-02 21:29:48 +08:00
ppc
refs
t color_parse_mem: allow empty color spec 2017-01-31 21:02:04 -08:00
templates
vcs-svn
xdiff Merge branch 'js/ignore-space-at-eol' into maint 2016-08-08 14:21:35 -07:00
.gitattributes
.gitignore
.mailmap .mailmap: use Christian Couder's Tuxfamily address 2016-08-08 15:17:24 -07:00
.travis.yml Merge branch 'ls/travis-enable-httpd-tests' into maint 2016-08-10 11:55:23 -07:00
COPYING
GIT-VERSION-GEN Git 2.10 2016-09-02 09:05:47 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'ew/build-time-pager-tweaks' 2016-08-08 14:48:44 -07:00
README.md
RelNotes
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
archive-tar.c Merge branch 'jk/big-and-future-archive-tar' 2016-08-12 09:47:37 -07:00
archive-zip.c
archive.c i18n: archive: mark errors for translation 2016-08-09 12:44:59 -07:00
archive.h
argv-array.c
argv-array.h
attr.c
attr.h
base85.c
bisect.c
bisect.h
blob.c
blob.h
branch.c
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h Merge branch 'jk/trace-fixup' 2016-08-12 09:47:36 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c color_parse_mem: allow empty color spec 2017-01-31 21:02:04 -08:00
color.h
column.c
column.h
combine-diff.c
command-list.txt
commit-slab.h Merge branch 'vs/typofix' 2016-08-12 09:47:37 -07:00
commit.c Merge branch 'rs/pull-signed-tag' 2016-08-19 15:34:14 -07:00
commit.h Merge branch 'rs/pull-signed-tag' 2016-08-19 15:34:14 -07:00
common-main.c
config.c i18n: simplify numeric error reporting 2016-08-24 08:47:20 -07:00
config.mak.in
config.mak.uname Merge branch 'ew/build-time-pager-tweaks' 2016-08-08 14:48:44 -07:00
configure.ac Merge branch 'ew/autoconf-pthread' into maint 2016-08-10 11:55:21 -07:00
connect.c
connect.h
connected.c
connected.h
convert.c convert: Correct NNO tests and missing `LF will be replaced by CRLF` 2016-08-14 13:45:52 -07:00
convert.h
copy.c
credential-cache--daemon.c
credential-cache.c
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 'kw/patch-ids-optim' 2016-08-12 09:47:39 -07: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/use-strbuf-addbuf' into maint 2016-08-08 14:21:42 -07:00
dir.h
editor.c
entry.c
environment.c
exec_cmd.c
exec_cmd.h
fast-import.c
fetch-pack.c
fetch-pack.h
fmt-merge-msg.h
fsck.c
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile' 2016-08-25 13:55:07 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh difftool: always honor fatal error exit codes 2016-08-15 15:24:05 -07:00
git-difftool.perl
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 Spelling fixes 2016-08-11 14:35:42 -07:00
git-parse-remote.sh
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh i18n: fix git rebase interactive commit messages 2016-08-24 08:43:27 -07:00
git-rebase--merge.sh
git-rebase.sh
git-relink.perl
git-remote-testgit.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh
git-sh-setup.sh Merge branch 'ew/build-time-pager-tweaks' 2016-08-08 14:48:44 -07:00
git-stash.sh i18n: git-stash: mark messages for translation 2016-08-10 10:50:18 -07:00
git-submodule.sh Merge branch 'sb/submodule-update-dot-branch' 2016-08-10 12:33:20 -07:00
git-svn.perl
git-web--browse.sh
git.c
git.rc
gpg-interface.c Merge branch 'lt/gpg-show-long-key-in-signature-verification-maint' into lt/gpg-show-long-key-in-signature-verification 2016-08-16 15:04:13 -07:00
gpg-interface.h
graph.c log --graph: customize the graph lines with config log.graphColors 2017-01-23 18:32:11 -08:00
graph.h
grep.c Merge branch 'js/am-3-merge-recursive-direct' 2016-08-10 12:33:20 -07:00
grep.h Merge branch 'jc/grep-commandline-vs-configuration' into maint 2016-08-10 11:55:29 -07:00
hashmap.c
hashmap.h
help.c
help.h
hex.c
http-backend.c Merge branch 'ew/http-backend-batch-headers' 2016-08-12 09:47:38 -07:00
http-fetch.c
http-push.c Merge branch 'rs/use-strbuf-addstr' 2016-08-08 14:48:41 -07:00
http-walker.c
http.c Merge branch 'rs/use-strbuf-addstr' 2016-08-08 14:48:41 -07:00
http.h
ident.c Merge branch 'jk/reset-ident-time-per-commit' into maint 2016-08-12 09:16:56 -07:00
imap-send.c
iterator.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c
line-log.h
line-range.c
line-range.h
list-objects.c
list-objects.h
list.h
ll-merge.c
ll-merge.h
lockfile.c
lockfile.h mingw: ensure temporary file handles are not inherited by child processes 2016-08-23 09:09:55 -07:00
log-tree.c Merge branch 'nd/log-decorate-color-head-arrow' 2016-08-08 14:48:42 -07:00
log-tree.h
mailinfo.c Merge branch 'rs/mailinfo-lib' 2016-08-17 14:07:47 -07:00
mailinfo.h
mailmap.c
mailmap.h
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c Merge branch 'rs/pull-signed-tag' 2016-08-19 15:34:14 -07:00
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.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object.c
object.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 rebase: avoid computing unnecessary patch IDs 2016-08-11 14:39:16 -07:00
patch-ids.h rebase: avoid computing unnecessary patch IDs 2016-08-11 14:39:16 -07:00
path.c Merge branch 'ab/hooks' 2016-08-19 15:34:16 -07:00
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
pretty.c Merge branch 'rs/use-strbuf-add-unique-abbrev' 2016-08-12 09:47:37 -07:00
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
ref-filter.c
ref-filter.h
reflog-walk.c
reflog-walk.h
refs.c
refs.h
remote-curl.c
remote-testsvn.c
remote.c Merge branch 'jk/push-force-with-lease-creation' 2016-08-10 12:33:18 -07:00
remote.h Merge branch 'jk/push-force-with-lease-creation' 2016-08-10 12:33:18 -07:00
replace_object.c
rerere.c
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'kw/patch-ids-optim' 2016-08-12 09:47:39 -07:00
revision.h
run-command.c Merge branch 'ab/hooks' 2016-08-19 15:34:16 -07:00
run-command.h
send-pack.c Merge branch 'rs/use-strbuf-addstr' into maint 2016-08-10 11:55:34 -07:00
send-pack.h
sequencer.c i18n: fix typos for translation 2016-08-24 08:41:22 -07:00
sequencer.h
server-info.c
setup.c i18n: setup: mark error messages for translation 2016-08-09 12:44:59 -07:00
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c Merge branch 'vs/typofix' 2016-08-12 09:47:37 -07:00
sha1_name.c
shallow.c
shell.c
shortlog.h
show-index.c
sideband.c Merge branch 'lf/recv-sideband-cleanup' into maint 2016-08-08 14:21:41 -07:00
sideband.h
sigchain.c
sigchain.h
split-index.c
split-index.h
strbuf.c Merge branch 'rs/use-strbuf-addbuf' into maint 2016-08-08 14:21:42 -07:00
strbuf.h Merge branch 'rs/use-strbuf-addbuf' into maint 2016-08-08 14:21:42 -07:00
streaming.c
streaming.h
string-list.c
string-list.h
submodule-config.c Merge branch 'sb/submodule-update-dot-branch' 2016-08-10 12:33:20 -07:00
submodule-config.h
submodule.c
submodule.h
symlinks.c
tag.c
tag.h
tar.h
tempfile.c mingw: ensure temporary file handles are not inherited by child processes 2016-08-23 09:09:55 -07:00
tempfile.h mingw: ensure temporary file handles are not inherited by child processes 2016-08-23 09:09:55 -07:00
thread-utils.c
thread-utils.h
trace.c
trace.h
trailer.c
trailer.h
transport-helper.c Spelling fixes 2016-08-11 14:35:42 -07:00
transport.c Merge branch 'rs/use-strbuf-add-unique-abbrev' 2016-08-12 09:47:37 -07:00
transport.h
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unicode_width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c
unpack-trees.h
update_unicode.sh
upload-pack.c Spelling fixes 2016-08-11 14:35:42 -07:00
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c
worktree.h
wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c
wt-status.c Merge branch 'js/am-3-merge-recursive-direct' 2016-08-10 12:33:20 -07:00
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c

README.md

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 http://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 http://news.gmane.org/gmane.comp.version-control.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