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