2.1 Git 基础 - 取得项目的 Git 仓库

在工做目录中初始化新仓库

要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:git

$ git init

若是当前目录下有几个文件想要归入版本控制,须要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,而后提交:github

$ git add *.c
$ git add README
$ git commit -m 'initial project version'

 

从现有仓库克隆

若是想对某个开源项目出一份力,能够先把该项目的 Git 仓库复制一份出来,这就须要用到 git clone 命令。若是你熟悉其余的 VCS 好比 Subversion,你可能已经注意到这里使用的是 clone 而不是checkout。这是个很是重要的差异,Git 收取的是项目历史的全部数据(每个文件的每个版本),服务器上有的数据克隆以后本地也都有了。实际上,即使服务器的磁盘发生故障,用任何一个克隆出来的客户端均可以重建服务器上的仓库,回到当初克隆时的状态(虽然可能会丢失某些服务器端的挂钩设置,但全部版本的数据仍旧还在,有关细节请参考第四章)。正则表达式

克隆仓库的命令格式为 git clone [url]。好比,要克隆 Ruby 语言的 Git 代码仓库 Grit,能够用下面的命令:shell

$ git clone git://github.com/schacon/grit.git

这会在当前目录下建立一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的全部版本记录,而后从中取出最新版本的文件拷贝。若是进入这个新建的 grit 目录,你会看到项目中的全部文件已经在里边了,准备好后续的开发和使用。若是但愿在克隆的时候,本身定义要新建的项目目录名称,能够在上面的命令末尾指定新的名字:服务器

$ git clone git://github.com/schacon/grit.git mygrit

惟一的差异就是,如今新建的目录成了 mygrit,其余的都和上边的同样。ui

Git 支持许多数据传输协议。以前的例子使用的是 git:// 协议,不过你也能够用 http(s):// 或者user@server :/path.git 表示的 SSH 传输协议。咱们会在第四章详细介绍全部这些协议在服务器端该如何配置使用,以及各类方式之间的利弊。url

 

跟踪新文件

使用命令 git add 开始跟踪一个新文件。因此,要跟踪 README 文件,运行:spa

$ git add README

忽略某些文件

通常咱们总会有些文件无需归入 Git 的管理,也不但愿它们总出如今未跟踪文件列表。一般都是些自动生成的文件,好比日志文件,或者编译过程当中建立的临时文件等。咱们能够建立一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:.net

$ cat .gitignore
*.[oa]
*~

第一行告诉 Git 忽略全部以 .o 或 .a 结尾的文件。通常这类对象文件和存档文件都是编译过程当中出现的,咱们用不着跟踪它们的版本。第二行告诉 Git 忽略全部以波浪符(~)结尾的文件,许多文本编辑软件(好比 Emacs)都用这样的文件名保存副本。此外,你可能还须要忽略 logtmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以避免未来误提交这类无用的文件。版本控制

文件 .gitignore 的格式规范以下:

  • 全部空行或者以注释符号  开头的行都会被 Git 忽略。
  • 可使用标准的 glob 模式匹配。
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  • 要忽略指定模式之外的文件或目录,能够在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc]匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;若是在方括号中使用短划线分隔两个字符,表示全部在这两个字符范围内的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的数字)。

咱们再看一个 .gitignore 文件的例子:

# 此为注释 – 将被 Git 忽略
# 忽略全部 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的全部文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt

**/ pattern is available in Git since version 1.8.2.

相关文章
相关标签/搜索