Go to file
Patrick Steinhardt 904339edbd Introduce support for the Meson build system
Introduce support for the Meson build system, a "modern" meta build
system that supports many different platforms, including Linux, macOS,
Windows and BSDs. Meson supports different backends, including Ninja,
Xcode and Microsoft Visual Studio. Several common IDEs provide an
integration with it.

The biggest contender compared to Meson is probably CMake as outlined in
our "Documentation/technical/build-systems.txt" file. Based on my own
personal experience from working with both build systems extensively I
strongly favor Meson over CMake. In my opinion, it feels significantly
easier to use with a syntax that feels more like a "real" programming
language. The second big reason is that Meson supports Rust natively,
which may prove to be important given that the project may pick up Rust
as another language eventually.

Using Meson is rather straight-forward. An example:

    ```
    # Meson uses out-of-tree builds. You can set up multiple build
    # directories, how you name them is completely up to you.
    $ mkdir build
    $ cd build
    $ meson setup .. -Dprefix=/tmp/git-installation

    # Build the project. This also provides several other targets like
    e.g. `install` or `test`.
    $ ninja

    # Meson has been wired up to support execution of our test suites.
    # Both our unit tests and our integration tests are supported.
    # Running `meson test` without any arguments will execute all tests,
    # but the syntax supports globbing to select only some tests.
    $ meson test 't-*'
    # Execute single test interactively to allow for debugging.
    $ meson test 't0000-*' --interactive --test-args=-ix
    ```

The build instructions have been successfully tested on the following
systems, tests are passing:

  - Apple macOS 10.15.

  - FreeBSD 14.1.

  - NixOS 24.11.

  - OpenBSD 7.6.

  - Ubuntu 24.04.

  - Windows 10 with Cygwin.

  - Windows 10 with MinGW64, except for t9700, which is also broken with
    our Makefile.

  - Windows 10 with Visual Studio 2022 toolchain, using the Native Tools
    Command Prompt with `meson setup --vsenv`. Tests pass, except for
    t9700.

  - Windows 10 with Visual Studio 2022 solution, using the Native Tools
    Command Prompt with `meson setup --backend vs2022`. Tests pass,
    except for t9700.

  - Windows 10 with VS Code, using the Meson plug-in.

It is expected that there will still be rough edges in the current
version. If this patch lands the expectation is that it will coexist
with our other build systems for a while. Like this, distributions can
slowly migrate over to Meson and report any findings they have to us
such that we can continue to iterate. A potential cutoff date for other
build systems may be Git 3.0.

Some notes:

  - The installed distribution is structured somewhat differently than
    how it used to be the case. All of our binaries are installed into
    `$libexec/git-core`, while all binaries part of `$bindir` are now
    symbolic links pointing to the former. This rule is consistent in
    itself and thus easier to reason about.

  - We do not install dashed binaries into `$libexec/git-core` anymore,
    so there won't e.g. be a symlink for git-add(1). These are not
    required by modern Git and there isn't really much of a use case for
    those anymore. By not installing those symlinks we thus start the
    deprecation of this layout.

  - We're targeting Meson 1.3.0, which has been released relatively
    recently November 2023. The only feature we use from that version is
    `fs.relative_to()`, which we could replace if necessary. If so, we
    could start to target Meson 1.0.0 and newer, released in December
    2022.

  - The whole build instructions count around 3300 lines, half of which
    is listing all of our code and test files. Our Makefiles are around
    5000 lines, autoconf adds another 1300 lines. CMake in comparison
    has only 1200 linescode, but it avoids listing individual files and
    does not wire up auto-configuration as extensively as the Meson
    instructions do.

  - We bundle a set of subproject wrappers for curl, expat, openssl,
    pcre2 and zlib. This allows developers to build Git without these
    dependencies preinstalled, and Meson will fetch and build them
    automatically. This is especially helpful on Windows.

Helped-by: Eli Schwartz <eschwartz@gentoo.org>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-07 07:52:14 +09:00
.github ci: create script to set up Git for Windows SDK 2024-10-09 11:33:04 -07:00
Documentation Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
bin-wrappers Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
block-sha1 sha1: do not redefine `platform_SHA_CTX` and friends 2024-09-27 11:27:47 -07:00
builtin Merge branch 'kn/pass-repo-to-builtin-sub-sub-commands' 2024-12-04 10:14:47 +09:00
ci Makefile: refactor GIT-VERSION-GEN to be reusable 2024-12-07 07:52:08 +09:00
compat Merge branch 'ak/typofixes' into maint-2.47 2024-11-25 12:29:48 +09:00
contrib Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
ewah
git-gui Merge https://github.com/j6t/git-gui 2024-11-11 12:47:44 +09:00
gitk-git
gitweb Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
mergetools Merge branch 'ak/typofix-2.46-maint' 2024-10-04 14:21:40 -07:00
negotiator
oss-fuzz
perl Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
po Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
refs Merge branch 'sj/refs-symref-referent-fix' 2024-12-06 13:23:16 +09:00
reftable reftable: rename scratch buffer 2024-11-26 08:39:38 +09:00
sha1 sha1: do not redefine `platform_SHA_CTX` and friends 2024-09-27 11:27:47 -07:00
sha1collisiondetection@855827c583
sha1dc
sha256
subprojects Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
t Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
templates Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
trace2 Merge branch 'ak/typofix-2.46-maint' 2024-10-04 14:21:40 -07:00
xdiff
.cirrus.yml
.clang-format clang-format: align consecutive macro definitions 2024-10-18 17:37:16 -04:00
.editorconfig
.gitattributes
.gitignore Makefile: allow "bin-wrappers/" directory to exist 2024-12-07 07:52:11 +09:00
.gitlab-ci.yml gitlab-ci: exercise Git on Windows 2024-10-09 11:33:05 -07:00
.gitmodules
.mailmap
.tsan-suppressions
CODE_OF_CONDUCT.md
COPYING
GIT-BUILD-OPTIONS.in t: better support for out-of-tree builds 2024-12-07 07:52:13 +09:00
GIT-VERSION-FILE.in Makefile: refactor GIT-VERSION-GEN to be reusable 2024-12-07 07:52:08 +09:00
GIT-VERSION-GEN Makefile: generate doc versions via GIT-VERSION-GEN 2024-12-07 07:52:09 +09:00
INSTALL Require Perl 5.26.0 2024-10-23 16:16:36 -04:00
LGPL-2.1
Makefile t: better support for out-of-tree builds 2024-12-07 07:52:13 +09:00
README.md
RelNotes Prepare for 2.47.1 2024-11-20 14:43:30 +09:00
SECURITY.md
abspath.c
abspath.h
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c
advice.c
advice.h
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'ps/apply-leakfix' 2024-09-25 10:37:10 -07:00
apply.h
archive-tar.c
archive-zip.c
archive.c Merge branch 'rs/archive-with-attr-pathspec-fix' 2024-10-04 14:21:40 -07:00
archive.h
attr.c Merge branch 'ak/typofixes' 2024-09-23 10:35:07 -07:00
attr.h
banned.h
base85.c
base85.h
bisect.c bisect: address Coverity warning about potential double free 2024-11-26 10:22:24 +09:00
bisect.h bisect: fix leaking good/bad terms when reading multipe times 2024-11-21 08:23:40 +09:00
blame.c builtin/blame: fix leaking blame entries with `--incremental` 2024-11-21 08:23:40 +09:00
blame.h builtin/blame: fix leaking blame entries with `--incremental` 2024-11-21 08:23:40 +09:00
blob.c
blob.h
bloom.c diff: improve lifecycle management of diff queues 2024-09-30 11:23:05 -07:00
bloom.h Merge branch 'ak/typofixes' 2024-09-23 10:35:07 -07:00
branch.c refs: allow passing flags when setting up a transaction 2024-11-21 07:59:14 +09:00
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle-uri.c bundle-uri: plug leak in unbundle_from_file() 2024-10-10 11:47:24 -07:00
bundle-uri.h
bundle.c
bundle.h
cache-tree.c Merge branch 'ps/cache-tree-w-broken-index-entry' into maint-2.47 2024-11-20 14:42:59 +09:00
cache-tree.h cache-tree: refactor verification to return error codes 2024-10-07 15:08:11 -07:00
cbtree.c
cbtree.h
chdir-notify.c
chdir-notify.h
check-builtins.sh
checkout.c
checkout.h
chunk-format.c
chunk-format.h
color.c
color.h
column.c
column.h
combine-diff.c combine-diff: fix leaking lost lines 2024-11-04 22:37:55 -08:00
command-list.txt
commit-graph.c
commit-graph.h
commit-reach.c
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c commit: avoid leaking already-saved buffer 2024-09-25 10:24:53 -07:00
commit.h Merge branch 'jc/pass-repo-to-builtins' 2024-09-23 10:35:09 -07:00
common-main.c
config.c config: fix evaluating "onbranch" with nonexistent git dir 2024-09-24 09:18:17 -07:00
config.h
config.mak.dev Merge branch 'ak/typofix-2.46-maint' 2024-09-25 10:37:12 -07:00
config.mak.in
config.mak.uname
configure.ac Makefile: consistently use @PLACEHOLDER@ to substitute 2024-12-07 07:52:08 +09:00
connect.c connect: clear child process before freeing in diagnostic mode 2024-09-25 10:24:53 -07:00
connect.h
connected.c packfile: use object_id in find_pack_entry_one() 2024-10-25 17:35:46 -04:00
connected.h
convert.c
convert.h
copy.c
copy.h
credential.c Merge branch 'ds/background-maintenance-with-credential' 2024-09-30 16:16:16 -07:00
credential.h
csum-file.c csum-file.c: use unsafe SHA-1 implementation when available 2024-09-27 11:27:47 -07:00
csum-file.h
ctype.c
daemon.c daemon: replace atoi() with strtoul_ui() and strtol_i() 2024-10-24 14:03:43 -04:00
date.c
date.h
decorate.c
decorate.h
delta-islands.c
delta-islands.h
delta.h
detect-compiler
diagnose.c
diagnose.h
diff-delta.c
diff-lib.c Merge branch 'jk/output-prefix-cleanup' into maint-2.47 2024-11-25 12:29:39 +09:00
diff-merges.c
diff-merges.h
diff-no-index.c
diff.c Merge branch 'jk/output-prefix-cleanup' into maint-2.47 2024-11-25 12:29:39 +09:00
diff.h Merge branch 'jk/output-prefix-cleanup' into maint-2.47 2024-11-25 12:29:39 +09:00
diffcore-break.c diff: improve lifecycle management of diff queues 2024-09-30 11:23:05 -07:00
diffcore-delta.c
diffcore-order.c diffcore-order: fix leaking buffer when parsing orderfiles 2024-09-27 08:25:35 -07:00
diffcore-pickaxe.c diff: improve lifecycle management of diff queues 2024-09-30 11:23:05 -07:00
diffcore-rename.c diff: improve lifecycle management of diff queues 2024-09-30 11:23:05 -07:00
diffcore-rotate.c diff: improve lifecycle management of diff queues 2024-09-30 11:23:05 -07:00
diffcore.h diff: improve lifecycle management of diff queues 2024-09-30 11:23:05 -07:00
dir-iterator.c
dir-iterator.h
dir.c dir: fix leak when parsing "status.showUntrackedFiles" 2024-11-04 22:37:56 -08:00
dir.h
editor.c
editor.h
entry.c
entry.h
environment.c
environment.h
exec-cmd.c
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c fetch-pack: die if in commit graph but not obj db 2024-11-05 18:57:22 -08:00
fetch-pack.h
fmt-merge-msg.c
fmt-merge-msg.h
fsck.c
fsck.h ref: add symlink ref content check for files backend 2024-11-21 08:21:34 +09:00
fsmonitor--daemon.h
fsmonitor-ipc.c
fsmonitor-ipc.h
fsmonitor-ll.h
fsmonitor-path-utils.h
fsmonitor-settings.c
fsmonitor-settings.h
fsmonitor.c global: Fix duplicate word typos 2024-10-21 16:05:04 -04:00
fsmonitor.h
generate-cmdlist.sh Makefile: refactor generators to be PWD-independent 2024-12-07 07:52:11 +09:00
generate-configlist.sh Makefile: refactor generators to be PWD-independent 2024-12-07 07:52:11 +09:00
generate-hooklist.sh Makefile: refactor generators to be PWD-independent 2024-12-07 07:52:11 +09:00
generate-perl.sh Makefile: use "generate-perl.sh" to massage Perl library 2024-12-07 07:52:10 +09:00
generate-python.sh Makefile: extract script to massage Python scripts 2024-12-07 07:52:10 +09:00
generate-script.sh Makefile: extract script to massage Shell scripts 2024-12-07 07:52:10 +09:00
gettext.c
gettext.h
git-archimport.perl Require Perl 5.26.0 2024-10-23 16:16:36 -04:00
git-compat-util.h git-compat-util: drop now-unused `UNLEAK()` macro 2024-11-21 08:23:46 +09:00
git-curl-compat.h git-curl-compat: remove check for curl 7.56.0 2024-10-23 16:16:35 -04:00
git-cvsexportcommit.perl Require Perl 5.26.0 2024-10-23 16:16:36 -04:00
git-cvsimport.perl Require Perl 5.26.0 2024-10-23 16:16:36 -04:00
git-cvsserver.perl Makefile: consistently use @PLACEHOLDER@ to substitute 2024-12-07 07:52:08 +09:00
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh Makefile: consistently use PERL_PATH 2024-12-07 07:52:09 +09: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-quiltimport.sh
git-request-pull.sh Makefile: consistently use PERL_PATH 2024-12-07 07:52:09 +09:00
git-send-email.perl Makefile: consistently use @PLACEHOLDER@ to substitute 2024-12-07 07:52:08 +09:00
git-sh-i18n.sh Makefile: consistently use @PLACEHOLDER@ to substitute 2024-12-07 07:52:08 +09:00
git-sh-setup.sh Makefile: consistently use @PLACEHOLDER@ to substitute 2024-12-07 07:52:08 +09:00
git-submodule.sh
git-svn.perl Makefile: consistently use @PLACEHOLDER@ to substitute 2024-12-07 07:52:08 +09:00
git-web--browse.sh
git-zlib.c
git-zlib.h
git.c help: fix leaking return value from `help_unknown_cmd()` 2024-11-21 08:23:44 +09:00
git.rc.in Makefile: generate "git.rc" via GIT-VERSION-GEN 2024-12-07 07:52:09 +09:00
gpg-interface.c Merge branch 'ak/typofix-2.46-maint' 2024-09-25 10:37:12 -07:00
gpg-interface.h
graph.c Merge branch 'jk/output-prefix-cleanup' into maint-2.47 2024-11-25 12:29:39 +09:00
graph.h
grep.c Merge branch 'ps/leakfixes-part-9' 2024-11-13 08:35:31 +09:00
grep.h
hash-lookup.c
hash-lookup.h
hash.h hash.h: set NEEDS_CLONE_HELPER_UNSAFE in fallback mode 2024-10-03 11:18:36 -07:00
hashmap.c
hashmap.h
help.c help: fix leaking return value from `help_unknown_cmd()` 2024-11-21 08:23:44 +09:00
help.h help: fix leaking return value from `help_unknown_cmd()` 2024-11-21 08:23:44 +09:00
hex-ll.c
hex-ll.h
hex.c
hex.h
hook.c
hook.h
http-backend.c
http-fetch.c http-fetch: clear leaking git-index-pack(1) arguments 2024-09-25 10:24:52 -07:00
http-push.c packfile: convert find_sha1_pack() to use object_id 2024-10-25 17:35:46 -04:00
http-walker.c packfile: convert find_sha1_pack() to use object_id 2024-10-25 17:35:46 -04:00
http.c Merge branch 'bc/drop-ancient-libcurl-and-perl' 2024-12-04 10:14:48 +09:00
http.h http: fix leak of http_object_request struct 2024-09-25 10:24:55 -07:00
ident.c
ident.h
imap-send.c Merge branch 'bc/drop-ancient-libcurl-and-perl' 2024-12-04 10:14:48 +09:00
iterator.h
json-writer.c
json-writer.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c line-log: fix leak when rewriting commit parents 2024-11-21 08:23:42 +09:00
line-log.h
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c list-objects-filter-options: work around reported leak on error 2024-11-04 22:37:57 -08:00
list-objects-filter-options.h
list-objects-filter.c
list-objects-filter.h
list-objects.c
list-objects.h
list.h
lockfile.c
lockfile.h
log-tree.c Merge branch 'jk/output-prefix-cleanup' into maint-2.47 2024-11-25 12:29:39 +09:00
log-tree.h rebase-update-refs: extract load_branch_decorations 2024-10-09 10:52:45 -07:00
loose.c loose: don't rely on repository global state 2024-10-09 11:51:31 -07:00
loose.h
ls-refs.c
ls-refs.h
mailinfo.c
mailinfo.h
mailmap.c
mailmap.h
match-trees.c
match-trees.h
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-ll.c merge: replace atoi() with strtol_i() for marker size validation 2024-10-24 14:03:44 -04:00
merge-ll.h
merge-ort-wrappers.c
merge-ort-wrappers.h
merge-ort.c diff: improve lifecycle management of diff queues 2024-09-30 11:23:05 -07:00
merge-ort.h
merge-recursive.c
merge-recursive.h
merge.c
merge.h
mergesort.h
meson.build Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
meson_options.txt Introduce support for the Meson build system 2024-12-07 07:52:14 +09:00
midx-write.c pack-write: fix return parameter of `write_rev_file_order()` 2024-09-30 11:23:08 -07:00
midx.c packfile: use object_id in find_pack_entry_one() 2024-10-25 17:35:46 -04:00
midx.h
name-hash.c
name-hash.h
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object-file-convert.c
object-file-convert.h
object-file.c object-file: inline empty tree and blob literals 2024-11-18 21:48:48 +09:00
object-file.h finalize_object_file(): implement collision check 2024-09-27 11:27:47 -07:00
object-name.c
object-name.h
object-store-ll.h
object-store.h
object.c
object.h
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c global: Fix duplicate word typos 2024-10-21 16:05:04 -04:00
oidtree.h
pack-bitmap-write.c pack-bitmap-write: fix leaking OID array 2024-09-30 11:23:07 -07:00
pack-bitmap.c Merge branch 'tb/boundary-traversal-fix' 2024-12-04 10:14:44 +09:00
pack-bitmap.h
pack-check.c
pack-mtimes.c
pack-mtimes.h
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c Merge branch 'ps/leakfixes-part-8' 2024-10-10 14:22:29 -07:00
pack.h pack-write: fix return parameter of `write_rev_file_order()` 2024-09-30 11:23:08 -07:00
packfile.c packfile: use oidread() instead of hashcpy() to fill object_id 2024-10-25 17:35:46 -04:00
packfile.h packfile: use object_id in find_pack_entry_one() 2024-10-25 17:35:46 -04:00
pager.c
pager.h
parallel-checkout.c
parallel-checkout.h
parse-options-cb.c
parse-options.c parse-options: free previous value of `OPTION_FILENAME` 2024-09-27 08:25:35 -07:00
parse-options.h builtin: pass repository to sub commands 2024-11-26 10:36:08 +09:00
parse.c
parse.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c
path.h
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
preload-index.h
pretty.c pretty: clear signature check 2024-11-04 22:37:53 -08:00
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c promisor-remote: fix leaking partial clone filter 2024-09-27 08:25:36 -07:00
promisor-remote.h
prompt.c
prompt.h
protocol-caps.c
protocol-caps.h
protocol.c
protocol.h
prune-packed.c
prune-packed.h
pseudo-merge.c pseudo-merge: fix leaking strmap keys 2024-09-30 11:23:06 -07:00
pseudo-merge.h pseudo-merge: fix various memory leaks 2024-09-30 11:23:06 -07:00
quote.c
quote.h
range-diff.c Merge branch 'jk/output-prefix-cleanup' into maint-2.47 2024-11-25 12:29:39 +09:00
range-diff.h
reachable.c
reachable.h
read-cache-ll.h global: Fix duplicate word typos 2024-10-21 16:05:04 -04:00
read-cache.c Merge branch 'ps/cache-tree-w-broken-index-entry' into maint-2.47 2024-11-20 14:42:59 +09:00
read-cache.h
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c ref-filter: format iteratively with lexicographic refname sorting 2024-10-21 16:46:03 -04:00
ref-filter.h
reflog-walk.c
reflog-walk.h
reflog.c reflog: rename unreachable 2024-11-18 09:42:08 +09:00
reflog.h
refs.c Merge branch 'sj/ref-contents-check' 2024-12-04 10:14:42 +09:00
refs.h Merge branch 'sj/ref-contents-check' 2024-12-04 10:14:42 +09:00
refspec.c refspec: store raw refspecs inside refspec_item 2024-11-12 18:16:48 +09:00
refspec.h refspec: store raw refspecs inside refspec_item 2024-11-12 18:16:48 +09:00
remote-curl.c remote-curl: free HEAD ref with free_one_ref() 2024-09-25 10:24:56 -07:00
remote.c Merge branch 'xx/remote-server-option-config' 2024-10-15 16:56:43 -04:00
remote.h Merge branch 'xx/remote-server-option-config' 2024-10-15 16:56:43 -04:00
replace-object.c
replace-object.h
repo-settings.c
repo-settings.h
repository.c Merge branch 'ps/environ-wo-the-repository' 2024-09-23 10:35:05 -07:00
repository.h
rerere.c
rerere.h
reset.c
reset.h
resolve-undo.c
resolve-undo.h
revision.c bisect: fix leaking good/bad terms when reading multipe times 2024-11-21 08:23:40 +09:00
revision.h
run-command.c
run-command.h
sane-ctype.h
scalar.c Merge branch 'ps/leakfixes-part-8' 2024-10-10 14:22:29 -07:00
send-pack.c
send-pack.h
sequencer.c Merge branch 'kh/sequencer-comment-char' 2024-12-06 13:23:18 +09:00
sequencer.h
serve.c
serve.h
server-info.c
server-info.h
setup.c worktree: link worktrees with relative paths 2024-10-08 11:49:22 -07:00
setup.h
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h sha1: do not redefine `platform_SHA_CTX` and friends 2024-09-27 11:27:47 -07:00
shallow.c shallow: fix leak when unregistering last shallow root 2024-09-25 10:24:52 -07:00
shallow.h
shared.mak
shell.c shell: fix leaking strings 2024-09-30 11:23:03 -07:00
shortlog.h
sideband.c Merge branch 'ak/typofix-2.46-maint' 2024-09-25 10:37:12 -07:00
sideband.h
sigchain.c
sigchain.h
simple-ipc.h simple-ipc: split async server initialization and running 2024-10-08 12:03:56 -07:00
sparse-index.c sparse-index: correctly free EWAH contents 2024-11-04 22:37:56 -08:00
sparse-index.h sparse-checkout: disable advice in 'disable' 2024-09-23 13:19:01 -07:00
split-index.c split-index: fix memory leak in `move_cache_to_base_index()` 2024-11-21 08:23:43 +09:00
split-index.h
stable-qsort.c
statinfo.c
statinfo.h
strbuf.c
strbuf.h
streaming.c
streaming.h
string-list.c
string-list.h
strmap.c
strmap.h
strvec.c strvec: introduce new `strvec_splice()` function 2024-11-21 08:23:42 +09:00
strvec.h strvec: introduce new `strvec_splice()` function 2024-11-21 08:23:42 +09:00
sub-process.c
sub-process.h
submodule-config.c submodule: fix leaking submodule entry list 2024-09-30 11:23:03 -07:00
submodule-config.h submodule: fix leaking submodule entry list 2024-09-30 11:23:03 -07:00
submodule.c refspec: store raw refspecs inside refspec_item 2024-11-12 18:16:48 +09:00
submodule.h submodule: fix leaking update strategy 2024-09-27 08:25:34 -07:00
symlinks.c
symlinks.h
tag.c
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c Merge branch 'tb/weak-sha1-for-tail-sum' 2024-10-02 07:46:27 -07:00
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trailer.c Merge branch 'la/trailer-info' 2024-11-20 14:47:17 +09:00
trailer.h trailer: spread usage of "trailer_block" language 2024-10-14 12:33:02 -04:00
transport-helper.c transport-helper: fix leaking import/export marks 2024-11-04 22:37:54 -08:00
transport-internal.h
transport.c transport.c:🤝 make use of server options from remote 2024-10-08 10:22:08 -07:00
transport.h transport: introduce parse_transport_option() method 2024-10-08 10:22:06 -07:00
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unicode-width.h
unimplemented.sh Makefile: consistently use @PLACEHOLDER@ to substitute 2024-12-07 07:52:08 +09:00
unix-socket.c
unix-socket.h
unix-stream-server.c
unix-stream-server.h
unpack-trees.c unpack-trees: detect mismatching number of cache-tree/index entries 2024-10-07 15:08:11 -07:00
unpack-trees.h
upload-pack.c Merge branch 'en/shallow-exclude-takes-a-ref-fix' 2024-11-13 08:35:32 +09:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c git-compat-util: drop now-unused `UNLEAK()` macro 2024-11-21 08:23:46 +09:00
userdiff.c
userdiff.h
utf8.c
utf8.h utf8.h: squelch unused-parameter warnings with NO_ICONV 2024-10-02 15:52:48 -07:00
varint.c
varint.h
version-def.h.in Makefile: propagate Git version via generated header 2024-12-07 07:52:08 +09:00
version.c Makefile: propagate Git version via generated header 2024-12-07 07:52:08 +09:00
version.h
versioncmp.c
versioncmp.h
walker.c refs: allow passing flags when setting up a transaction 2024-11-21 07:59:14 +09:00
walker.h http-walker: use object_id instead of bare hash 2024-10-25 17:35:46 -04:00
wildmatch.c
wildmatch.h
worktree.c worktree: link worktrees with relative paths 2024-10-08 11:49:22 -07:00
worktree.h worktree: link worktrees with relative paths 2024-10-08 11:49:22 -07:00
wrapper.c
wrapper.h
write-or-die.c
write-or-die.h
ws.c
ws.h
wt-status.c wt-status: fix leaking buffer with sparse directories 2024-09-30 11:23:03 -07:00
wt-status.h
xdiff-interface.c
xdiff-interface.h

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 and Documentation/CodingGuidelines).

Those wishing to help with error message, usage and informational message string translations (localization l10) should see po/README.md (a po file is a Portable Object file that holds the translations).

To subscribe to the list, send an email to git+subscribe@vger.kernel.org (see https://subspace.kernel.org/subscribing.html for details). The mailing list archives are available at https://lore.kernel.org/git/, https://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