]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-clone.txt
Merge branch 'rs/maint-archive-prefix'
[thirdparty/git.git] / Documentation / git-clone.txt
CommitLineData
215a7ad1
JH
1git-clone(1)
2============
6ec311da
JH
3
4NAME
5----
29cf5e12 6git-clone - Clone a repository into a new directory
6ec311da
JH
7
8
9SYNOPSIS
10--------
353ce815 11[verse]
b1889c36 12'git clone' [--template=<template_directory>]
bc699afc 13 [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
a57c8bac 14 [-o <name>] [-u <upload-pack>] [--reference <repository>]
e7fed18a 15 [--depth <depth>] [--recursive] [--] <repository> [<directory>]
6ec311da
JH
16
17DESCRIPTION
18-----------
4607166d 19
db9819a4
BF
20Clones a repository into a newly created directory, creates
21remote-tracking branches for each branch in the cloned repository
1170e802
SG
22(visible using `git branch -r`), and creates and checks out an initial
23branch equal to the cloned repository's currently active branch.
4607166d 24
db9819a4
BF
25After the clone, a plain `git fetch` without arguments will update
26all the remote-tracking branches, and a `git pull` without
27arguments will in addition merge the remote master branch into the
1170e802 28current master branch, if any.
4607166d 29
db9819a4
BF
30This default configuration is achieved by creating references to
31the remote branch heads under `$GIT_DIR/refs/remotes/origin` and
32by initializing `remote.origin.url` and `remote.origin.fetch`
33configuration variables.
6ec311da 34
f4bf2184 35
6ec311da
JH
36OPTIONS
37-------
a2775c2a 38--local::
6ec311da
JH
39-l::
40 When the repository to clone from is on a local machine,
41 this flag bypasses normal "git aware" transport
42 mechanism and clones the repository by making a copy of
43 HEAD and everything under objects and refs directories.
3d5c418f
JH
44 The files under `.git/objects/` directory are hardlinked
45 to save space when possible. This is now the default when
46 the source repository is specified with `/path/to/repo`
47 syntax, so it essentially is a no-op option. To force
48 copying instead of hardlinking (which may be desirable
49 if you are trying to make a back-up of your repository),
50 but still avoid the usual "git aware" transport
51 mechanism, `--no-hardlinks` can be used.
52
53--no-hardlinks::
54 Optimize the cloning process from a repository on a
55 local filesystem by copying files under `.git/objects`
56 directory.
6ec311da 57
a2775c2a
EB
58--shared::
59-s::
60 When the repository to clone is on the local machine,
4607166d 61 instead of using hard links, automatically setup
23edecbc 62 .git/objects/info/alternates to share the objects
4607166d
JH
63 with the source repository. The resulting repository
64 starts out without any object of its own.
84668872
MV
65+
66*NOTE*: this is a possibly dangerous operation; do *not* use
67it unless you understand what it does. If you clone your
2498a1ad
BC
68repository using this option and then delete branches (or use any
69other git command that makes any existing commit unreferenced) in the
70source repository, some objects may become unreferenced (or dangling).
ba020ef5 71These objects may be removed by normal git operations (such as 'git-commit')
483bc4f0
JN
72which automatically call `git gc --auto`. (See linkgit:git-gc[1].)
73If these objects are removed and were referenced by the cloned repository,
74then the cloned repository will become corrupt.
13354f53
JK
75+
76Note that running `git repack` without the `-l` option in a repository
77cloned with `-s` will copy objects from the source repository into a pack
78in the cloned repository, removing the disk space savings of `clone -s`.
79It is safe, however, to run `git gc`, which uses the `-l` option by
80default.
81+
82If you want to break the dependency of a repository cloned with `-s` on
83its source repository, you can simply run `git repack -a` to copy all
84objects from the source repository into a pack in the cloned repository.
a2775c2a 85
23edecbc 86--reference <repository>::
40592376 87 If the reference repository is on the local machine,
23edecbc
SP
88 automatically setup .git/objects/info/alternates to
89 obtain objects from the reference repository. Using
90 an already existing repository as an alternate will
451e5931 91 require fewer objects to be copied from the repository
23edecbc 92 being cloned, reducing network and local storage costs.
2498a1ad
BC
93+
94*NOTE*: see NOTE to --shared option.
23edecbc 95
a2775c2a 96--quiet::
6ec311da 97-q::
d3296e37
SH
98 Operate quietly. This flag is also passed to the `rsync'
99 command when given.
6ec311da 100
21188b1e
MV
101--verbose::
102-v::
103 Display the progressbar, even in case the standard output is not
104 a terminal.
105
fd0368f9 106--no-checkout::
a2775c2a
EB
107-n::
108 No checkout of HEAD is performed after the clone is complete.
109
87e80c4b
JH
110--bare::
111 Make a 'bare' GIT repository. That is, instead of
8a1a120c
JH
112 creating `<directory>` and placing the administrative
113 files in `<directory>/.git`, make the `<directory>`
71821351
PB
114 itself the `$GIT_DIR`. This obviously implies the `-n`
115 because there is nowhere to check out the working tree.
116 Also the branch heads at the remote are copied directly
117 to corresponding local branch heads, without mapping
118 them to `refs/remotes/origin/`. When this option is
36566cc0
BF
119 used, neither remote-tracking branches nor the related
120 configuration variables are created.
8a1a120c 121
bc699afc
JS
122--mirror::
123 Set up a mirror of the remote repository. This implies --bare.
124
ba158a32 125--origin <name>::
e6c310fd 126-o <name>::
36566cc0 127 Instead of using the remote name 'origin' to keep track
5bd27ebb 128 of the upstream repository, use <name>.
e6c310fd 129
7a4ee28f
JK
130--branch <name>::
131-b <name>::
132 Instead of pointing the newly created HEAD to the branch pointed
65d15ed9 133 to by the cloned repository's HEAD, point to <name> branch
7a4ee28f
JK
134 instead. In a non-bare repository, this is the branch that will
135 be checked out.
136
a2775c2a 137--upload-pack <upload-pack>::
6ec311da 138-u <upload-pack>::
d3296e37
SH
139 When given, and the repository to clone from is accessed
140 via ssh, this specifies a non-default path for the command
6ec311da
JH
141 run on the other end.
142
a57c8bac
JH
143--template=<template_directory>::
144 Specify the directory from which templates will be used;
145 if unset the templates are taken from the installation
146 defined default, typically `/usr/share/git-core/templates`.
147
f496454e 148--depth <depth>::
f4bf2184 149 Create a 'shallow' clone with a history truncated to the
d9d10bb8 150 specified number of revisions. A shallow repository has a
f4bf2184
JH
151 number of limitations (you cannot clone or fetch from
152 it, nor push from nor into it), but is adequate if you
d9d10bb8
RW
153 are only interested in the recent history of a large project
154 with a long history, and would want to send in fixes
f4bf2184
JH
155 as patches.
156
e7fed18a
JH
157--recursive::
158 After the clone is created, initialize all submodules within,
159 using their default settings. This is equivalent to running
160 'git submodule update --init --recursive' immediately after
161 the clone is finished. This option is ignored if the cloned
162 repository does not have a worktree/checkout (i.e. if any of
163 `--no-checkout`/`-n`, `--bare`, or `--mirror` is given)
164
6ec311da 165<repository>::
37ba0561
AR
166 The (possibly remote) repository to clone from. See the
167 <<URLS,URLS>> section below for more information on specifying
168 repositories.
6ec311da
JH
169
170<directory>::
fb6a9f93 171 The name of a new directory to clone into. The "humanish"
0879aa28
AE
172 part of the source repository is used if no directory is
173 explicitly given ("repo" for "/path/to/repo.git" and "foo"
174 for "host.xz:foo/.git"). Cloning into an existing directory
ec00d6e0 175 is only allowed if the directory is empty.
4607166d 176
347989f4 177:git-clone: 1
37ba0561
AR
178include::urls.txt[]
179
1e2ccd3a 180Examples
2b5f3ed3 181--------
1e2ccd3a
JH
182
183Clone from upstream::
184+
185------------
186$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
187$ cd my2.6
188$ make
189------------
190
191
192Make a local clone that borrows from the current directory, without checking things out::
193+
194------------
195$ git clone -l -s -n . ../copy
a6e3768f 196$ cd ../copy
1e2ccd3a
JH
197$ git show-branch
198------------
199
8a1a120c 200
23edecbc
SP
201Clone from upstream while borrowing from an existing local directory::
202+
203------------
204$ git clone --reference my2.6 \
205 git://git.kernel.org/pub/scm/.../linux-2.7 \
206 my2.7
207$ cd my2.7
208------------
209
210
87e80c4b 211Create a bare repository to publish your changes to the public::
8a1a120c
JH
212+
213------------
87e80c4b 214$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
8a1a120c
JH
215------------
216
217
218Create a repository on the kernel.org machine that borrows from Linus::
219+
220------------
87e80c4b 221$ git clone --bare -l -s /pub/scm/.../torvalds/linux-2.6.git \
8a1a120c
JH
222 /pub/scm/.../me/subsys-2.6.git
223------------
224
225
6ec311da
JH
226Author
227------
228Written by Linus Torvalds <torvalds@osdl.org>
229
1e2ccd3a 230
6ec311da
JH
231Documentation
232--------------
0879aa28 233Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
6ec311da
JH
234
235
236GIT
237---
9e1f0a85 238Part of the linkgit:git[1] suite