blob: 0363d0039b274093e6d230a83fcf99c3ff6700d8 [file] [log] [blame]
Junio C Hamano215a7ad2005-09-07 17:26:23 -07001git-clone(1)
2============
Junio C Hamano6ec311d2005-07-13 20:25:54 -07003
4NAME
5----
william pursell29cf5e12007-06-09 16:44:12 +01006git-clone - Clone a repository into a new directory
Junio C Hamano6ec311d2005-07-13 20:25:54 -07007
8
9SYNOPSIS
10--------
Jonas Fonseca353ce812005-12-31 18:37:15 +010011[verse]
Jonathan Niederb1889c32008-06-30 01:09:04 -050012'git clone' [--template=<template_directory>]
Johannes Schindelinbc699af2008-08-02 21:38:56 +020013 [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
David Soria Parradb9bc002009-11-30 14:27:52 +010014 [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
Nguyen Thai Ngoc Duy09ffc702011-05-24 23:40:32 +070015 [--separate-git-dir <git dir>]
Nguyễn Thái Ngọc Duy3e6e0ed2012-01-07 21:45:59 +070016 [--depth <depth>] [--[no-]single-branch]
Felipe Contreras0460ed22013-05-08 20:16:55 -050017 [--recursive | --recurse-submodules] [--] <repository>
Jens Lehmannccdd3da2010-11-04 21:27:12 +010018 [<directory>]
Junio C Hamano6ec311d2005-07-13 20:25:54 -070019
20DESCRIPTION
21-----------
Junio C Hamano46071662005-11-05 22:26:52 -080022
J. Bruce Fieldsdb9819a2006-12-08 01:27:21 -050023Clones a repository into a newly created directory, creates
24remote-tracking branches for each branch in the cloned repository
Jonathan Nieder33405be2009-10-09 18:07:39 -050025(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 Hamano46071662005-11-05 22:26:52 -080028
J. Bruce Fieldsdb9819a2006-12-08 01:27:21 -050029After 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
Ralf Thielow31b808a2012-09-20 20:04:08 +020032current master branch, if any (this is untrue when "--single-branch"
33is given; see below).
Junio C Hamano46071662005-11-05 22:26:52 -080034
J. Bruce Fieldsdb9819a2006-12-08 01:27:21 -050035This default configuration is achieved by creating references to
Jeff Kingcc1b8d82010-02-17 20:16:20 -050036the remote branch heads under `refs/remotes/origin` and
J. Bruce Fieldsdb9819a2006-12-08 01:27:21 -050037by initializing `remote.origin.url` and `remote.origin.fetch`
38configuration variables.
Junio C Hamano6ec311d2005-07-13 20:25:54 -070039
Junio C Hamanof4bf2182007-01-01 15:08:06 -080040
Junio C Hamano6ec311d2005-07-13 20:25:54 -070041OPTIONS
42-------
Eric W. Biedermana2775c22005-10-02 13:42:57 -060043--local::
Junio C Hamano6ec311d2005-07-13 20:25:54 -070044-l::
45 When the repository to clone from is on a local machine,
Thomas Ackermann2de9b712013-01-21 20:17:53 +010046 this flag bypasses the normal "Git aware" transport
Junio C Hamano6ec311d2005-07-13 20:25:54 -070047 mechanism and clones the repository by making a copy of
48 HEAD and everything under objects and refs directories.
Junio C Hamano3d5c4182007-08-01 23:42:36 -070049 The files under `.git/objects/` directory are hardlinked
Jeff King9197a102012-05-30 07:09:08 -040050 to 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
Jeff King189260b2012-05-30 07:10:16 -040055never use the local optimizations). Specifying `--no-local` will
56override the default when `/path/to/repo` is given, using the regular
Thomas Ackermann2de9b712013-01-21 20:17:53 +010057Git transport instead.
Junio C Hamano3d5c4182007-08-01 23:42:36 -070058
59--no-hardlinks::
Albert L. Lash, IV897e3e42014-02-08 15:41:36 -050060 Force the cloning process from a repository on a local
61 filesystem to copy the files under the `.git/objects`
62 directory instead of using hardlinks. This may be desirable
63 if you are trying to make a back-up of your repository.
Junio C Hamano6ec311d2005-07-13 20:25:54 -070064
Eric W. Biedermana2775c22005-10-02 13:42:57 -060065--shared::
66-s::
67 When the repository to clone is on the local machine,
Junio C Hamano46071662005-11-05 22:26:52 -080068 instead of using hard links, automatically setup
Björn Gustavsson550c66f2009-10-20 22:38:38 +020069 `.git/objects/info/alternates` to share the objects
Junio C Hamano46071662005-11-05 22:26:52 -080070 with the source repository. The resulting repository
71 starts out without any object of its own.
Miklos Vajna84668872008-02-12 01:12:57 +010072+
73*NOTE*: this is a possibly dangerous operation; do *not* use
74it unless you understand what it does. If you clone your
Brandon Casey2498a1a2008-04-03 13:26:13 -050075repository using this option and then delete branches (or use any
Thomas Ackermann2de9b712013-01-21 20:17:53 +010076other Git command that makes any existing commit unreferenced) in the
Brandon Casey2498a1a2008-04-03 13:26:13 -050077source repository, some objects may become unreferenced (or dangling).
Thomas Ackermann2de9b712013-01-21 20:17:53 +010078These objects may be removed by normal Git operations (such as `git commit`)
Jonathan Nieder483bc4f2008-06-30 13:56:34 -050079which automatically call `git gc --auto`. (See linkgit:git-gc[1].)
80If these objects are removed and were referenced by the cloned repository,
81then the cloned repository will become corrupt.
Jeff King13354f52009-08-17 02:19:17 -040082+
83Note that running `git repack` without the `-l` option in a repository
84cloned with `-s` will copy objects from the source repository into a pack
85in the cloned repository, removing the disk space savings of `clone -s`.
86It is safe, however, to run `git gc`, which uses the `-l` option by
87default.
88+
89If you want to break the dependency of a repository cloned with `-s` on
90its source repository, you can simply run `git repack -a` to copy all
91objects from the source repository into a pack in the cloned repository.
Eric W. Biedermana2775c22005-10-02 13:42:57 -060092
Shawn Pearce23edecb2006-04-18 20:19:48 -040093--reference <repository>::
Miklos Vajna40592372009-09-03 13:24:16 +020094 If the reference repository is on the local machine,
Björn Gustavsson550c66f2009-10-20 22:38:38 +020095 automatically setup `.git/objects/info/alternates` to
Shawn Pearce23edecb2006-04-18 20:19:48 -040096 obtain objects from the reference repository. Using
97 an already existing repository as an alternate will
Mike Ralphson451e5932007-09-07 17:43:37 +010098 require fewer objects to be copied from the repository
Shawn Pearce23edecb2006-04-18 20:19:48 -040099 being cloned, reducing network and local storage costs.
Brandon Casey2498a1a2008-04-03 13:26:13 -0500100+
Björn Gustavsson550c66f2009-10-20 22:38:38 +0200101*NOTE*: see the NOTE for the `--shared` option.
Shawn Pearce23edecb2006-04-18 20:19:48 -0400102
Eric W. Biedermana2775c22005-10-02 13:42:57 -0600103--quiet::
Junio C Hamano6ec311d2005-07-13 20:25:54 -0700104-q::
Tay Ray Chuan488c3162009-12-26 01:12:04 +0800105 Operate quietly. Progress is not reported to the standard
106 error stream. This flag is also passed to the `rsync'
Steve Haslamd3296e32008-07-25 19:37:48 +0100107 command when given.
Junio C Hamano6ec311d2005-07-13 20:25:54 -0700108
Miklos Vajna21188b12008-10-09 01:40:32 +0200109--verbose::
110-v::
Tay Ray Chuanc54b74a2010-02-24 20:50:20 +0800111 Run verbosely. Does not affect the reporting of progress status
112 to the standard error stream.
Tay Ray Chuan5a518ad2009-12-26 01:12:06 +0800113
114--progress::
Tay Ray Chuan488c3162009-12-26 01:12:04 +0800115 Progress status is reported on the standard error stream
116 by default when it is attached to a terminal, unless -q
117 is specified. This flag forces progress status even if the
118 standard error stream is not directed to a terminal.
Miklos Vajna21188b12008-10-09 01:40:32 +0200119
Jakub Narebskifd0368f2007-07-13 01:54:07 +0200120--no-checkout::
Eric W. Biedermana2775c22005-10-02 13:42:57 -0600121-n::
122 No checkout of HEAD is performed after the clone is complete.
123
Junio C Hamano87e80c42006-01-22 17:24:22 -0800124--bare::
Thomas Ackermann48a8c262013-01-21 20:16:20 +0100125 Make a 'bare' Git repository. That is, instead of
Junio C Hamano8a1a1202006-01-14 16:00:32 -0800126 creating `<directory>` and placing the administrative
127 files in `<directory>/.git`, make the `<directory>`
Petr Baudis71821352006-11-23 23:58:35 +0100128 itself the `$GIT_DIR`. This obviously implies the `-n`
129 because there is nowhere to check out the working tree.
130 Also the branch heads at the remote are copied directly
131 to corresponding local branch heads, without mapping
132 them to `refs/remotes/origin/`. When this option is
J. Bruce Fields36566cc2006-12-31 18:47:34 -0500133 used, neither remote-tracking branches nor the related
134 configuration variables are created.
Junio C Hamano8a1a1202006-01-14 16:00:32 -0800135
Johannes Schindelinbc699af2008-08-02 21:38:56 +0200136--mirror::
Uwe Kleine-König6db21032010-10-04 19:28:27 +0200137 Set up a mirror of the source repository. This implies `--bare`.
138 Compared to `--bare`, `--mirror` not only maps local branches of the
139 source to local branches of the target, it maps all refs (including
Matthieu Moy29b9a662010-11-02 16:31:24 +0100140 remote-tracking branches, notes etc.) and sets up a refspec configuration such
Uwe Kleine-König6db21032010-10-04 19:28:27 +0200141 that all these refs are overwritten by a `git remote update` in the
142 target repository.
Johannes Schindelinbc699af2008-08-02 21:38:56 +0200143
Andy Parkinsba158a32006-11-02 12:11:56 +0100144--origin <name>::
Johannes Schindeline6c310f2005-12-22 23:37:24 +0100145-o <name>::
Björn Gustavsson550c66f2009-10-20 22:38:38 +0200146 Instead of using the remote name `origin` to keep track
147 of the upstream repository, use `<name>`.
Johannes Schindeline6c310f2005-12-22 23:37:24 +0100148
Jeff King7a4ee282009-08-26 15:05:08 -0400149--branch <name>::
150-b <name>::
151 Instead of pointing the newly created HEAD to the branch pointed
Björn Gustavsson550c66f2009-10-20 22:38:38 +0200152 to by the cloned repository's HEAD, point to `<name>` branch
Ralf Thielow31b808a2012-09-20 20:04:08 +0200153 instead. In a non-bare repository, this is the branch that will
154 be checked out.
155 `--branch` can also take tags and detaches the HEAD at that commit
156 in the resulting repository.
Jeff King7a4ee282009-08-26 15:05:08 -0400157
Eric W. Biedermana2775c22005-10-02 13:42:57 -0600158--upload-pack <upload-pack>::
Junio C Hamano6ec311d2005-07-13 20:25:54 -0700159-u <upload-pack>::
Steve Haslamd3296e32008-07-25 19:37:48 +0100160 When given, and the repository to clone from is accessed
161 via ssh, this specifies a non-default path for the command
Junio C Hamano6ec311d2005-07-13 20:25:54 -0700162 run on the other end.
163
Junio C Hamanoa57c8ba2006-05-28 10:14:38 -0700164--template=<template_directory>::
165 Specify the directory from which templates will be used;
Steven Draked8a84882010-02-17 12:44:46 +1300166 (See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
Junio C Hamanoa57c8ba2006-05-28 10:14:38 -0700167
Jeff King84054f72011-06-09 16:56:19 -0400168--config <key>=<value>::
169-c <key>=<value>::
170 Set a configuration variable in the newly-created repository;
171 this takes effect immediately after the repository is
172 initialized, but before the remote history is fetched or any
173 files checked out. The key is in the same format as expected by
174 linkgit:git-config[1] (e.g., `core.eol=true`). If multiple
175 values are given for the same key, each value will be written to
176 the config file. This makes it safe, for example, to add
177 additional fetch refspecs to the origin remote.
178
Christian Schlotterf4964542007-02-19 13:35:35 +0100179--depth <depth>::
Junio C Hamanof4bf2182007-01-01 15:08:06 -0800180 Create a 'shallow' clone with a history truncated to the
Nguyễn Thái Ngọc Duy82fba2b2013-12-05 20:02:55 +0700181 specified number of revisions.
Junio C Hamanof4bf2182007-01-01 15:08:06 -0800182
Felipe Contreras0460ed22013-05-08 20:16:55 -0500183--[no-]single-branch::
Nguyễn Thái Ngọc Duy3e6e0ed2012-01-07 21:45:59 +0700184 Clone only the history leading to the tip of a single branch,
185 either specified by the `--branch` option or the primary
186 branch remote's `HEAD` points at. When creating a shallow
187 clone with the `--depth` option, this is the default, unless
188 `--no-single-branch` is given to fetch the histories near the
189 tips of all branches.
Ralf Thielow31b808a2012-09-20 20:04:08 +0200190 Further fetches into the resulting repository will only update the
Matthieu Moya6d3bde2012-10-23 13:34:05 +0200191 remote-tracking branch for the branch this option was used for the
Ralf Thielow31b808a2012-09-20 20:04:08 +0200192 initial cloning. If the HEAD at the remote did not point at any
Matthieu Moya6d3bde2012-10-23 13:34:05 +0200193 branch when `--single-branch` clone was made, no remote-tracking
Ralf Thielow31b808a2012-09-20 20:04:08 +0200194 branch is created.
Nguyễn Thái Ngọc Duy3e6e0ed2012-01-07 21:45:59 +0700195
Johan Herlande7fed182009-08-20 01:07:43 +0200196--recursive::
Jens Lehmannccdd3da2010-11-04 21:27:12 +0100197--recurse-submodules::
Johan Herlande7fed182009-08-20 01:07:43 +0200198 After the clone is created, initialize all submodules within,
199 using their default settings. This is equivalent to running
Björn Gustavsson550c66f2009-10-20 22:38:38 +0200200 `git submodule update --init --recursive` immediately after
Johan Herlande7fed182009-08-20 01:07:43 +0200201 the clone is finished. This option is ignored if the cloned
202 repository does not have a worktree/checkout (i.e. if any of
203 `--no-checkout`/`-n`, `--bare`, or `--mirror` is given)
204
Nguyễn Thái Ngọc Duyb57fb802011-03-19 22:16:56 +0700205--separate-git-dir=<git dir>::
206 Instead of placing the cloned repository where it is supposed
207 to be, place the cloned repository at the specified directory,
Øystein Walle5fe8f492014-02-05 23:19:43 +0100208 then make a filesystem-agnostic Git symbolic link to there.
Thomas Ackermann2de9b712013-01-21 20:17:53 +0100209 The result is Git repository can be separated from working
Nguyễn Thái Ngọc Duyb57fb802011-03-19 22:16:56 +0700210 tree.
211
212
Junio C Hamano6ec311d2005-07-13 20:25:54 -0700213<repository>::
Andrew Ruder37ba0562007-07-04 17:21:36 -0500214 The (possibly remote) repository to clone from. See the
215 <<URLS,URLS>> section below for more information on specifying
216 repositories.
Junio C Hamano6ec311d2005-07-13 20:25:54 -0700217
218<directory>::
Uwe Zeisbergerfb6a9f92006-06-08 08:50:09 +0200219 The name of a new directory to clone into. The "humanish"
Andreas Ericsson0879aa22005-11-10 12:58:08 +0100220 part of the source repository is used if no directory is
Björn Gustavsson550c66f2009-10-20 22:38:38 +0200221 explicitly given (`repo` for `/path/to/repo.git` and `foo`
222 for `host.xz:foo/.git`). Cloning into an existing directory
Alexander Potashevec00d6e2009-05-07 16:04:08 +0400223 is only allowed if the directory is empty.
Junio C Hamano46071662005-11-05 22:26:52 -0800224
Sergei Organov347989f2007-11-16 21:43:16 +0300225:git-clone: 1
Andrew Ruder37ba0562007-07-04 17:21:36 -0500226include::urls.txt[]
227
Junio C Hamano1e2ccd32005-12-12 23:24:06 -0800228Examples
sean2b5f3ed2006-05-05 15:05:10 -0400229--------
Junio C Hamano1e2ccd32005-12-12 23:24:06 -0800230
Michael J Gruber47638682010-03-21 18:30:19 +0100231* Clone from upstream:
Junio C Hamano1e2ccd32005-12-12 23:24:06 -0800232+
233------------
W. Trevor King283efb02013-06-22 10:46:27 -0400234$ git clone git://git.kernel.org/pub/scm/.../linux.git my-linux
235$ cd my-linux
Junio C Hamano1e2ccd32005-12-12 23:24:06 -0800236$ make
237------------
238
239
Michael J Gruber47638682010-03-21 18:30:19 +0100240* Make a local clone that borrows from the current directory, without checking things out:
Junio C Hamano1e2ccd32005-12-12 23:24:06 -0800241+
242------------
243$ git clone -l -s -n . ../copy
Steffen Prohaskaa6e37682007-05-12 13:32:34 +0200244$ cd ../copy
Junio C Hamano1e2ccd32005-12-12 23:24:06 -0800245$ git show-branch
246------------
247
Junio C Hamano8a1a1202006-01-14 16:00:32 -0800248
Michael J Gruber47638682010-03-21 18:30:19 +0100249* Clone from upstream while borrowing from an existing local directory:
Shawn Pearce23edecb2006-04-18 20:19:48 -0400250+
251------------
W. Trevor Kingf22a6542013-06-22 10:46:25 -0400252$ git clone --reference /git/linux.git \
253 git://git.kernel.org/pub/scm/.../linux.git \
254 my-linux
255$ cd my-linux
Shawn Pearce23edecb2006-04-18 20:19:48 -0400256------------
257
258
Michael J Gruber47638682010-03-21 18:30:19 +0100259* Create a bare repository to publish your changes to the public:
Junio C Hamano8a1a1202006-01-14 16:00:32 -0800260+
261------------
Junio C Hamano87e80c42006-01-22 17:24:22 -0800262$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
Junio C Hamano8a1a1202006-01-14 16:00:32 -0800263------------
264
265
Junio C Hamano6ec311d2005-07-13 20:25:54 -0700266GIT
267---
Christian Couder9e1f0a82008-06-06 09:07:32 +0200268Part of the linkgit:git[1] suite