Go to file
Johannes Schindelin a5e46e6b01 terminal: add a new function to read a single keystroke
Typically, input on the command-line is line-based. It is actually not
really easy to get single characters (or better put: keystrokes).

We provide two implementations here:

- One that handles `/dev/tty` based systems as well as native Windows.
  The former uses the `tcsetattr()` function to put the terminal into
  "raw mode", which allows us to read individual keystrokes, one by one.
  The latter uses `stty.exe` to do the same, falling back to direct
  Win32 Console access.

  Thanks to the refactoring leading up to this commit, this is a single
  function, with the platform-specific details hidden away in
  conditionally-compiled code blocks.

- A fall-back which simply punts and reads back an entire line.

Note that the function writes the keystroke into an `strbuf` rather than
a `char`, in preparation for reading Escape sequences (e.g. when the
user hit an arrow key). This is also required for UTF-8 sequences in
case the keystroke corresponds to a non-ASCII letter.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-01-15 12:06:17 -08:00
.github
Documentation Start to implement a built-in version of `git add --interactive` 2019-11-14 11:10:04 +09:00
block-sha1
builtin commit --interactive: make it work with the built-in `add -i` 2019-12-21 16:06:22 -08:00
ci Merge branch 'sg/ci-osx-gcc8-fix' 2019-10-24 13:34:03 +09:00
compat terminal: add a new function to read a single keystroke 2020-01-15 12:06:17 -08:00
contrib Merge branch 'nr/diff-highlight-indent-fix' 2019-10-23 14:43:09 +09:00
ewah
git-gui Merge https://github.com/prati0100/git-gui 2019-11-04 13:29:38 +09:00
gitk-git
gitweb gitweb: correctly store previous rev in javascript-actions mode 2019-10-28 11:06:57 +09:00
mergetools
negotiator
perl
po l10n: zh_CN: for git v2.24.0 l10n round 1~2 2019-11-02 20:51:12 +08:00
ppc
refs
sha1collisiondetection@855827c583
sha1dc
sha256
t t3701: adjust difffilter test 2020-01-15 12:06:16 -08:00
templates
trace2 trace2: write discard message to sentinel files 2019-10-05 17:53:51 +09:00
vcs-svn
xdiff xdiffi: fix typos and touch up comments 2019-10-09 10:58:34 +09:00
.clang-format
.editorconfig
.gitattributes
.gitignore Merge branch 'dl/honor-cflags-in-hdr-check' 2019-10-07 11:33:02 +09:00
.gitmodules
.mailmap
.travis.yml
.tsan-suppressions
CODE_OF_CONDUCT.md CODE_OF_CONDUCT: mention individual project-leader emails 2019-10-10 10:41:46 +09:00
COPYING
GIT-VERSION-GEN Git 2.24 2019-11-04 13:33:06 +09:00
INSTALL
LGPL-2.1
Makefile built-in add -i: start implementing the `patch` functionality in C 2019-12-13 12:37:13 -08:00
README.md git-gui: add a readme 2019-10-12 21:29:30 +05:30
RelNotes
abspath.c
aclocal.m4
add-interactive.c built-in add -p: handle diff.algorithm 2020-01-15 12:06:16 -08:00
add-interactive.h built-in add -p: handle diff.algorithm 2020-01-15 12:06:16 -08:00
add-patch.c built-in add -p: handle diff.algorithm 2020-01-15 12:06:16 -08:00
advice.c
advice.h
alias.c
alias.h
alloc.c
alloc.h
apply.c apply --allow-overlap: fix a corner case 2019-12-06 08:57:34 -08:00
apply.h
archive-tar.c
archive-zip.c
archive.c
archive.h
argv-array.c
argv-array.h
attr.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
attr.h
azure-pipelines.yml Merge branch 'js/azure-pipelines-msvc' 2019-10-23 11:06:46 +09:00
banned.h
base85.c
bisect.c
bisect.h
blame.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
blame.h
blob.c
blob.h
branch.c
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c Merge branch 'en/merge-recursive-cleanup' 2019-10-15 13:47:59 +09:00
cache-tree.h
cache.h Merge branch 'js/azure-pipelines-msvc' 2019-10-15 13:48:00 +09:00
chdir-notify.c
chdir-notify.h
check-builtins.sh
check_bindir
checkout.c
checkout.h
color.c
color.h
column.c column: use utf8_strnwidth() to strip out ANSI color escapes 2019-10-15 10:54:15 +09:00
column.h
combine-diff.c
command-list.txt
commit-graph.c Merge branch 'ds/commit-graph-on-fetch' 2019-11-04 13:33:06 +09:00
commit-graph.h
commit-reach.c commit-graph: fix writing first commit-graph during fetch 2019-10-25 11:19:16 +09:00
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'tb/commit-graph-harden' 2019-10-07 11:32:58 +09:00
commit.h
common-main.c
config.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
config.h
config.mak.dev
config.mak.in
config.mak.uname vcxproj: include more generated files 2019-10-06 09:07:44 +09:00
configure.ac
connect.c
connect.h
connected.c Merge branch 'bc/object-id-part17' 2019-10-11 14:24:46 +09:00
connected.h
convert.c Merge branch 'rs/convert-fix-utf-without-dash' 2019-10-09 14:01:00 +09: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-islands.c
delta-islands.h
delta.h
detect-compiler
diff-delta.c
diff-lib.c
diff-no-index.c
diff.c diff: export diffstat interface 2019-11-14 11:10:04 +09:00
diff.h diff: export diffstat interface 2019-11-14 11:10:04 +09:00
diffcore-break.c diffcore-break: use a goto instead of a redundant if statement 2019-10-02 15:04:21 +09:00
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'en/clean-nested-with-ignored' 2019-10-11 14:24:46 +09:00
dir.h Merge branch 'en/clean-nested-with-ignored' 2019-10-11 14:24:46 +09:00
editor.c
entry.c
environment.c
exec-cmd.c
exec-cmd.h
fast-import.c Merge branch 'en/fast-imexport-nested-tags' 2019-10-15 13:48:00 +09:00
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c Merge branch 'js/trace2-fetch-push' 2019-10-15 13:48:03 +09:00
fetch-pack.h
fmt-merge-msg.h
fsck.c
fsck.h
fsmonitor.c fsmonitor: don't fill bitmap with entries to be removed 2019-10-12 10:16:11 +09:00
fsmonitor.h
fuzz-commit-graph.c
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl git add -p: use non-zero exit code when the diff generation failed 2019-12-06 08:57:34 -08:00
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'bb/compat-util-comment-fix' 2019-10-18 11:40:48 +09:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-legacy-stash.sh legacy stash -p: respect the add.interactive.usebuiltin setting 2019-12-21 16:06:21 -08:00
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py git-p4: auto-delete named temporary file 2019-10-06 20:43:37 +09:00
git-parse-remote.sh
git-quiltimport.sh
git-rebase--preserve-merges.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git.c
git.rc
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c Merge branch 'cb/pcre2-chartables-leakfix' 2019-10-23 14:43:11 +09:00
grep.h Merge branch 'cb/pcre2-chartables-leakfix' 2019-10-23 14:43:11 +09:00
hash.h
hashmap.c hashmap: remove type arg from hashmap_{get,put,remove}_entry 2019-10-07 10:20:12 +09:00
hashmap.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
help.c Merge branch 'rs/help-unknown-ref-does-not-return' 2019-09-30 13:19:27 +09:00
help.h
hex.c
http-backend.c
http-fetch.c
http-push.c http-push: simplify deleting a list item 2019-10-15 10:53:50 +09:00
http-walker.c
http.c
http.h
ident.c
imap-send.c
interdiff.c
interdiff.h
iterator.h
json-writer.c
json-writer.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c
line-log.h
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c Merge branch 'jk/partial-clone-sparse-blob' 2019-10-07 11:32:54 +09:00
list-objects-filter-options.h Merge branch 'jk/partial-clone-sparse-blob' 2019-10-07 11:32:54 +09:00
list-objects-filter.c Merge branch 'jk/partial-clone-sparse-blob' 2019-10-07 11:32:54 +09:00
list-objects-filter.h
list-objects.c Merge branch 'jk/list-objects-optim-wo-trees' 2019-10-07 11:32:56 +09:00
list-objects.h
list.h
ll-merge.c
ll-merge.h
lockfile.c
lockfile.h
log-tree.c Merge branch 'rs/simplify-by-deco-with-deco-refs-exclude' 2019-10-07 11:32:54 +09:00
log-tree.h
ls-refs.c
ls-refs.h
mailinfo.c
mailinfo.h
mailmap.c
mailmap.h
match-trees.c
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-recursive.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
merge-recursive.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
merge.c
mergesort.c
mergesort.h
midx.c
midx.h
name-hash.c hashmap: remove type arg from hashmap_{get,put,remove}_entry 2019-10-07 10:20:12 +09:00
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object-store.h
object.c treewide: remove duplicate #include directives 2019-10-04 08:16:00 +09:00
object.h commit-graph: fix writing first commit-graph during fetch 2019-10-25 11:19:16 +09:00
oidmap.c hashmap: introduce hashmap_free_entries 2019-10-07 10:20:11 +09:00
oidmap.h hashmap: use *_entry APIs for iteration 2019-10-07 10:20:11 +09:00
oidset.c
oidset.h
pack-bitmap-write.c
pack-bitmap.c Merge branch 'jk/misc-uninitialized-fixes' 2019-09-30 13:19:30 +09:00
pack-bitmap.h
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
packfile.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
packfile.h
pager.c
parse-options-cb.c
parse-options.c
parse-options.h
patch-delta.c
patch-ids.c hashmap: remove type arg from hashmap_{get,put,remove}_entry 2019-10-07 10:20:12 +09:00
patch-ids.h
path.c
path.h
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
pretty.c
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c promisor-remote: skip move_to_tail when no-op 2019-10-02 14:56:54 +09:00
promisor-remote.h Merge branch 'dl/honor-cflags-in-hdr-check' 2019-10-07 11:33:02 +09:00
prompt.c
prompt.h
protocol.c
protocol.h
quote.c Merge branch 'gs/sq-quote-buf-pretty' 2019-10-15 13:48:02 +09:00
quote.h
range-diff.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
range-diff.h
reachable.c
reachable.h
read-cache.c Merge branch 'js/azure-pipelines-msvc' 2019-10-15 13:48:00 +09:00
rebase-interactive.c
rebase-interactive.h
ref-filter.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
ref-filter.h
reflog-walk.c
reflog-walk.h
refs.c hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
refs.h
refspec.c
refspec.h
remote-curl.c Merge branch 'bc/smart-http-atomic-push' 2019-10-23 14:43:11 +09:00
remote-testsvn.c
remote.c hashmap: remove type arg from hashmap_{get,put,remove}_entry 2019-10-07 10:20:12 +09:00
remote.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
replace-object.c
replace-object.h
repo-settings.c Merge branch 'ds/feature-macros' 2019-10-24 13:34:03 +09:00
repository.c
repository.h Merge branch 'jk/disable-commit-graph-during-upload-pack' 2019-10-07 11:32:55 +09:00
rerere.c
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
revision.h
run-command.c
run-command.h
send-pack.c send-pack: never fetch when checking exclusions 2019-10-09 10:46:41 +09:00
send-pack.h
sequencer.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
sequencer.h
serve.c
serve.h
server-info.c
setup.c
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-file.c Merge branch 'bc/object-id-part17' 2019-10-11 14:24:46 +09:00
sha1-lookup.c Merge branch 'js/azure-pipelines-msvc' 2019-10-15 13:48:00 +09:00
sha1-lookup.h
sha1-name.c Merge branch 'rs/nth-switch-code-simplification' 2019-10-07 11:33:00 +09:00
sha1dc_git.c
sha1dc_git.h
shallow.c Merge branch 'rs/dedup-includes' 2019-10-11 14:24:48 +09:00
shell.c
shortlog.h
sideband.c
sideband.h
sigchain.c
sigchain.h
split-index.c
split-index.h
stable-qsort.c Move git_sort(), a stable sort, into into libgit.a 2019-10-02 14:44:51 +09:00
strbuf.c strbuf: add a helper function to call the editor "on an strbuf" 2019-12-13 12:37:14 -08:00
strbuf.h strbuf: add a helper function to call the editor "on an strbuf" 2019-12-13 12:37:14 -08:00
streaming.c
streaming.h
string-list.c
string-list.h
sub-process.c hashmap: remove type arg from hashmap_{get,put,remove}_entry 2019-10-07 10:20:12 +09:00
sub-process.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
submodule-config.c hashmap: remove type arg from hashmap_{get,put,remove}_entry 2019-10-07 10:20:12 +09:00
submodule-config.h
submodule.c
submodule.h
symlinks.c
tag.c
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trailer.c
trailer.h
transport-helper.c Merge branch 'bc/smart-http-atomic-push' 2019-10-23 14:43:11 +09:00
transport-internal.h
transport.c transport: push codepath can take arbitrary repository 2019-10-08 13:20:01 +09:00
transport.h remote-curl: pass on atomic capability to remote side 2019-10-17 16:08:22 +09:00
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 treewide: remove duplicate #include directives 2019-10-04 08:16:00 +09:00
unpack-trees.h
upload-pack.c Merge branch 'jk/disable-commit-graph-during-upload-pack' 2019-10-07 11:32:55 +09:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c userdiff: fix some corner cases in dts regex 2019-10-21 17:44:12 +09:00
userdiff.h
utf8.c utf8: use ARRAY_SIZE() in git_wcwidth() 2019-10-12 10:57:39 +09:00
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 Merge branch 'ah/cleanups' 2019-10-09 14:01:00 +09:00
write-or-die.c
ws.c
wt-status.c Merge branch 'bc/object-id-part17' 2019-10-11 14:24:46 +09:00
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c

README.md

Build Status

Git - fast, scalable, distributed revision control system

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

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

Please read the file INSTALL for installation instructions.

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

See Documentation/gittutorial.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://public-inbox.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