GIT

230 阅读6分钟

概念入门

概念: GIT是一个分布式的版本控制工具:

  • 追踪变化:版本控制可以帮助我们在团队开发中记录何时,何地,何人对文件进行何种操作,且每次操作,版本号都会递增。
  • 协同修改:多人并行地修改服务器端的同一个文件。
  • 数据备份:记录当前和历史版本,方便版本回滚。
  • 权限控制:对参与开发的人员进行权限控制。

下载与安装

概念: git属于傻瓜式安装,安装成功后使用cmd命令行键入 git --version 查看安装结果。

链接: 官网下载地址

链接: 淘宝镜像下载

Git结构

概念: Git管理的文件总共分为如下区域:

  • 工作区(Working Directory): 你硬盘上的工作空间。
  • 版本库(Repository): 又分为两个区域:
    • 暂存区(stage): 该区中的文件都是待提交状态,这个区主要负责提供后悔的机会。
    • 本地库分支(branch): 本地库分支默认使用master分支。

Git命令行首次提交文件流程

  1. 在工作区编写代码,如在D盘根目录下新建 hello.txt
  2. 在工作区目录(D:\)下右键选择 Git Bash Here 运行git命令行。
    • 这是一个git自带的命令行,支持linux命令。
    • ll:查看当前目录结构。
    • cat hello.txt:查看文件内容
    • vim hello.txt:编辑文件内容
      • i:进入编辑模式。
      • esc:退出编辑模式。
      • :wq:保存并退出。
  3. 通过 git init 初始化git仓库,此时目录中会生成一个 .git 文件夹。
  4. 设置开发人员标识:必须设置否则某些命令会失效。
    • 局部设置:仅对当前本地库有效
      • 姓名标识:git config user.name joezhou
      • 邮箱标识:git config user.email yy06200210@163.com
      • 更改后在 .git/config 文件中查看。
    • 全局设置:对当前OS用户下的所有本地库有效(建议)
      • 姓名标识:git config --global user.name joezhou
      • 邮箱标识:git config --global user.email yy06200210@163.com
      • 更改后在OS用户文件夹下的 .gitconfig 文件中查看。
  5. 通过 git status 查看当前工作区和暂存区状态:
    • 文件为红色表示文件在工作区中。
    • 文件为绿色表示文件在暂存区中。
  6. 通过 git add hello.txt 命令将文件添加至暂存区:
    • linux相关警告可以忽略。
    • git rm --cached hello.txt 把暂存区最新版本转移回工作区。
  7. 通过 git commit -m "首次提交" hello.txt 命令将暂存区文件,用户,日志消息等提交到本地库默认分支 master 中。

回滚

概念:通过日志回滚:git只要在本地库发生操作,都会进行版本记录。

  • git log 显示提交日志信息
    • git log --pretty=oneline 更优雅查看
    • git log --oneline 缩短了HASH字符串
  • git reset --hard <HASH字符串> 将当前HEAD复位到指定的HASH字符串表示的状态
    • --soft
      • 仅仅在本地库移动HEAD指针
    • --mixed
      • 在本地库移动HEAD指针
      • 重置暂存区
    • --hard
      • 在本地库移动HEAD指针
      • 重置暂存区
      • 重置工作区

文件比较

  • git diff 查看工作区和暂存区指定文件的内容差异。
  • git diff --cached 查看暂存区和仓库指定文件的内容差异。
  • git diff HEAD 查看工作区和仓库指定文件的内容差异。

++ 表示多出的内容 -- 表示减少的内容

如果一致就没什么提示了。

git diff 不指定文件时表示比较所有文件。

远程库(代码托管中心):

概念:

  • 本地搭建局域网:
    • GitLab服务器
  • 互联网环境下:

流程:

  • 项目经理
    • 在工作区编写代码框架
    • add到暂存区
    • commit到本地库
    • push到远程库
  • 开发员A
    • 从远程库clone到本地库
    • 代码开发
    • push到远程库(需要认证)
  • 项目经理
    • 从远程库pull到本地库

GitHub

概念:

  • github是用于版本控制和协作的代码托管平台,是一个开源的分布式的版本控制系统,只支持git这一种唯一版本库。
  • gitHub从08年4月上线,一直到18年6月被微软收购。

访问github更快

概念: github是国外网站,比较慢,建议在 DNS查询网

  • 查询 github.com 复制TTL最快的
  • 查询 github.global.ssl.fastly.net 复制TTL最快的
  • 添加在 C:\Windows\System32\drivers\etc\ 中的hosts文件末尾:
140.82.112.3 github.com git
67.228.126.62 github.global.ssl.fastly.net

如果权限不够,点击host文件,右键属性 - 安全 - 编辑 - 选中当前登录的账号,对其勾选完全控制

创建github仓库

概念: 一个库对应一个项目,可以包含文件夹和文件,图像,视频,电子表格等内容。

  1. 在github上创建一个仓库 start,
  2. 在代码区编写文件start.txt
    • git add start.txt
    • git commit -m "first" start.txt
  3. 绑定远程仓库
    • git remote add origin 远程路径
    • origin是远程仓库别名,随便起,建议默认。
  4. 查看远程的仓库绑定信息
    • git remote -v
  5. 将文件推动到远程某个仓库的某个分支
    • git push -u origin master
  6. 填入用户名和密码

从别人的github上拉项目到本地

你可以直接下载,但是建议使用clone复制远程地址。

  1. 找一个文件夹
  2. 右键开启git命令行
  3. git clone 远程地址 将完整的把远程项目下载到本地,且同时自动完成了初始化本地库的工作。

将修改后的代码重新推回别人的github

概念:项目经理需要对某个用户开放权限,否则别人无法push

  1. 项目经理在github上选择settings,
  2. Access,添加用户名,copy invite link复制邀请码。
  3. 开发人员访问邀请码连接,接受邀请accept invitation
  4. 重新push即可。

项目经理拉从gitHub上拉取最新代码

  1. git pull 从远程获取最新版本并merge到本地
    • 相当于 git fetch 取回更新 和 git merge 两个命令合区
    • git pull origin master

使用Idea支持git

  1. File-settings-GIT-填入git.ext地址
  2. File-settings-github-填入你的用户名密码

将自己的项目发布到github

  1. VCS-Import Into Version Control-Create Git Responsirty
  2. 选择当前项目 文件变红,处于工作区
  3. 右键项目 git -> add,文件变绿,处于暂存区
  4. 右键项目 git -> commit 文件无色,处于本地仓库分支
    • 如果需要更换分支,右键git-Responstriy-branches
  5. ctrl+t 快速更新项目
  6. ctrl+k 快速提交项目
  7. ctrl+shift + t 快速push项目
    • 添加远程仓库地址
    • 刷新github,可以看到publish成功

将别人的项目clone到自己的idea中

  1. VCS -> Checkout from Version Control -> Git
  2. 填入地址
  3. Test测试

Clone 不需要登陆账号和密码

解决代码冲突

编辑文件删除冲突代码 git add 文件名 git commit -m 日志 (这里不要添加文件名)

避免代码冲突

  1. 多人修改统一文件,导致冲突。
  2. 分工明确 少操作相同文件
  3. 使用IDEA可以自动检测更新
  4. 提交前 更新(push钱pull)

分支

分支就是主干的一个克隆

  1. 保证安全,如果分支开发失败,删除不影响主干
  2. 保证效率,多个分支一起并行工作,完成即可合并到主干
  • git branch -v 查看当前分支情况
  • git branch hot_fix 创建一个hot_fix分支
  • git checkout hot_fix 切换到hot_fix分支
  • 建议不要在主干master上直接操作。
  • 合并分支,需要先切换到主干master上 git checkout master 然后执行命令 git merge hot_fix