зеркало из https://github.com/microsoft/git.git
Merge branches 'jc/clone', 'md/env' and 'mo/path'
This commit is contained in:
Коммит
92643a27cc
|
@ -3,6 +3,13 @@
|
|||
existing contents of `.git/FETCH_HEAD`. Without this
|
||||
option old data in `.git/FETCH_HEAD` will be overwritten.
|
||||
|
||||
--upload-pack <upload-pack>::
|
||||
-u <upload-pack>::
|
||||
When given, and the repository to fetch from is handled
|
||||
by 'git-fetch-pack', '--exec=<upload-pack>' is passed to
|
||||
the command to specify non-default path for the command
|
||||
run on the other end.
|
||||
|
||||
-f, \--force::
|
||||
When `git-fetch` is used with `<rbranch>:<lbranch>`
|
||||
refspec, it refuses to update the local branch
|
||||
|
|
|
@ -9,7 +9,7 @@ git-clone - Clones a repository.
|
|||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-clone' [-l [-s]] [-q] [-n] [--naked] [-o <name>] [-u <upload-pack>]
|
||||
'git-clone' [-l [-s]] [-q] [-n] [--bare] [-o <name>] [-u <upload-pack>]
|
||||
<repository> [<directory>]
|
||||
|
||||
DESCRIPTION
|
||||
|
@ -58,11 +58,13 @@ OPTIONS
|
|||
-n::
|
||||
No checkout of HEAD is performed after the clone is complete.
|
||||
|
||||
--naked::
|
||||
Make a 'naked' GIT repository. That is, instead of
|
||||
--bare::
|
||||
Make a 'bare' GIT repository. That is, instead of
|
||||
creating `<directory>` and placing the administrative
|
||||
files in `<directory>/.git`, make the `<directory>`
|
||||
itself the `$GIT_DIR`. This implies `-n` option.
|
||||
itself the `$GIT_DIR`. This implies `-n` option. When
|
||||
this option is used, neither the `origin` branch nor the
|
||||
default `remotes/origin` file is created.
|
||||
|
||||
-o <name>::
|
||||
Instead of using the branch name 'origin' to keep track
|
||||
|
@ -110,17 +112,17 @@ $ git show-branch
|
|||
------------
|
||||
|
||||
|
||||
Create a naked repository to publish your changes to the public::
|
||||
Create a bare repository to publish your changes to the public::
|
||||
+
|
||||
------------
|
||||
$ git clone --naked -l /home/proj/.git /pub/scm/proj.git
|
||||
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
|
||||
------------
|
||||
|
||||
|
||||
Create a repository on the kernel.org machine that borrows from Linus::
|
||||
+
|
||||
------------
|
||||
$ git clone --naked -l -s /pub/scm/.../torvalds/linux-2.6.git \
|
||||
$ git clone --bare -l -s /pub/scm/.../torvalds/linux-2.6.git \
|
||||
/pub/scm/.../me/subsys-2.6.git
|
||||
------------
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ git repository layout
|
|||
|
||||
You may find these things in your git repository (`.git`
|
||||
directory for a repository associated with your working tree, or
|
||||
`'project'.git` directory for a public 'naked' repository).
|
||||
`'project'.git` directory for a public 'bare' repository).
|
||||
|
||||
objects::
|
||||
Object store associated with this repository. Usually
|
||||
|
@ -73,7 +73,7 @@ HEAD::
|
|||
A symlink of the form `refs/heads/'name'` to point at
|
||||
the current branch, if exists. It does not mean much if
|
||||
the repository is not associated with any working tree
|
||||
(i.e. 'naked' repository), but a valid git repository
|
||||
(i.e. a 'bare' repository), but a valid git repository
|
||||
*must* have such a symlink here. It is legal if the
|
||||
named branch 'name' does not (yet) exist.
|
||||
|
||||
|
@ -92,7 +92,7 @@ hooks::
|
|||
|
||||
index::
|
||||
The current index file for the repository. It is
|
||||
usually not found in a naked repository.
|
||||
usually not found in a bare repository.
|
||||
|
||||
info::
|
||||
Additional information about the repository is recorded
|
||||
|
|
10
connect.c
10
connect.c
|
@ -644,10 +644,16 @@ int git_connect(int fd[2], char *url, const char *prog)
|
|||
ssh_basename++;
|
||||
execlp(ssh, ssh_basename, host, command, NULL);
|
||||
}
|
||||
else
|
||||
else {
|
||||
unsetenv(ALTERNATE_DB_ENVIRONMENT);
|
||||
unsetenv(DB_ENVIRONMENT);
|
||||
unsetenv(GIT_DIR_ENVIRONMENT);
|
||||
unsetenv(GRAFT_ENVIRONMENT);
|
||||
unsetenv(INDEX_ENVIRONMENT);
|
||||
execlp("sh", "sh", "-c", command, NULL);
|
||||
}
|
||||
die("exec failed");
|
||||
}
|
||||
}
|
||||
fd[0] = pipefd[0][0];
|
||||
fd[1] = pipefd[1][1];
|
||||
close(pipefd[0][1]);
|
||||
|
|
31
git-clone.sh
31
git-clone.sh
|
@ -9,7 +9,7 @@
|
|||
unset CDPATH
|
||||
|
||||
usage() {
|
||||
echo >&2 "Usage: $0 [--naked] [-l [-s]] [-q] [-u <upload-pack>] [-o <name>] [-n] <repo> [<dir>]"
|
||||
echo >&2 "Usage: $0 [--bare] [-l [-s]] [-q] [-u <upload-pack>] [-o <name>] [-n] <repo> [<dir>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
@ -53,15 +53,17 @@ use_local=no
|
|||
local_shared=no
|
||||
no_checkout=
|
||||
upload_pack=
|
||||
naked=
|
||||
bare=
|
||||
origin=origin
|
||||
origin_override=
|
||||
while
|
||||
case "$#,$1" in
|
||||
0,*) break ;;
|
||||
*,-n|*,--no|*,--no-|*,--no-c|*,--no-ch|*,--no-che|*,--no-chec|\
|
||||
*,--no-check|*,--no-checko|*,--no-checkou|*,--no-checkout)
|
||||
no_checkout=yes ;;
|
||||
*,--na|*,--nak|*,--nake|*,--naked) naked=yes ;;
|
||||
*,--na|*,--nak|*,--nake|*,--naked|\
|
||||
*,-b|*,--b|*,--ba|*,--bar|*,--bare) bare=yes ;;
|
||||
*,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
|
||||
*,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared)
|
||||
local_shared=yes; use_local=yes ;;
|
||||
|
@ -72,6 +74,11 @@ while
|
|||
echo >&2 "'$2' is not suitable for a branch name"
|
||||
exit 1
|
||||
}
|
||||
test -z "$origin_override" || {
|
||||
echo >&2 "Do not give more than one -o options."
|
||||
exit 1
|
||||
}
|
||||
origin_override=yes
|
||||
origin="$2"; shift
|
||||
;;
|
||||
1,-u|1,--upload-pack) usage ;;
|
||||
|
@ -85,8 +92,16 @@ do
|
|||
shift
|
||||
done
|
||||
|
||||
# --naked implies --no-checkout
|
||||
test -z "$naked" || no_checkout=yes
|
||||
# --bare implies --no-checkout
|
||||
if test yes = "$bare"
|
||||
then
|
||||
if test yes = "$origin_override"
|
||||
then
|
||||
echo >&2 '--bare and -o $origin options are incompatible.'
|
||||
exit 1
|
||||
fi
|
||||
no_checkout=yes
|
||||
fi
|
||||
|
||||
# Turn the source into an absolute path if
|
||||
# it is local
|
||||
|
@ -103,11 +118,11 @@ dir="$2"
|
|||
[ -e "$dir" ] && echo "$dir already exists." && usage
|
||||
mkdir -p "$dir" &&
|
||||
D=$(cd "$dir" && pwd) &&
|
||||
case "$naked" in
|
||||
case "$bare" in
|
||||
yes) GIT_DIR="$D" ;;
|
||||
*) GIT_DIR="$D/.git" ;;
|
||||
esac && export GIT_DIR && git-init-db || usage
|
||||
case "$naked" in
|
||||
case "$bare" in
|
||||
yes)
|
||||
GIT_DIR="$D" ;;
|
||||
*)
|
||||
|
@ -208,7 +223,7 @@ esac
|
|||
|
||||
cd "$D" || exit
|
||||
|
||||
if test -f "$GIT_DIR/HEAD"
|
||||
if test -f "$GIT_DIR/HEAD" && test -z "$bare"
|
||||
then
|
||||
head_points_at=`git-symbolic-ref HEAD`
|
||||
case "$head_points_at" in
|
||||
|
|
14
git-fetch.sh
14
git-fetch.sh
|
@ -17,12 +17,20 @@ append=
|
|||
force=
|
||||
verbose=
|
||||
update_head_ok=
|
||||
exec=
|
||||
upload_pack=
|
||||
while case "$#" in 0) break ;; esac
|
||||
do
|
||||
case "$1" in
|
||||
-a|--a|--ap|--app|--appe|--appen|--append)
|
||||
append=t
|
||||
;;
|
||||
-u|--u|--up|--upl|--uploa|--upload|--upload-|--upload-p|--upload-pa|\
|
||||
--upload-pac|--upload-pack)
|
||||
shift
|
||||
exec="--exec=$1"
|
||||
upload_pack="-u $1"
|
||||
;;
|
||||
-f|--f|--fo|--for|--forc|--force)
|
||||
force=t
|
||||
;;
|
||||
|
@ -196,7 +204,7 @@ reflist=$(get_remote_refs_for_fetch "$@")
|
|||
if test "$tags"
|
||||
then
|
||||
taglist=$(IFS=" " &&
|
||||
git-ls-remote --tags "$remote" |
|
||||
git-ls-remote $upload_pack --tags "$remote" |
|
||||
while read sha1 name
|
||||
do
|
||||
case "$name" in
|
||||
|
@ -312,7 +320,7 @@ fetch_main () {
|
|||
( : subshell because we muck with IFS
|
||||
IFS=" $LF"
|
||||
(
|
||||
git-fetch-pack $keep "$remote" $rref || echo failed "$remote"
|
||||
git-fetch-pack $exec $keep "$remote" $rref || echo failed "$remote"
|
||||
) |
|
||||
while read sha1 remote_name
|
||||
do
|
||||
|
@ -361,7 +369,7 @@ fetch_main "$reflist"
|
|||
case "$no_tags$tags" in
|
||||
'')
|
||||
taglist=$(IFS=" " &&
|
||||
git-ls-remote --tags "$remote" |
|
||||
git-ls-remote $upload_pack --tags "$remote" |
|
||||
sed -ne 's|^\([0-9a-f]*\)[ ]\(refs/tags/.*\)^{}$|\1 \2|p' |
|
||||
while read sha1 name
|
||||
do
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
#
|
||||
|
||||
usage () {
|
||||
echo >&2 "usage: $0 [--heads] [--tags] <repository> <refs>..."
|
||||
echo >&2 "usage: $0 [--heads] [--tags] [-u|--upload-pack <upload-pack>]"
|
||||
echo >&2 " <repository> <refs>..."
|
||||
exit 1;
|
||||
}
|
||||
|
||||
|
@ -11,6 +12,7 @@ die () {
|
|||
exit 1
|
||||
}
|
||||
|
||||
exec=
|
||||
while case "$#" in 0) break;; esac
|
||||
do
|
||||
case "$1" in
|
||||
|
@ -18,6 +20,11 @@ do
|
|||
heads=heads; shift ;;
|
||||
-t|--t|--ta|--tag|--tags)
|
||||
tags=tags; shift ;;
|
||||
-u|--u|--up|--upl|--uploa|--upload|--upload-|--upload-p|--upload-pa|\
|
||||
--upload-pac|--upload-pack)
|
||||
shift
|
||||
exec="--exec=$1"
|
||||
shift;;
|
||||
--)
|
||||
shift; break ;;
|
||||
-*)
|
||||
|
@ -66,7 +73,7 @@ rsync://* )
|
|||
;;
|
||||
|
||||
* )
|
||||
git-peek-remote "$peek_repo" ||
|
||||
git-peek-remote $exec "$peek_repo" ||
|
||||
echo "failed slurping"
|
||||
;;
|
||||
esac |
|
||||
|
|
Загрузка…
Ссылка в новой задаче