blob: a0727d7759aefef4dede0fb40008b7b1ee957b2d [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-clone(1)
2============
3
4NAME
5----
Junio C Hamano4ec06712007-06-09 20:39:336git-clone - Clone a repository into a new directory
Junio C Hamano1a4e8412005-12-27 08:17:237
8
9SYNOPSIS
10--------
Junio C Hamano235a91e2006-01-07 01:13:5811[verse]
Junio C Hamanofce7c7e2008-07-02 03:06:3812'git clone' [--template=<template_directory>]
Junio C Hamanoaf1987f2008-08-03 07:58:1913 [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
Junio C Hamano2bd8a742009-12-01 21:16:5914 [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
Junio C Hamanof93530e2011-05-25 23:59:5915 [--separate-git-dir <git dir>]
Junio C Hamanob5be0522012-01-29 22:20:1916 [--depth <depth>] [--[no-]single-branch]
Junio C Hamano3d1b5a12013-05-17 23:34:0217 [--recursive | --recurse-submodules] [--] <repository>
Junio C Hamanoed69a742010-12-01 03:09:2318 [<directory>]
Junio C Hamano1a4e8412005-12-27 08:17:2319
20DESCRIPTION
21-----------
Junio C Hamano1a4e8412005-12-27 08:17:2322
Junio C Hamano5102d9a2006-12-08 07:23:4623Clones a repository into a newly created directory, creates
24remote-tracking branches for each branch in the cloned repository
Junio C Hamanoc0e55e72009-10-10 00:56:2925(visible using `git branch -r`), and creates and checks out an
26initial branch that is forked from the cloned repository's
27currently active branch.
Junio C Hamano1a4e8412005-12-27 08:17:2328
Junio C Hamano5102d9a2006-12-08 07:23:4629After the clone, a plain `git fetch` without arguments will update
30all the remote-tracking branches, and a `git pull` without
31arguments will in addition merge the remote master branch into the
Junio C Hamano6a8a8482012-10-01 20:59:4132current master branch, if any (this is untrue when "--single-branch"
33is given; see below).
Junio C Hamano1a4e8412005-12-27 08:17:2334
Junio C Hamano5102d9a2006-12-08 07:23:4635This default configuration is achieved by creating references to
Junio C Hamano4fdccb22010-02-19 09:58:1436the remote branch heads under `refs/remotes/origin` and
Junio C Hamano5102d9a2006-12-08 07:23:4637by initializing `remote.origin.url` and `remote.origin.fetch`
38configuration variables.
Junio C Hamano1a4e8412005-12-27 08:17:2339
Junio C Hamanob288d9e2007-01-02 00:04:1540
Junio C Hamano1a4e8412005-12-27 08:17:2341OPTIONS
42-------
43--local::
44-l::
45When the repository to clone from is on a local machine,
Junio C Hamano076ffcc2013-02-06 05:13:2146this flag bypasses the normal "Git aware" transport
Junio C Hamano1a4e8412005-12-27 08:17:2347mechanism and clones the repository by making a copy of
48HEAD and everything under objects and refs directories.
Junio C Hamanob1d6e882007-08-11 08:30:1649The files under `.git/objects/` directory are hardlinked
Junio C Hamano7f2b3cb2012-06-22 22:42:3950to save space when possible.
51+
52If the repository is specified as a local path (e.g., `/path/to/repo`),
53this is the default, and --local is essentially a no-op. If the
54repository is specified as a URL, then this flag is ignored (and we
55never use the local optimizations). Specifying `--no-local` will
56override the default when `/path/to/repo` is given, using the regular
Junio C Hamano076ffcc2013-02-06 05:13:2157Git transport instead.
Junio C Hamano7f2b3cb2012-06-22 22:42:3958+
59To force copying instead of hardlinking (which may be desirable if you
60are trying to make a back-up of your repository), but still avoid the
Junio C Hamano076ffcc2013-02-06 05:13:2161usual "Git aware" transport mechanism, `--no-hardlinks` can be used.
Junio C Hamanob1d6e882007-08-11 08:30:1662
63--no-hardlinks::
64Optimize the cloning process from a repository on a
65local filesystem by copying files under `.git/objects`
66directory.
Junio C Hamano1a4e8412005-12-27 08:17:2367
68--shared::
69-s::
70When the repository to clone is on the local machine,
71instead of using hard links, automatically setup
Junio C Hamano621e1232009-10-26 05:16:4772`.git/objects/info/alternates` to share the objects
Junio C Hamano1a4e8412005-12-27 08:17:2373with the source repository. The resulting repository
74starts out without any object of its own.
Junio C Hamanoefe3c632008-02-14 00:51:3175+
76*NOTE*: this is a possibly dangerous operation; do *not* use
77it unless you understand what it does. If you clone your
Junio C Hamanoa9aee782008-04-23 16:09:2078repository using this option and then delete branches (or use any
Junio C Hamano076ffcc2013-02-06 05:13:2179other Git command that makes any existing commit unreferenced) in the
Junio C Hamanoa9aee782008-04-23 16:09:2080source repository, some objects may become unreferenced (or dangling).
Junio C Hamano076ffcc2013-02-06 05:13:2181These objects may be removed by normal Git operations (such as `git commit`)
Junio C Hamanofce7c7e2008-07-02 03:06:3882which automatically call `git gc --auto`. (See linkgit:git-gc[1].)
83If these objects are removed and were referenced by the cloned repository,
84then the cloned repository will become corrupt.
Junio C Hamanob9376922009-08-19 00:09:1385+
86Note that running `git repack` without the `-l` option in a repository
87cloned with `-s` will copy objects from the source repository into a pack
88in the cloned repository, removing the disk space savings of `clone -s`.
89It is safe, however, to run `git gc`, which uses the `-l` option by
90default.
91+
92If you want to break the dependency of a repository cloned with `-s` on
93its source repository, you can simply run `git repack -a` to copy all
94objects from the source repository into a pack in the cloned repository.
Junio C Hamano1a4e8412005-12-27 08:17:2395
Junio C Hamanof50bfec2006-04-19 09:44:1296--reference <repository>::
Junio C Hamano35b47ca2009-09-03 18:11:5497If the reference repository is on the local machine,
Junio C Hamano621e1232009-10-26 05:16:4798automatically setup `.git/objects/info/alternates` to
Junio C Hamanof50bfec2006-04-19 09:44:1299obtain objects from the reference repository. Using
100an already existing repository as an alternate will
Junio C Hamano250f03e2007-09-10 01:33:28101require fewer objects to be copied from the repository
Junio C Hamanof50bfec2006-04-19 09:44:12102being cloned, reducing network and local storage costs.
Junio C Hamanoa9aee782008-04-23 16:09:20103+
Junio C Hamano621e1232009-10-26 05:16:47104*NOTE*: see the NOTE for the `--shared` option.
Junio C Hamanof50bfec2006-04-19 09:44:12105
Junio C Hamano1a4e8412005-12-27 08:17:23106--quiet::
107-q::
Junio C Hamano6ce6b6c2010-01-18 01:25:50108Operate quietly. Progress is not reported to the standard
109error stream. This flag is also passed to the `rsync'
Junio C Hamano3db8b412008-07-26 06:45:59110command when given.
Junio C Hamano1a4e8412005-12-27 08:17:23111
Junio C Hamano7d06a8a2008-10-20 05:42:33112--verbose::
113-v::
Junio C Hamanoea90ab32010-03-15 20:32:55114Run verbosely. Does not affect the reporting of progress status
115to the standard error stream.
Junio C Hamano6ce6b6c2010-01-18 01:25:50116
117--progress::
118Progress status is reported on the standard error stream
119by default when it is attached to a terminal, unless -q
120is specified. This flag forces progress status even if the
121standard error stream is not directed to a terminal.
Junio C Hamano7d06a8a2008-10-20 05:42:33122
Junio C Hamano1e6e0062007-07-13 05:33:25123--no-checkout::
Junio C Hamano1a4e8412005-12-27 08:17:23124-n::
125No checkout of HEAD is performed after the clone is complete.
126
Junio C Hamanoe663a7a2006-01-25 12:37:28127--bare::
Junio C Hamano076ffcc2013-02-06 05:13:21128Make a 'bare' Git repository. That is, instead of
Junio C Hamano38064d52006-01-15 10:13:49129creating `<directory>` and placing the administrative
130files in `<directory>/.git`, make the `<directory>`
Junio C Hamano9f292e72006-11-24 11:37:29131itself the `$GIT_DIR`. This obviously implies the `-n`
132because there is nowhere to check out the working tree.
133Also the branch heads at the remote are copied directly
134to corresponding local branch heads, without mapping
135them to `refs/remotes/origin/`. When this option is
Junio C Hamanod3361ad2007-01-01 03:20:24136used, neither remote-tracking branches nor the related
137configuration variables are created.
Junio C Hamano38064d52006-01-15 10:13:49138
Junio C Hamanoaf1987f2008-08-03 07:58:19139--mirror::
Junio C Hamano657fd8a2010-10-07 00:01:24140Set up a mirror of the source repository. This implies `--bare`.
141Compared to `--bare`, `--mirror` not only maps local branches of the
142source to local branches of the target, it maps all refs (including
Junio C Hamano97bcb482010-11-25 03:16:07143remote-tracking branches, notes etc.) and sets up a refspec configuration such
Junio C Hamano657fd8a2010-10-07 00:01:24144that all these refs are overwritten by a `git remote update` in the
145target repository.
Junio C Hamanoaf1987f2008-08-03 07:58:19146
Junio C Hamanodcc22ee2006-11-03 02:40:13147--origin <name>::
Junio C Hamano1a4e8412005-12-27 08:17:23148-o <name>::
Junio C Hamano621e1232009-10-26 05:16:47149Instead of using the remote name `origin` to keep track
150of the upstream repository, use `<name>`.
Junio C Hamano1a4e8412005-12-27 08:17:23151
Junio C Hamanoc28068f2009-09-08 00:55:23152--branch <name>::
153-b <name>::
154Instead of pointing the newly created HEAD to the branch pointed
Junio C Hamano621e1232009-10-26 05:16:47155to by the cloned repository's HEAD, point to `<name>` branch
Junio C Hamano6a8a8482012-10-01 20:59:41156instead. In a non-bare repository, this is the branch that will
157be checked out.
158`--branch` can also take tags and detaches the HEAD at that commit
159in the resulting repository.
Junio C Hamanoc28068f2009-09-08 00:55:23160
Junio C Hamano1a4e8412005-12-27 08:17:23161--upload-pack <upload-pack>::
162-u <upload-pack>::
Junio C Hamano3db8b412008-07-26 06:45:59163When given, and the repository to clone from is accessed
164via ssh, this specifies a non-default path for the command
Junio C Hamano1a4e8412005-12-27 08:17:23165run on the other end.
166
Junio C Hamanof31d9f52006-05-28 20:58:09167--template=<template_directory>::
168Specify the directory from which templates will be used;
Junio C Hamanocaa712a2010-03-11 01:17:35169(See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
Junio C Hamanof31d9f52006-05-28 20:58:09170
Junio C Hamano708376e2011-07-19 20:02:13171--config <key>=<value>::
172-c <key>=<value>::
173Set a configuration variable in the newly-created repository;
174this takes effect immediately after the repository is
175initialized, but before the remote history is fetched or any
176files checked out. The key is in the same format as expected by
177linkgit:git-config[1] (e.g., `core.eol=true`). If multiple
178values are given for the same key, each value will be written to
179the config file. This makes it safe, for example, to add
180additional fetch refspecs to the origin remote.
181
Junio C Hamano0bbd4672007-02-20 04:52:14182--depth <depth>::
Junio C Hamanob288d9e2007-01-02 00:04:15183Create a 'shallow' clone with a history truncated to the
Junio C Hamano1c708832007-11-02 02:47:50184specified number of revisions. A shallow repository has a
Junio C Hamanob288d9e2007-01-02 00:04:15185number of limitations (you cannot clone or fetch from
186it, nor push from nor into it), but is adequate if you
Junio C Hamano1c708832007-11-02 02:47:50187are only interested in the recent history of a large project
188with a long history, and would want to send in fixes
Junio C Hamanob288d9e2007-01-02 00:04:15189as patches.
190
Junio C Hamano3d1b5a12013-05-17 23:34:02191--[no-]single-branch::
Junio C Hamanob5be0522012-01-29 22:20:19192Clone only the history leading to the tip of a single branch,
193either specified by the `--branch` option or the primary
194branch remote's `HEAD` points at. When creating a shallow
195clone with the `--depth` option, this is the default, unless
196`--no-single-branch` is given to fetch the histories near the
197tips of all branches.
Junio C Hamano6a8a8482012-10-01 20:59:41198Further fetches into the resulting repository will only update the
Junio C Hamanoa1295452012-11-13 22:32:04199remote-tracking branch for the branch this option was used for the
Junio C Hamano6a8a8482012-10-01 20:59:41200initial cloning. If the HEAD at the remote did not point at any
Junio C Hamanoa1295452012-11-13 22:32:04201branch when `--single-branch` clone was made, no remote-tracking
Junio C Hamano6a8a8482012-10-01 20:59:41202branch is created.
Junio C Hamanob5be0522012-01-29 22:20:19203
Junio C Hamano0e066b92009-08-28 01:08:41204--recursive::
Junio C Hamanoed69a742010-12-01 03:09:23205--recurse-submodules::
Junio C Hamano0e066b92009-08-28 01:08:41206After the clone is created, initialize all submodules within,
207using their default settings. This is equivalent to running
Junio C Hamano621e1232009-10-26 05:16:47208`git submodule update --init --recursive` immediately after
Junio C Hamano0e066b92009-08-28 01:08:41209the clone is finished. This option is ignored if the cloned
210repository does not have a worktree/checkout (i.e. if any of
211`--no-checkout`/`-n`, `--bare`, or `--mirror` is given)
212
Junio C Hamanoa03ac862011-04-02 04:32:29213--separate-git-dir=<git dir>::
214Instead of placing the cloned repository where it is supposed
215to be, place the cloned repository at the specified directory,
Junio C Hamano076ffcc2013-02-06 05:13:21216then make a filesytem-agnostic Git symbolic link to there.
217The result is Git repository can be separated from working
Junio C Hamanoa03ac862011-04-02 04:32:29218tree.
219
220
Junio C Hamano1a4e8412005-12-27 08:17:23221<repository>::
Junio C Hamano330aae62007-07-06 17:01:58222The (possibly remote) repository to clone from. See the
223<<URLS,URLS>> section below for more information on specifying
224repositories.
Junio C Hamano1a4e8412005-12-27 08:17:23225
226<directory>::
Junio C Hamano8db10ef2006-06-09 04:31:57227The name of a new directory to clone into. The "humanish"
Junio C Hamano1a4e8412005-12-27 08:17:23228part of the source repository is used if no directory is
Junio C Hamano621e1232009-10-26 05:16:47229explicitly given (`repo` for `/path/to/repo.git` and `foo`
230for `host.xz:foo/.git`). Cloning into an existing directory
Junio C Hamano89bdb3b2009-05-10 06:48:14231is only allowed if the directory is empty.
Junio C Hamano1a4e8412005-12-27 08:17:23232
Junio C Hamano63777e22007-11-17 20:52:16233:git-clone: 1
Junio C Hamano330aae62007-07-06 17:01:58234include::urls.txt[]
235
Junio C Hamano1a4e8412005-12-27 08:17:23236Examples
Junio C Hamano1bb569e2006-05-05 23:14:25237--------
Junio C Hamano1a4e8412005-12-27 08:17:23238
Junio C Hamano9ccf6642010-03-22 01:47:35239* Clone from upstream:
Junio C Hamano1a4e8412005-12-27 08:17:23240+
241------------
242$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
243$ cd my2.6
244$ make
245------------
246
247
Junio C Hamano9ccf6642010-03-22 01:47:35248* Make a local clone that borrows from the current directory, without checking things out:
Junio C Hamano1a4e8412005-12-27 08:17:23249+
250------------
251$ git clone -l -s -n . ../copy
Junio C Hamano8638c922007-05-12 20:50:08252$ cd ../copy
Junio C Hamano1a4e8412005-12-27 08:17:23253$ git show-branch
254------------
255
Junio C Hamano38064d52006-01-15 10:13:49256
Junio C Hamano9ccf6642010-03-22 01:47:35257* Clone from upstream while borrowing from an existing local directory:
Junio C Hamanof50bfec2006-04-19 09:44:12258+
259------------
260$ git clone --reference my2.6 \
261git://git.kernel.org/pub/scm/.../linux-2.7 \
262my2.7
263$ cd my2.7
264------------
265
266
Junio C Hamano9ccf6642010-03-22 01:47:35267* Create a bare repository to publish your changes to the public:
Junio C Hamano38064d52006-01-15 10:13:49268+
269------------
Junio C Hamanoe663a7a2006-01-25 12:37:28270$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
Junio C Hamano38064d52006-01-15 10:13:49271------------
272
273
Junio C Hamano9ccf6642010-03-22 01:47:35274* Create a repository on the kernel.org machine that borrows from Linus:
Junio C Hamano38064d52006-01-15 10:13:49275+
276------------
Junio C Hamanoe663a7a2006-01-25 12:37:28277$ git clone --bare -l -s /pub/scm/.../torvalds/linux-2.6.git \
Junio C Hamano38064d52006-01-15 10:13:49278 /pub/scm/.../me/subsys-2.6.git
279------------
280
Junio C Hamano1a4e8412005-12-27 08:17:23281GIT
282---
Junio C Hamanof7c042d2008-06-06 22:50:53283Part of the linkgit:git[1] suite