[[r_getting_a_repo]]
=== 获取 Git 仓库

有两种取得 Git 项目仓库的方法。
第一种是在现有项目或目录下导入所有文件到 Git 中；
第二种是从一个服务器克隆一个现有的 Git 仓库。

==== 在现有目录中初始化仓库

如果你打算使用 Git 来对现有的项目进行管理，你只需要进入该项目目录并输入：

[source,console]
----
$ git init
----

该命令将创建一个名为 `.git` 的子目录，这个子目录含有你初始化的 Git 仓库中所有的必须文件，这些文件是 Git 仓库的骨干。
但是，在这个时候，我们仅仅是做了一个初始化的操作，你的项目里的文件还没有被跟踪。
(参见 <<ch10-git-internals#ch10-git-internals>> 来了解更多关于到底 `.git` 文件夹中包含了哪些文件的信息。)(((git commands, init)))

如果你是在一个已经存在文件的文件夹（而不是空文件夹）中初始化 Git 仓库来进行版本控制的话，你应该开始跟踪这些文件并提交。
你可通过 `git add` 命令来实现对指定文件的跟踪，然后执行 `git commit` 提交：

[source,console]
----
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
----

稍后我们再逐一解释每一条指令的意思。
现在，你已经得到了一个实际维护（或者说是跟踪）着若干个文件的 Git 仓库。

[[r_git_cloning]]
==== 克隆现有的仓库

如果你想获得一份已经存在了的 Git 仓库的拷贝，比如说，你想为某个开源项目贡献自己的一份力，这时就要用到 `git clone` 命令。
如果你对其它的 VCS 系统（比如说Subversion）很熟悉，请留心一下你所使用的命令是"clone"而不是"checkout"。
这是 Git 区别于其它版本控制系统的一个重要特性，Git 克隆的是该 Git 仓库服务器上的几乎所有数据，而不是仅仅复制完成你的工作所需要文件。
当你执行 `git clone` 命令的时候，默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
事实上，如果你的服务器的磁盘坏掉了，你通常可以使用任何一个克隆下来的用户端来重建服务器上的仓库（虽然可能会丢失某些服务器端的挂钩设置，但是所有版本的数据仍在，详见 <<ch04-git-server#r_git_on_the_server>> ）。

克隆仓库的命令格式是 `git clone [url]` 。(((git commands, clone)))
比如，要克隆 Git 的可链接库 libgit2，可以用下面的命令：

[source,console]
----
$ git clone https://github.com/libgit2/libgit2
----

这会在当前目录下创建一个名为 ``libgit2'' 的目录，并在这个目录下初始化一个 `.git` 文件夹，从远程仓库拉取下所有数据放入 `.git` 文件夹，然后从中读取最新版本的文件的拷贝。
如果你进入到这个新建的 `libgit2` 文件夹，你会发现所有的项目文件已经在里面了，准备就绪等待后续的开发和使用。
如果你想在克隆远程仓库的时候，自定义本地仓库的名字，你可以使用如下命令：

[source,console]
----
$ git clone https://github.com/libgit2/libgit2 mylibgit
----

这将执行与上一个命令相同的操作，不过在本地创建的仓库名字变为 `mylibgit`。

Git 支持多种数据传输协议。
上面的例子使用的是 `https://` 协议，不过你也可以使用 `git://` 协议或者使用 SSH 传输协议，比如 `user@server:path/to/repo.git` 。
<<ch04-git-server#r_git_on_the_server>> 将会介绍所有这些协议在服务器端如何配置使用，以及各种方式之间的利弊。
