Home Explore Blog CI



git

14th chunk of `Documentation/git.adoc`
8f9c8c4fa2e2de6e5c0758fa8d70e153477ef4e7f8889d420000000100000d4e
 the variable).

`GIT_ADVICE`::
	If set to `0`, then disable all advice messages. These messages are
	intended to provide hints to human users that may help them get out of
	problematic situations or take advantage of new features. Users can
	disable individual messages using the `advice.*` config keys. These
	messages may be disruptive to tools that execute Git processes, so this
	variable is available to disable the messages. (The `--no-advice`
	global option is also available, but old Git versions may fail when
	this option is not understood. The environment variable will be ignored
	by Git versions that do not understand it.)

Discussion[[Discussion]]
------------------------

More detail on the following is available from the
link:user-manual.html#git-concepts[Git concepts chapter of the
user-manual] and linkgit:gitcore-tutorial[7].

A Git project normally consists of a working directory with a ".git"
subdirectory at the top level.  The .git directory contains, among other
things, a compressed object database representing the complete history
of the project, an "index" file which links that history to the current
contents of the working tree, and named pointers into that history such
as tags and branch heads.

The object database contains objects of three main types: blobs, which
hold file data; trees, which point to blobs and other trees to build up
directory hierarchies; and commits, which each reference a single tree
and some number of parent commits.

The commit, equivalent to what other systems call a "changeset" or
"version", represents a step in the project's history, and each parent
represents an immediately preceding step.  Commits with more than one
parent represent merges of independent lines of development.

All objects are named by the SHA-1 hash of their contents, normally
written as a string of 40 hex digits.  Such names are globally unique.
The entire history leading up to a commit can be vouched for by signing
just that commit.  A fourth object type, the tag, is provided for this
purpose.

When first created, objects are stored in individual files, but for
efficiency may later be compressed together into "pack files".

Named pointers called refs mark interesting points in history.  A ref
may contain the SHA-1 name of an object or the name of another ref (the
latter is called a "symbolic ref").
Refs with names beginning `refs/head/` contain the SHA-1 name of the most
recent commit (or "head") of a branch under development.  SHA-1 names of
tags of interest are stored under `refs/tags/`.  A symbolic ref named
`HEAD` contains the name of the currently checked-out branch.

The index file is initialized with a list of all paths and, for each
path, a blob object and a set of attributes.  The blob object represents
the contents of the file as of the head of the current branch.  The
attributes (last modified time, size, etc.) are taken from the
corresponding file in the working tree.  Subsequent changes to the
working tree can be found by comparing these attributes.  The index may
be updated with new content, and new commits may be created from the
content stored in the index.

The index is also capable of storing multiple entries (called "stages")
for a given pathname.  These stages are used to hold the various
unmerged version of a file when a merge is in progress.

SECURITY
--------

Some configuration options and hook files may

Title: Git Project Structure and Security
Summary
This section of the Git documentation describes the structure of a Git project, including the .git directory, object database, and index file, as well as the different types of objects, such as blobs, trees, and commits, and how they are used to represent the project's history, and touches on security considerations related to configuration options and hook files.