From 38ddcce0c19a8eedec7a98bd291f65b2127a82b9 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 15 Jul 2008 15:49:03 +0000 Subject: [PATCH] Autogenerated HTML docs for v1.5.6.3-350-g6c11a --- RelNotes-1.6.0.txt | 18 +++++++++++++++- git-add.html | 7 +++--- git-add.txt | 5 +++-- git-am.html | 7 +++++- git-am.txt | 6 ++++++ git-branch.html | 27 ++++++++++++----------- git-branch.txt | 27 ++++++++++++----------- git-merge.html | 6 ++++-- git-merge.txt | 4 +++- git-rebase.html | 5 +++-- git-rebase.txt | 3 ++- git-submodule.html | 34 ++++++++++++++++++++--------- git-submodule.txt | 36 +++++++++++++++++++++++-------- gittutorial.html | 52 +++++++++++++++++++++++++++++++------------- gittutorial.txt | 54 ++++++++++++++++++++++++++++++++++------------ 15 files changed, 205 insertions(+), 86 deletions(-) diff --git a/RelNotes-1.6.0.txt b/RelNotes-1.6.0.txt index 9125ee01a..89ea1e938 100644 --- a/RelNotes-1.6.0.txt +++ b/RelNotes-1.6.0.txt @@ -110,6 +110,9 @@ Updates since v1.5.6 * "git-add -i" has a new action 'e/dit' to allow you edit the patch hunk manually. +* git-am records the original tip of the branch in ORIG_HEAD before it + starts applying patches. + * git-apply can handle a patch that touches the same path more than once much better than before. @@ -126,6 +129,14 @@ Updates since v1.5.6 similar to the way git-checkout reports by how many commits your branch is ahead/behind. +* git-branch's --contains option used to always require a commit parameter + to limit the branches with; it now defaults to list branches that + contains HEAD if this parameter is omitted. + +* git-branch's --merged and --no-merged option used to always limit the + branches relative to the HEAD, but they can now take an optional commit + argument that is used in place of HEAD. + * git-bundle can read the revision arguments from the standard input. * git-cherry-pick can replay a root commit now. @@ -144,6 +155,9 @@ Updates since v1.5.6 * fast-export learned to export and import marks file; this can be used to interface with fast-import incrementally. +* git-rebase records the original tip of branch in ORIG_HEAD before it is + rewound. + * "git rerere" can be told to update the index with auto-reused resolution with rerere.autoupdate configuration variable. @@ -152,6 +166,8 @@ Updates since v1.5.6 * git-send-mail can talk not just over SSL but over TLS now. +* git-shortlog honors custom output format specified with "--pretty=format:". + * "git-stash save" learned --keep-index option. This lets you stash away the local changes and bring the changes staged in the index to your working tree for examination and testing. @@ -185,6 +201,6 @@ this release, unless otherwise noted. --- exec >/var/tmp/1 -O=v1.5.6.3-315-g10ce020 +O=v1.5.6.3-350-g499027b echo O=$(git describe refs/heads/master) git shortlog --no-merges $O..refs/heads/master ^refs/heads/maint diff --git a/git-add.html b/git-add.html index ebfafcd8a..643a85d76 100644 --- a/git-add.html +++ b/git-add.html @@ -565,8 +565,9 @@ update "Update>>". When the prompt ends with double >>, you can make more than one selection, concatenated with whitespace or comma. Also you can say ranges. E.g. "2-5 7,9" to choose - 2,3,4,5,7,9 from the list. You can say * to choose - everything. + 2,3,4,5,7,9 from the list. If the second number in a range is + omitted, all remaining patches are taken. E.g. "7-" to choose + 7,8,9 from the list. You can say * to choose everything.

What you chose are then highlighted with *, like this:

@@ -672,7 +673,7 @@ double-quote and control characters will still have problems.

diff --git a/git-add.txt b/git-add.txt index 46dd56c12..3558905a9 100644 --- a/git-add.txt +++ b/git-add.txt @@ -187,8 +187,9 @@ update:: "Update>>". When the prompt ends with double '>>', you can make more than one selection, concatenated with whitespace or comma. Also you can say ranges. E.g. "2-5 7,9" to choose - 2,3,4,5,7,9 from the list. You can say '*' to choose - everything. + 2,3,4,5,7,9 from the list. If the second number in a range is + omitted, all remaining patches are taken. E.g. "7-" to choose + 7,8,9 from the list. You can say '*' to choose everything. + What you chose are then highlighted with '*', like this: diff --git a/git-am.html b/git-am.html index b913f1ad2..4c7a7b7ee 100644 --- a/git-am.html +++ b/git-am.html @@ -553,6 +553,11 @@ hand resolve the conflict in the working directory, and update directory exists, so if you decide to start over from scratch, run rm -f -r .dotest before running the command with mailbox names.

+

Before any patches are applied, ORIG_HEAD is set to the tip of the +current branch. This is useful if you have problems with multiple +commits, like running git am on the wrong branch or an error in the +commits that is more easily fixed by changing the mailbox (e.g. +errors in the "From:" lines).

SEE ALSO

@@ -572,7 +577,7 @@ names.

diff --git a/git-am.txt b/git-am.txt index eeb23b25b..1395c7d98 100644 --- a/git-am.txt +++ b/git-am.txt @@ -145,6 +145,12 @@ directory exists, so if you decide to start over from scratch, run `rm -f -r .dotest` before running the command with mailbox names. +Before any patches are applied, ORIG_HEAD is set to the tip of the +current branch. This is useful if you have problems with multiple +commits, like running 'git am' on the wrong branch or an error in the +commits that is more easily fixed by changing the mailbox (e.g. +errors in the "From:" lines). + SEE ALSO -------- diff --git a/git-branch.html b/git-branch.html index 6365ba299..d0c3c5e56 100644 --- a/git-branch.html +++ b/git-branch.html @@ -321,24 +321,25 @@ git-branch(1) Manual Page

SYNOPSIS

-
git branch [--color | --no-color] [-r | -a] [--merged | --no-merged] - [-v [--abbrev=<length> | --no-abbrev]] - [--contains <commit>] +
git branch [--color | --no-color] [-r | -a] + [-v [--abbrev=<length> | --no-abbrev]] + [(--merged | --no-merged | --contains) [<commit>]] git branch [--track | --no-track] [-l] [-f] <branchname> [<start-point>] git branch (-m | -M) [<oldbranch>] <newbranch> git branch (-d | -D) [-r] <branchname>…

DESCRIPTION

-

With no arguments given a list of existing branches -will be shown, the current branch will be highlighted with an asterisk. -Option -r causes the remote-tracking branches to be listed, -and option -a shows both. -With --contains <commit>, shows only the branches that -contains the named commit (in other words, the branches whose -tip commits are descendant of the named commit). -With --merged, only branches merged into HEAD will be listed, and -with --no-merged only branches not merged into HEAD will be listed.

+

With no arguments, existing branches are listed, the current branch will +be highlighted with an asterisk. Option -r causes the remote-tracking +branches to be listed, and option -a shows both.

+

With --contains, shows only the branches that contains the named commit +(in other words, the branches whose tip commits are descendant of the +named commit). With --merged, only branches merged into the named +commit (i.e. the branches whose tip commits are reachable from the named +commit) will be listed. With --no-merged only branches not merged into +the named commit will be listed. Missing <commit> argument defaults to +HEAD (i.e. the tip of the current branch).

In its second form, a new branch named <branchname> will be created. It will start out with a head equal to the one given as <start-point>. If no <start-point> is given, the branch will be created with a head @@ -664,7 +665,7 @@ but different purposes:

diff --git a/git-branch.txt b/git-branch.txt index b3e62ed01..fc5a4a602 100644 --- a/git-branch.txt +++ b/git-branch.txt @@ -8,24 +8,27 @@ git-branch - List, create, or delete branches SYNOPSIS -------- [verse] -'git branch' [--color | --no-color] [-r | -a] [--merged | --no-merged] - [-v [--abbrev= | --no-abbrev]] - [--contains ] +'git branch' [--color | --no-color] [-r | -a] + [-v [--abbrev= | --no-abbrev]] + [(--merged | --no-merged | --contains) []] 'git branch' [--track | --no-track] [-l] [-f] [] 'git branch' (-m | -M) [] 'git branch' (-d | -D) [-r] ... DESCRIPTION ----------- -With no arguments given a list of existing branches -will be shown, the current branch will be highlighted with an asterisk. -Option `-r` causes the remote-tracking branches to be listed, -and option `-a` shows both. -With `--contains `, shows only the branches that -contains the named commit (in other words, the branches whose -tip commits are descendant of the named commit). -With `--merged`, only branches merged into HEAD will be listed, and -with `--no-merged` only branches not merged into HEAD will be listed. + +With no arguments, existing branches are listed, the current branch will +be highlighted with an asterisk. Option `-r` causes the remote-tracking +branches to be listed, and option `-a` shows both. + +With `--contains`, shows only the branches that contains the named commit +(in other words, the branches whose tip commits are descendant of the +named commit). With `--merged`, only branches merged into the named +commit (i.e. the branches whose tip commits are reachable from the named +commit) will be listed. With `--no-merged` only branches not merged into +the named commit will be listed. Missing argument defaults to +'HEAD' (i.e. the tip of the current branch). In its second form, a new branch named will be created. It will start out with a head equal to the one given as . diff --git a/git-merge.html b/git-merge.html index 90992fcf1..46166165c 100644 --- a/git-merge.html +++ b/git-merge.html @@ -685,7 +685,9 @@ fail. (that is, it may fetch the objects from remote, and it may even update the local branch used to keep track of the remote branch with git pull remote rbranch:lbranch, but your working tree, -.git/HEAD pointer and index file are left intact).

+.git/HEAD pointer and index file are left intact). In addition, +merge always sets .git/ORIG_HEAD to the original state of HEAD so +a problematic merge can be removed by using git reset ORIG_HEAD.

You may have local modifications in the working tree files. In other words, git-diff is allowed to report changes. However, the merge uses your working tree as the working area, @@ -809,7 +811,7 @@ Resolve the conflicts. git diff would report only the

diff --git a/git-merge.txt b/git-merge.txt index 62f99b5f3..019e4ca8f 100644 --- a/git-merge.txt +++ b/git-merge.txt @@ -81,7 +81,9 @@ Otherwise, merge will refuse to do any harm to your repository (that is, it may fetch the objects from remote, and it may even update the local branch used to keep track of the remote branch with `git pull remote rbranch:lbranch`, but your working tree, -`.git/HEAD` pointer and index file are left intact). +`.git/HEAD` pointer and index file are left intact). In addition, +merge always sets `.git/ORIG_HEAD` to the original state of HEAD so +a problematic merge can be removed by using `git reset ORIG_HEAD`. You may have local modifications in the working tree files. In other words, 'git-diff' is allowed to report changes. diff --git a/git-rebase.html b/git-rebase.html index a2905d502..04fd39f3b 100644 --- a/git-rebase.html +++ b/git-rebase.html @@ -337,7 +337,8 @@ in <upstream> are saved to a temporary area. This is the same set of commits that would be shown by git log <upstream>..HEAD.

The current branch is reset to <upstream>, or <newbase> if the --onto option was supplied. This has the exact same effect as -git reset --hard <upstream> (or <newbase>).

+git reset --hard <upstream> (or <newbase>). ORIG_HEAD is set +to point at the tip of the branch before the reset.

The commits that were previously saved into the temporary area are then reapplied to the current branch, one by one, in order. Note that any commits in HEAD which introduce the same textual changes as a commit @@ -906,7 +907,7 @@ Johannes E. Schindelin <johannes.schindelin@gmx.de>

diff --git a/git-rebase.txt b/git-rebase.txt index f3459c7de..e30f6a698 100644 --- a/git-rebase.txt +++ b/git-rebase.txt @@ -26,7 +26,8 @@ of commits that would be shown by `git log ..HEAD`. The current branch is reset to , or if the --onto option was supplied. This has the exact same effect as -`git reset --hard ` (or ). +`git reset --hard ` (or ). ORIG_HEAD is set +to point at the tip of the branch before the reset. The commits that were previously saved into the temporary area are then reapplied to the current branch, one by one, in order. Note that diff --git a/git-submodule.html b/git-submodule.html index a222a7e4f..721a90b09 100644 --- a/git-submodule.html +++ b/git-submodule.html @@ -321,7 +321,7 @@ git-submodule(1) Manual Page

SYNOPSIS

-
git submodule [--quiet] add [-b branch] [--] <repository> [<path>] +
git submodule [--quiet] add [-b branch] [--] <repository> <path> git submodule [--quiet] status [--cached] [--] [<path>…] git submodule [--quiet] init [--] [<path>…] git submodule [--quiet] update [--init] [--] [<path>…] @@ -336,15 +336,28 @@ add

Add the given repository as a submodule at the given path - to the changeset to be committed next. If path is a valid - repository within the project, it is added as is. Otherwise, - repository is cloned at the specified path. path is added to the - changeset and registered in .gitmodules. If no path is - specified, the path is deduced from the repository specification. - If the repository url begins with ./ or ../, it is stored as - given but resolved as a relative path from the main project's - url when cloning. + to the changeset to be committed next to the current + project: the current project is termed termed the "superproject".

+

This requires two arguments: <repository> and <path>.

+

<repository> is the URL of the new submodule's origin repository. +This may be either an absolute URL, or (if it begins with ./ +or ../), the location relative to the superproject's origin +repository.

+

<path> is the relative location for the cloned submodule to +exist in the superproject. If <path> does not exist, then the +submodule is created by cloning from the named URL. If <path> does +exist and is already a valid git repository, then this is added +to the changeset without cloning. This second form is provided +to ease creating a new submodule from scratch, and presumes +the user will later push the submodule to the given URL.

+

In either case, the given URL is recorded into .gitmodules for +use by subsequent users cloning the superproject. If the URL is +given relative to the superproject's repository, the presumption +is the superproject and submodule repositories will be kept +together in the same relative location, and only the +superproject's URL need be provided: git-submodule will correctly +locate the submodule using the relative URL in .gitmodules.

status @@ -454,6 +467,7 @@ summary

Path to submodule(s). When specified this will restrict the command to only operate on the submodules found at the specified paths. + (This argument is required with add).

@@ -476,7 +490,7 @@ for details.

diff --git a/git-submodule.txt b/git-submodule.txt index 105fc2dcd..76702a0a5 100644 --- a/git-submodule.txt +++ b/git-submodule.txt @@ -9,7 +9,7 @@ git-submodule - Initialize, update or inspect submodules SYNOPSIS -------- [verse] -'git submodule' [--quiet] add [-b branch] [--] [] +'git submodule' [--quiet] add [-b branch] [--] 'git submodule' [--quiet] status [--cached] [--] [...] 'git submodule' [--quiet] init [--] [...] 'git submodule' [--quiet] update [--init] [--] [...] @@ -20,14 +20,31 @@ COMMANDS -------- add:: Add the given repository as a submodule at the given path - to the changeset to be committed next. If path is a valid - repository within the project, it is added as is. Otherwise, - repository is cloned at the specified path. path is added to the - changeset and registered in .gitmodules. If no path is - specified, the path is deduced from the repository specification. - If the repository url begins with ./ or ../, it is stored as - given but resolved as a relative path from the main project's - url when cloning. + to the changeset to be committed next to the current + project: the current project is termed termed the "superproject". ++ +This requires two arguments: and . ++ + is the URL of the new submodule's origin repository. +This may be either an absolute URL, or (if it begins with ./ +or ../), the location relative to the superproject's origin +repository. ++ + is the relative location for the cloned submodule to +exist in the superproject. If does not exist, then the +submodule is created by cloning from the named URL. If does +exist and is already a valid git repository, then this is added +to the changeset without cloning. This second form is provided +to ease creating a new submodule from scratch, and presumes +the user will later push the submodule to the given URL. ++ +In either case, the given URL is recorded into .gitmodules for +use by subsequent users cloning the superproject. If the URL is +given relative to the superproject's repository, the presumption +is the superproject and submodule repositories will be kept +together in the same relative location, and only the +superproject's URL need be provided: git-submodule will correctly +locate the submodule using the relative URL in .gitmodules. status:: Show the status of the submodules. This will print the SHA-1 of the @@ -85,6 +102,7 @@ OPTIONS :: Path to submodule(s). When specified this will restrict the command to only operate on the submodules found at the specified paths. + (This argument is required with add). FILES ----- diff --git a/gittutorial.html b/gittutorial.html index b77223e5f..8651c5bc6 100644 --- a/gittutorial.html +++ b/gittutorial.html @@ -546,7 +546,7 @@ same machine, wants to contribute.

Bob begins with:

-
$ git clone /home/alice/project myrepo
+
bob$ git clone /home/alice/project myrepo

This creates a new directory "myrepo" containing a clone of Alice's repository. The clone is on an equal footing with the original @@ -555,15 +555,15 @@ project, possessing its own copy of the original project's history.

(edit files)
-$ git commit -a
+bob$ git commit -a
 (repeat as necessary)

When he's ready, he tells Alice to pull changes from the repository at /home/bob/myrepo. She does this with:

-
$ cd /home/alice/project
-$ git pull /home/bob/myrepo master
+
alice$ cd /home/alice/project
+alice$ git pull /home/bob/myrepo master

This merges the changes from Bob's "master" branch into Alice's current branch. If Alice has made her own changes in the meantime, @@ -572,20 +572,42 @@ then she may need to manually fix any conflicts. (Note that the is the default.)

The "pull" command thus performs two operations: it fetches changes from a remote branch, then merges them into the current branch.

+

Note that in general, Alice would want her local changes committed before +initiating this "pull". If Bob's work conflicts with what Alice did since +their histories forked, Alice will use her working tree and the index to +resolve conflicts, and existing local changes will interfere with the +conflict resolution process (git will still perform the fetch but will +refuse to merge --- Alice will have to get rid of her local changes in +some way and pull again when this happens).

+

Alice can peek at what Bob did without merging first, using the "fetch" +command; this allows Alice to inspect what Bob did, using a special +symbol "FETCH_HEAD", in order to determine if he has anything worth +pulling, like this:

+
+
+
alice$ git fetch /home/bob/myrepo master
+alice$ git log -p ..FETCH_HEAD
+
+

This operation is safe even if Alice has uncommitted local changes.

+

After inspecting what Bob did, if there is nothing urgent, Alice may +decide to continue working without pulling from Bob. If Bob's history +does have something Alice would immediately need, Alice may choose to +stash her work-in-progress first, do a "pull", and then finally unstash +her work-in-progress on top of the resulting history.

When you are working in a small closely knit group, it is not unusual to interact with the same repository over and over again. By defining remote repository shorthand, you can make it easier:

-
$ git remote add bob /home/bob/myrepo
+
alice$ git remote add bob /home/bob/myrepo
-

With this, Alice can perform the first operation alone using the +

With this, Alice can perform the first part of the "pull" operation alone using the git-fetch command without merging them with her own branch, using:

-
$ git fetch bob
+
alice$ git fetch bob

Unlike the longhand form, when Alice fetches from Bob using a remote repository shorthand set up with git-remote, what was @@ -593,7 +615,7 @@ fetched is stored in a remote tracking branch, in this case bob/master. So after this:

-
$ git log -p master..bob/master
+
alice$ git log -p master..bob/master

shows a list of all the changes that Bob made since he branched from Alice's master branch.

@@ -601,20 +623,20 @@ Alice's master branch.

could merge the changes into her master branch:

-
$ git merge bob/master
+
alice$ git merge bob/master

This merge can also be done by pulling from her own remote tracking branch, like this:

-
$ git pull . remotes/bob/master
+
alice$ git pull . remotes/bob/master

Note that git pull always merges into the current branch, regardless of what else is given on the command line.

Later, Bob can update his repo with Alice's latest changes using

-
$ git pull
+
bob$ git pull

Note that he doesn't need to give the path to Alice's repository; when Bob cloned Alice's repository, git stored the location of her @@ -622,7 +644,7 @@ repository in the repository configuration, and that location is used for pulls:

-
$ git config --get remote.origin.url
+
bob$ git config --get remote.origin.url
 /home/alice/project

(The complete configuration created by git-clone is visible using @@ -632,14 +654,14 @@ explains the meaning of each option.)

name "origin/master":

-
$ git branch -r
+
bob$ git branch -r
   origin/master

If Bob later decides to work from a different host, he can still perform clones and pulls using the ssh protocol:

-
$ git clone alice.org:/home/alice/project myrepo
+
bob$ git clone alice.org:/home/alice/project myrepo

Alternatively, git has a native protocol, or can use rsync or http; see git-pull(1) for details.

@@ -859,7 +881,7 @@ digressions that may be interesting at this point are:

diff --git a/gittutorial.txt b/gittutorial.txt index e71b56117..48d1454a9 100644 --- a/gittutorial.txt +++ b/gittutorial.txt @@ -274,7 +274,7 @@ same machine, wants to contribute. Bob begins with: ------------------------------------------------ -$ git clone /home/alice/project myrepo +bob$ git clone /home/alice/project myrepo ------------------------------------------------ This creates a new directory "myrepo" containing a clone of Alice's @@ -285,7 +285,7 @@ Bob then makes some changes and commits them: ------------------------------------------------ (edit files) -$ git commit -a +bob$ git commit -a (repeat as necessary) ------------------------------------------------ @@ -293,8 +293,8 @@ When he's ready, he tells Alice to pull changes from the repository at /home/bob/myrepo. She does this with: ------------------------------------------------ -$ cd /home/alice/project -$ git pull /home/bob/myrepo master +alice$ cd /home/alice/project +alice$ git pull /home/bob/myrepo master ------------------------------------------------ This merges the changes from Bob's "master" branch into Alice's @@ -306,21 +306,47 @@ is the default.) The "pull" command thus performs two operations: it fetches changes from a remote branch, then merges them into the current branch. +Note that in general, Alice would want her local changes committed before +initiating this "pull". If Bob's work conflicts with what Alice did since +their histories forked, Alice will use her working tree and the index to +resolve conflicts, and existing local changes will interfere with the +conflict resolution process (git will still perform the fetch but will +refuse to merge --- Alice will have to get rid of her local changes in +some way and pull again when this happens). + +Alice can peek at what Bob did without merging first, using the "fetch" +command; this allows Alice to inspect what Bob did, using a special +symbol "FETCH_HEAD", in order to determine if he has anything worth +pulling, like this: + +------------------------------------------------ +alice$ git fetch /home/bob/myrepo master +alice$ git log -p ..FETCH_HEAD +------------------------------------------------ + +This operation is safe even if Alice has uncommitted local changes. + +After inspecting what Bob did, if there is nothing urgent, Alice may +decide to continue working without pulling from Bob. If Bob's history +does have something Alice would immediately need, Alice may choose to +stash her work-in-progress first, do a "pull", and then finally unstash +her work-in-progress on top of the resulting history. + When you are working in a small closely knit group, it is not unusual to interact with the same repository over and over again. By defining 'remote' repository shorthand, you can make it easier: ------------------------------------------------ -$ git remote add bob /home/bob/myrepo +alice$ git remote add bob /home/bob/myrepo ------------------------------------------------ -With this, Alice can perform the first operation alone using the +With this, Alice can perform the first part of the "pull" operation alone using the 'git-fetch' command without merging them with her own branch, using: ------------------------------------- -$ git fetch bob +alice$ git fetch bob ------------------------------------- Unlike the longhand form, when Alice fetches from Bob using a @@ -329,7 +355,7 @@ fetched is stored in a remote tracking branch, in this case `bob/master`. So after this: ------------------------------------- -$ git log -p master..bob/master +alice$ git log -p master..bob/master ------------------------------------- shows a list of all the changes that Bob made since he branched from @@ -339,14 +365,14 @@ After examining those changes, Alice could merge the changes into her master branch: ------------------------------------- -$ git merge bob/master +alice$ git merge bob/master ------------------------------------- This `merge` can also be done by 'pulling from her own remote tracking branch', like this: ------------------------------------- -$ git pull . remotes/bob/master +alice$ git pull . remotes/bob/master ------------------------------------- Note that git pull always merges into the current branch, @@ -355,7 +381,7 @@ regardless of what else is given on the command line. Later, Bob can update his repo with Alice's latest changes using ------------------------------------- -$ git pull +bob$ git pull ------------------------------------- Note that he doesn't need to give the path to Alice's repository; @@ -364,7 +390,7 @@ repository in the repository configuration, and that location is used for pulls: ------------------------------------- -$ git config --get remote.origin.url +bob$ git config --get remote.origin.url /home/alice/project ------------------------------------- @@ -376,7 +402,7 @@ Git also keeps a pristine copy of Alice's master branch under the name "origin/master": ------------------------------------- -$ git branch -r +bob$ git branch -r origin/master ------------------------------------- @@ -384,7 +410,7 @@ If Bob later decides to work from a different host, he can still perform clones and pulls using the ssh protocol: ------------------------------------- -$ git clone alice.org:/home/alice/project myrepo +bob$ git clone alice.org:/home/alice/project myrepo ------------------------------------- Alternatively, git has a native protocol, or can use rsync or http; -- 2.26.2