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