一、Git vs SVN

1.1 SVN

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的,必须联网才能工作。

    • 优点:

      • 集中管理方式在一定程度上可以看到其他开发人员的操作,管理员也可以掌握每个人的开发权限。
    • 缺点:

      • 服务器单点故障。
      • 容错性差。

1.2 Git

  • Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了 。

二、Git工作流程

  1. 从远程仓库中克隆 Git 资源作为本地仓库。
  2. 从本地仓库中checkout代码然后进行代码修改
  3. 在提交前先将代码提交到暂存区。
  4. 提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. 在修改完成后,需要和团队成员共享代码时,可以将代码push

三、Git安装

  1. git
  2. TortoiseGit + 中文语言包
  • 百度一下都能下载到。这里不再赘述。

四、使用Git管理文件版本

4.1 创建版本库

4.1.1 使用GitBash

  • 在GitBash中敲入命令创建版本库
  • 敲入命令,git init

4.1.2 使用TortoiseGit

  • 只需要在仓库目录中右键选择“在这里创建版本库”
  • 仓库创建成功后,会在目录下创建一个.git的隐藏目录

7

4.2 添加文件

4.2.1 添加文件过程

  • 创建文件后,右键TortoiseGit,然后选择添加,文件显示加号后,再右键文件点击Git提交

10

11

12

13

14

4.2.2 工作区和暂存区

  • repository目录是工作区
  • .git隐藏文件夹才是版本库
  • Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区
  • Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

  • 前文把文件往Git版本库里添加的时候,是分了两步执行的:

    1. git add把文件添加进去,实际上就是把文件修改添加到暂存区
    2. git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
    3. 综上,简而言之,就是需要提交的文件修改全部放置在暂存区,最后一次性提交所有在暂存区的修改

4.3 修改文件

4.3.1 提交修改

  • 右键已修改完毕的文件,选择Git提交

2

3

4.3.2 查看修改历史

  • 右键选择显示日志,查看文件的修改历史

5

4.3.3 差异比较

  • 若要查看文件与修改前之间的差异,右键比较差异

7

4.3.4 还原修改

  • 对文件进行修改后不想提交,想还原到未修改之间的状态,可以右键选择还原

  • 此操作会撤销所有未提交的修改,所以当做还原操作是需要慎重慎重!

10

4.4 删除文件

  • 删除无用文件,直接右键删除

11

4.5 案例:提交java工程至版本库

4.5.1 将工程复制到工作目录(repository)

4.5.2 将工程添加到暂存区

3

4

4.5.3 忽略文件或文件夹

6

7

8

9

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
Last modification:October 17th, 2019 at 08:47 pm