一、Git vs SVN
1.1 SVN
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,必须联网才能工作。
优点:
- 集中管理方式在一定程度上可以看到其他开发人员的操作,管理员也可以掌握每个人的开发权限。
缺点:
- 服务器单点故障。
- 容错性差。
1.2 Git
- Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了 。
二、Git工作流程
- 从远程仓库中克隆 Git 资源作为本地仓库。
- 从本地仓库中checkout代码然后进行代码修改
- 在提交前先将代码提交到暂存区。
- 提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本
- 在修改完成后,需要和团队成员共享代码时,可以将代码push
三、Git安装
- git
- TortoiseGit + 中文语言包
- 百度一下都能下载到。这里不再赘述。
四、使用Git管理文件版本
4.1 创建版本库
4.1.1 使用GitBash
- 在GitBash中敲入命令创建版本库
- 敲入命令,
git init
4.1.2 使用TortoiseGit
- 只需要在仓库目录中右键选择“在这里创建版本库”
- 仓库创建成功后,会在目录下创建一个
.git
的隐藏目录
4.2 添加文件
4.2.1 添加文件过程
- 创建文件后,右键
TortoiseGit
,然后选择添加
,文件显示加号后,再右键文件点击Git提交
4.2.2 工作区和暂存区
repository
目录是工作区.git
隐藏文件夹才是版本库- Git的版本库里存了很多东西,其中最重要的就是称为
stage
(或者叫index
)的暂存区 - Git为我们自动创建的第一个分支
master
,以及指向master
的一个指针叫HEAD
前文把文件往Git版本库里添加的时候,是分了两步执行的:
git add
把文件添加进去,实际上就是把文件修改添加到暂存区git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支- 综上,简而言之,就是需要提交的文件修改全部放置在暂存区,最后一次性提交所有在暂存区的修改
4.3 修改文件
4.3.1 提交修改
- 右键已修改完毕的文件,选择
Git提交
4.3.2 查看修改历史
- 右键选择
显示日志
,查看文件的修改历史
4.3.3 差异比较
- 若要查看文件与修改前之间的差异,右键
比较差异
4.3.4 还原修改
- 对文件进行修改后不想提交,想还原到未修改之间的状态,可以右键选择
还原
- 此操作会撤销所有未提交的修改,所以当做还原操作是需要慎重慎重!
4.4 删除文件
- 删除无用文件,直接右键
删除
4.5 案例:提交java工程至版本库
4.5.1 将工程复制到工作目录(repository)
4.5.2 将工程添加到暂存区
4.5.3 忽略文件或文件夹
4.5.4 提交代码
- 将代码添加到master分支上,其中
.gitignore
文件也需要添加到暂存区,然后提交到版本库
4.6 忽略文件语法规范
- 空行或是以 # 开头的行即注释行将被忽略。
可以在前面添加正斜杠 / 来避免递归,下面的例子中可以很明白的看出来与下一条的区别。
仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO /TODO
可以在后面添加正斜杠 / 来忽略文件夹,例如 build/ 即忽略build文件夹。
忽略 build/ 文件夹下的所有文件 build/
可以使用 ! 来否定忽略,即比如在前面用了 *.apk ,然后使用 !a.apk ,则这个a.apk不会被忽略。
仅否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件 !lib.a
* 用来匹配零个或多个字符,如 .[oa] 忽略所有以".o"或".a"结尾, ~ 忽略所有以 ~ 结尾的文件(这种文件通常被许多编辑器标记为临时文件); [] 用来匹配括号内的任一字符,如 [abc] ,也可以在括号内加连接符,如 [0-9] 匹配0至9的数; ? 用来匹配单个字符。
忽略 .a 文件 *.a 忽略 doc/notes.txt, 不包括 doc/server/arch.txt doc/*.txt 忽略所有的 .pdf 文件 在 doc/ directory 下的 doc/**/*.pdf