协同开发—Git

1、版本控制

版本迭代——多次更新覆盖且兼容前面的内容,已达到最新标准或要求的版本更替

  • 版本控制最主要的功能就是追踪文件的变更。
  1. 实现跨区域实现多人协同开发
  2. 追踪、记载一个或多个文件的历史记录
  3. 组织、保护自主编写的源码及文档
  4. 统计工作量
  5. 并发性开发,提高效率
  6. 实时追踪项目开发进程
  7. 减轻开发人员的压力,节省时间降低错误

简单的说,Git就是用于多人协同开发同一项或多项工程项目的技术

1.1、版本控制的分类

  1. 本地版本控制
    记录文件的每次更新,对每个版本的更新做一个快照,记录补丁文件,适用于个人,如RCS。GitEE - 图1

  2. 集中版本控制
    所有版本数据保存在服务器上,协同来发时从服务器上来取下来更新修改再次上传,上传内容不能重复,如SVNGitEE - 图2

  3. 分布式版本控制
    所有版本的信息仓库全部同步到本地的每个用户账号上且 版本相同,防止服务器宕机带来的损失,大幅度提升了效率,如GitGitEE - 图3

2、Git安装及使用

  • 使用镜像下载,一切都来得太快

    • Git镜像地址

    • 下载完成后无脑next

    • 安装完成后打开控制器或鼠标右击都可以找到Git
      GitEE - 图4
      GitEE - 图5

  • Git Bash: Unix与Linux风格的命令行

  • Git CMD: windows风格的命令行

  • Git GUI:图形界面的Git

  • 打开窗口

    • 右键点击
      GitEE - 图6

    • 滚轮向下进入界面
      GitEE - 图7

3、基本Lniux命令

3.1、基本命令

  • cd /home 进入 ‘/ home’ 目录’
  • cd .. 返回上一级目录
  • cd ../.. 返回上两级目录
  • cd 进入个人的主目录
  • cd ~user1 进入个人的主目录
  • cd - 返回上次所在的目录
  • clear 清屏
  • exit 退出
  • # 注释
  • pwd 显示工作路径

    • reset 重新初始化终端/清屏
  • ls 查看目录中的文件
  • ls -F 查看目录中的文件
  • ls -l 显示文件和目录的详细资料
  • ls-ll 显示当前目录下所有的文件,更详细
  • ls -a 显示隐藏文件 ls [0-9] 显示包含数字的文件名和目录名
  • tree 显示文件和目录由根目录开始的树形结构
  • touch 新建一个文件 如touch index.js 就会在当前目录下新建一个index.js文件
  • lstree 显示文件和目录由根目录开始的树形结构
  • mkdir dir1 创建一个叫做 ‘dir1’ 的目录’
  • mkdir dir1 dir2 同时创建两个目录
  • mkdir -p /tmp/dir1/dir2 创建一个目录树
  • rm -f file1 删除一个叫做 ‘file1’ 的文件’
  • rmdir dir1 删除一个叫做 ‘dir1’ 的目录’
  • rm -rf dir1 删除一个叫做 ‘dir1’ 的目录并同时删除其内容
  • rm -rf dir1 dir2 同时删除两个目录及它们的内容
  • mv dir1 new_dir 重命名/移动 一个目录
  • cp file1 file2 复制一个文件
  • cp dir/* . 复制一个目录下的所有文件到当前工作目录
  • cp -a /tmp/dir1 . 复制一个目录到当前工作目录
  • cp -a dir1 dir2 复制一个目录
  • cp -r dir1 dir2 复制一个目录及子目录
  • ln -s file1 lnk1 创建一个指向文件或目录的软链接
  • ln file1 lnk1 创建一个指向文件或目录的物理链接
  • touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)
  • file file1 outputs the mime type of the file as text
  • iconv -l 列出已知的编码

3.2、配置命令

  1. 所有配置文件都保存在本地

    • 查看所有配置
      GitEE - 图8
  2. Git\etc\gitconfig :Git安装目录下的config

    1. —system系统级

GitEE - 图9

—global全局 GitEE - 图10

  1. 设置用户名和邮箱
    1. git config --global user.name "hg" #名字
    2. git config --global user.email 936711466@qq.com #邮箱


GitEE - 图11
GitEE - 图12

4、Git基本原理(重点)

1、工作分区:

Git本地有三个工作区域:

  1. 工作目录(Working Directory
  2. 暂存区(Stage/Index)
  3. 资源库(RepositoryGit Directory)

如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

GitEE - 图13

  • 上传逻辑顺序
    Working Directoy—>[^git add files]—>Stage—>^git commit—>History—>[^git push]—>Remote Directory

  • Git上传原理

    1. [^git add files]:将本地目录Working Directoy添加到暂存区Stage

    2. [^git push]:将本地仓库History的内容上传到远程仓库Remote Directory
  • 拉取逻辑顺序
    Remote Directory—>[^git pull]—>History—>^git reset—>Stage—>[^git checkout]—>Working Directoy

  • Git拉取原理

    1. [^git pull]:将远程仓库Remote Directory里的内容拉取到本地仓库History里

    2. [^git checkout]:将暂存区Stage里的内容拉取到本地目录Working Directoy
  • Directoy:使用Git管理的一个目录,即一个仓库,包含工作空间和管理空间

  • WorkSpace:通过Git进行版本控制的目录或文件,这些文件组成工作空间

  • git:存放Git管理的目录

  • index/Stage:暂存区,提供更新的区域

  • Local Repe:本地仓库,存放下拉资源的空间

  • Stash:隐藏的工作状态保存栈,用于保存/恢复WorkSpace的临时状态

  • Workspace:工作区,就是平时存放项目代码的地方

  • Index / Stage:暂存区,用于临时存放的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是项目组中的一台电脑用于远程数据交换
    本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

GitEE - 图14

5、Git的工作流程

git的工作流程一般是这样的:

  1. 1、在工作目录中添加、修改文件;
  2. 2、将需要进行版本管理的文件放入暂存区域;
  3. 3、将暂存区域的文件提交到git仓库。
  4. 因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)![](https://gitee.com/hg14150/blogiamges/raw/master/img/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy91SkRBVUtyR0M3S3N1OFVsSVR3TWxiWDNrTUd0WjlwMDlpYU9obDBkQUNmTHJNd05iRHp1Y0dRMzBzM0huc2lhY3pmY1I2ZEM5T2VoaWN1d2liS3VIalJsemcvNjQw#alt=img)

5.1、搭建项目

工作目录(WorkSpace)就是希望Git帮助管理的文件夹,可以是项目的目录,也可以是一个空目录,建议不要有中文。

日常使用只要记住下图6个命令:

GitEE - 图15

1、创建本地仓库

  • 一种是创建全新的仓库
    创建一个空白文件夹,在新的文件夹目录上打开Git Bash Here 输入命令行 git init
    GitEE - 图16

  • 另一种是克隆远程仓库
    打开远程仓库找到资源,在复制克隆地址,在新的文件夹目录上打开Git Bash Here 输入命令行 git clone
    GitEE - 图17

GitEE - 图18

2、Git文件操作

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存Staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

3、文件状态

  1. 上面始终操作对应四种状态
  1. #查看指定文件或目录
  2. git status [filename]
  3. #查看所有文件或目录
  4. git status
  5. #添加文件到暂存区
  6. git add .
  7. #将暂存区中的内容提交到本地仓库 -m提交信息 一定要全名一个符号都不能少
  8. git commit -m "new file 文件名"

GitEE - 图19

5.2、可忽略文件

  • 前端项目,npm_moudles是不用上传的
  • 数据库文件、临时文件、设计文件等也是不用上传的

在IDEA项目主目录下创建.gitgnore文件,规则如下

  1. 忽略文件中的空行或以#开始的行
  2. * 可忽略任意多个字符,?可忽略指定的一个字符
  3. []代表可选字段范围
  4. {}代表可选字符串
  5. !开头则不会被忽略
  6. /开头,则忽略的内容是此文件一下的内容,而子目录中的文件不被忽略
  7. /结尾,则忽略此目录下改名称的子目录,而非文件
  1. #为注释
  2. *.txt #忽略所有以.txt结尾的文件,这样上传不会被选中
  3. !lib.txt #忽略除lib.txt的文件
  4. /src #忽略主项目一下的文件,但不包括sec
  5. build/ #忽略build/目录下的所有文件
  6. doc/*.txt #忽略doc下一级的所有.txt文件

6、GitEE的使用

全球使用最广泛的同性交友网站——GitHub,在国内使用速度慢,需要翻墙

国内使用最广泛的同性交友网站——GitEE,也称为码云

GitEE - 图20

GitEE - 图21

6.1、创建远程仓库

  1. GitEE创建

    • GitEE - 图22
    • GitEE - 图23
    • GitEE - 图24
  2. 命令行创建仓库

GitEE - 图25