Merge branch 'jc/clone' into next

* jc/clone:
  git-clone: fix handling of upsteram whose HEAD does not point at master.
  fix repacking with lots of tags
  Documentation: revise top of git man page
This commit is contained in:
Junio C Hamano 2006-04-02 22:23:49 -07:00
commit 1bdbb57407
3 changed files with 70 additions and 70 deletions

View File

@ -12,10 +12,14 @@ SYNOPSIS
DESCRIPTION
-----------
'git' is both a program and a directory content tracker system.
The program 'git' is just a wrapper to reach the core git programs
(or a potty if you like, as it's not exactly porcelain but still
brings your stuff to the plumbing).
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.
See this link:tutorial.html[tutorial] to get started, then see
link:everyday.html[Everyday Git] for a useful minimum set of commands, and
"man git-commandname" for documentation of each command. CVS users may
also want to read link:cvs-migration.html[CVS migration].
OPTIONS
-------
@ -35,55 +39,38 @@ OPTIONS
the current setting and then exit.
NOT LEARNING CORE GIT COMMANDS
------------------------------
FURTHER DOCUMENTATION
---------------------
This manual is intended to give complete background information
and internal workings of git, which may be too much for most
people. The <<Discussion>> section below contains much useful
definition and clarification - read that first.
See the references above to get started using git. The following is
probably more detail than necessary for a first-time user.
If you are interested in using git to manage (version control)
projects, use link:tutorial.html[The Tutorial] to get you started,
and then link:everyday.html[Everyday GIT] as a guide to the
minimum set of commands you need to know for day-to-day work.
Most likely, that will get you started, and you can go a long
way without knowing the low level details too much.
The <<Discussion,Discussion>> section below and the
link:core-tutorial.html[Core tutorial] both provide introductions to the
underlying git architecture.
The link:core-tutorial.html[Core tutorial] document covers how things
internally work.
See also the link:howto-index.html[howto] documents for some useful
examples.
If you are migrating from CVS, link:cvs-migration.html[cvs
migration] document may be helpful after you finish the
tutorial.
GIT COMMANDS
------------
After you get the general feel from the tutorial and this
overview page, you may want to take a look at the
link:howto-index.html[howto] documents.
We divide git into high level ("porcelain") commands and low level
("plumbing") commands.
Low-level commands (plumbing)
-----------------------------
CORE GIT COMMANDS
-----------------
Although git includes its
own porcelain layer, its low-level commands are sufficient to support
development of alternative porcelains. Developers of such porcelains
might start by reading about gitlink:git-update-index[1] and
gitlink:git-read-tree[1].
If you are writing your own Porcelain, you need to be familiar
with most of the low level commands --- I suggest starting from
gitlink:git-update-index[1] and gitlink:git-read-tree[1].
Commands Overview
-----------------
The git commands can helpfully be split into those that manipulate
the repository, the index and the files in the working tree, those that
interrogate and compare them, and those that moves objects and
references between repositories.
In addition, git itself comes with a spartan set of porcelain
commands. They are usable but are not meant to compete with real
Porcelains.
There are also some ancillary programs that can be viewed as useful
aids for using the core commands but which are unlikely to be used by
SCMs layered over git.
We divide the low-level commands into commands that manipulate objects (in
the repository, index, and working tree), commands that interrogate and
compare objects, and commands that move objects and references between
repositories.
Manipulation commands
~~~~~~~~~~~~~~~~~~~~~
@ -248,8 +235,14 @@ gitlink:git-upload-pack[1]::
what are asked for.
Porcelain-ish Commands
----------------------
High-level commands (porcelain)
-------------------------------
We separate the porcelain commands into the main commands and some
ancillary user utilities.
Main porcelain commands
~~~~~~~~~~~~~~~~~~~~~~~
gitlink:git-add[1]::
Add paths to the index.
@ -346,7 +339,7 @@ gitlink:git-whatchanged[1]::
Ancillary Commands
------------------
~~~~~~~~~~~~~~~~~~
Manipulators:
gitlink:git-applypatch[1]::

View File

@ -52,7 +52,8 @@ Perhaps git-update-server-info needs to be run there?"
git-http-fetch -v -a -w "$tname" "$name" "$1/" || exit 1
done <"$clone_tmp/refs"
rm -fr "$clone_tmp"
http_fetch "$1/HEAD" "$GIT_DIR/REMOTE_HEAD"
http_fetch "$1/HEAD" "$GIT_DIR/REMOTE_HEAD" ||
rm -f "$GIT_DIR/REMOTE_HEAD"
}
# Read git-fetch-pack -k output and store the remote branches.
@ -324,7 +325,7 @@ test -d "$GIT_DIR/refs/reference-tmp" && rm -fr "$GIT_DIR/refs/reference-tmp"
if test -f "$GIT_DIR/CLONE_HEAD"
then
# Figure out where the remote HEAD points at.
# Read git-fetch-pack -k output and store the remote branches.
perl -e "$copy_refs" "$GIT_DIR" "$use_separate_remote" "$origin"
fi
@ -332,22 +333,25 @@ cd "$D" || exit
if test -z "$bare" && test -f "$GIT_DIR/REMOTE_HEAD"
then
head_sha1=`cat "$GIT_DIR/REMOTE_HEAD"`
# Figure out which remote branch HEAD points at.
case "$use_separate_remote" in
'') remote_top=refs/heads ;;
*) remote_top="refs/remotes/$origin" ;;
esac
# What to use to track the remote primary branch
if test -n "$use_separate_remote"
then
origin_tracking="remotes/$origin/master"
else
origin_tracking="heads/$origin"
fi
head_sha1=`cat "$GIT_DIR/REMOTE_HEAD"`
case "$head_sha1" in
'ref: refs/'*)
# Uh-oh, the remote told us (http transport done against
# new style repository with a symref HEAD).
# Ideally we should skip the guesswork but for now
# opt for minimum change.
head_sha1=`expr "$head_sha1" : 'ref: refs/heads/\(.*\)'`
head_sha1=`cat "$GIT_DIR/$remote_top/$head_sha1"`
;;
esac
# The name under $remote_top the remote HEAD seems to point at
# The name under $remote_top the remote HEAD seems to point at.
head_points_at=$(
(
echo "master"
@ -368,23 +372,28 @@ then
)
)
# Write out remotes/$origin file.
# Write out remotes/$origin file, and update our "$head_points_at".
case "$head_points_at" in
?*)
mkdir -p "$GIT_DIR/remotes" &&
git-symbolic-ref HEAD "refs/heads/$head_points_at" &&
case "$use_separate_remote" in
t) origin_track="$remote_top/$head_points_at"
git-update-ref HEAD "$head_sha1" ;;
*) origin_track="$remote_top/$origin"
git-update-ref "refs/heads/$origin" "$head_sha1" ;;
esac &&
echo >"$GIT_DIR/remotes/$origin" \
"URL: $repo
Pull: refs/heads/$head_points_at:refs/$origin_tracking" &&
case "$use_separate_remote" in
t) git-update-ref HEAD "$head_sha1" ;;
*) git-update-ref "refs/heads/$origin" $(git-rev-parse HEAD) ;;
esac &&
Pull: refs/heads/$head_points_at:$origin_track" &&
(cd "$GIT_DIR/$remote_top" && find . -type f -print) |
while read dotslref
do
name=`expr "$dotslref" : './\(.*\)'` &&
test "$head_points_at" = "$name" ||
test "$origin" = "$name" ||
test "$use_separate_remote" = '' && {
test "$head_points_at" = "$name" ||
test "$origin" = "$name"
} ||
echo "Pull: refs/heads/${name}:$remote_top/${name}"
done >>"$GIT_DIR/remotes/$origin" &&
case "$use_separate_remote" in

View File

@ -29,12 +29,10 @@ PACKDIR="$GIT_OBJECT_DIRECTORY/pack"
case ",$all_into_one," in
,,)
rev_list='--unpacked'
rev_parse='--all'
pack_objects='--incremental'
;;
,t,)
rev_list=
rev_parse='--all'
pack_objects=
# Redundancy check in all-into-one case is trivial.
@ -43,7 +41,7 @@ case ",$all_into_one," in
;;
esac
pack_objects="$pack_objects $local $quiet $no_reuse_delta"
name=$(git-rev-list --objects $rev_list $(git-rev-parse $rev_parse) 2>&1 |
name=$(git-rev-list --objects --all $rev_list 2>&1 |
git-pack-objects --non-empty $pack_objects .tmp-pack) ||
exit 1
if [ -z "$name" ]; then