博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git 基础教程
阅读量:3947 次
发布时间:2019-05-24

本文共 4823 字,大约阅读时间需要 16 分钟。

Git 基础教程

1. 引言

  • 单人开发过程中,需要进行版本管理,以利于开发进度的控制
  • 多人开发过程中,不仅需要版本管理,还需要进行多人协同控制

2. 介绍

  • Git 是一个开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
  • 官网:

3. Git 安装

  • 下载 Git

  • 安装 Git(下一步即可)

# 安装后,打开终端# 如下信息会在提交代码时要使用,记录在你的每次提交中,以后才知道哪次提交是谁做的# `git log` 可以查看# 执行git config --global user.name "Name" # 用户名git config --global user.email "Email" # 邮箱# 查看信息git config -l# 测试: 终端中执行,查看 git 版本git version

4. 架构

  • 版本库:工作区中有一个隐藏目录 .git , 这个目录不属于工作区,而是 git 的版本库,是 git 管理的所有内容
  • 暂存区:版本库中包含一个临时区域保存下一步要提交的文件
  • 分支:版本库中包含若干分支,提交的文件存储在分支中
    在这里插入图片描述

5. 仓库

  • 对应的就是一个目录,这个目录中的所有文件被 git 管理起来
  • 以后会将一个项目的根目录,作为仓库
  • 仓库中的每个文件的改动都由 git 跟踪

5.1 新建仓库

# 选择一个空目录,执行指令:`git init`# Initialized empty Git repository in "文件目录"# 初始化了一个空白的 git 仓库# 目录上出现一个略显白色的 .git 隐藏文件夹# 暂存与分支都会存在这个文件夹中

在这里插入图片描述

# 整体的文件目录空间## git 仓库目录## 工作区

在这里插入图片描述

5.2 工作区

  • 执行 git init 的目录即为工作区,不包含 .git 目录
  • 所有文件,都首先在工作区新建,然后可以存入仓库(版本库),进行版本控制

5.3 暂存区

  • 暂存区

5.4 分支

6. 基本操作

6.1 查看仓库状态

  • 执行 git status 可以看到工作区中文件的状态
    在这里插入图片描述
# No commits yet		还没有任何的提交过程# Untracked files:		文件未跟踪  # test.html				test 文件就是未跟踪的文件# nothing added to commit but untracked files present# 除了未跟踪的文件外,没有添加到提交

6.2 暂存文件

  • 执行 git add .工作区中的文件全部存入暂存区
    在这里插入图片描述
# git add . 将文件`从工作区提交到暂存区`# . 代表工作区中所有的文件# 提交到暂存区后将不是未跟踪的状态# `test` 文件变为 `new file`, 即仓库中`新建的文件`# `test` 文件存放到`暂存区`中

6.3 提交文件

  • 执行 git commit -m 'xxx'暂存区中的文件全部存入分支,形成一个版本
    在这里插入图片描述
# git commit -m 'xxx'# -m 为 -message 的缩写# 'xxx' 为此分支的`描述信息`# -m 'xxx' 为必填项

7. 远程仓库

  • 当多人协同开发时,每人都在自己的本地仓库维护版本
  • 但很重要的一点是,多人之间需要共享代码,合并代码,此时就需要一个远程仓库

7.1 远程仓库工作模式

在这里插入图片描述

7.2 远程仓库选型

  • 有很多远程仓库可以选择,比如 github(),码云()
  • 此两种可以注册自己测试使用,但是如果是商业项目,需要更多支持需要付费
  • 公司内部也可以有自己构建的远程仓库

7.3 基本操作

  • 每个开发人员,在面对远程仓库时,会面临的一些基本操作
7.3.1 注册 git 服务器账号
  • 码云注册账号,并登录
7.3.2 新建远程仓库

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

# 新建仓库(空仓库/裸库)# 自动添加路径# `zx` 为用户名# `zxwin_git` 为远程仓库的名字# `HTTPS/SSH` 为远程仓库访问的两种协议## 即 `https://gitee.com/zhang_xin12138/zxwin_git.git`为`zxwin_git`远程仓库`https`协议下的远程地址## 即 `git@gitee.com:zhang_xin12138/zxwin_git.git`为`zxwin_git`远程仓库`ssh`协议下的远程地址
7.3.3 本地关联远程仓库
  • 执行 git remote add origin 远程地址 将远程地址都关联到本地,这样本地才知道要找哪个远程地址
    在这里插入图片描述
  • git remote -v 查看关联的地址
  • 地址名 + 地址
    在这里插入图片描述
7.3.4 推送文件到远程仓库
  • 执行 git push origin master
  • 输入用户名密码
  • 完成上传(将本地 master 传给远程 master
  • 将本地仓库中已经 commit 的内容 push 到远程仓库,以共享自己的代码
    在这里插入图片描述
    在这里插入图片描述
7.3.5 克隆远程仓库
  • 如果仓库已经由别人创建完毕,我们需要其中的内容,则可以通过 git clone 仓库地址 将其复制到本地
    在这里插入图片描述
  • 当远程仓库内容更新后
  • 进入克隆在本地的远程仓库
  • git pull origin master 拉取远程仓库修改后的内容
  • 1 file changed 为远程仓库更新的文件
    在这里插入图片描述
7.3.6 更新远程仓库内容
  • 修改本地的项目文件后
  • git add . 存入暂存区
  • git commit -m "xxx" 存入分支
  • git push origin master 推送新增的文件到远程仓库
    在这里插入图片描述
7.3.7 命令汇总
命令 作用
git remote add origin 远程地址 本地关联远程仓库
git push origin master 将本地仓库内容上传到远程仓库
git pull origin master 从远程仓库下载内容到本地仓库
git clone 远程地址 将远程仓库复制到本地,并自动形成一个本地仓库

8. 分支

8.1 分支简介

  • 分支,是一个个版本最终存储的位置
  • 分支,就是一条时间线,每次 git commit 形成一个个版本,一个个版本依次存储在分支的一个个提交点上
    在这里插入图片描述

8.2 分支基操

8.2.1 查看分支
  • 查看当前仓库的分支 git branch
  • 仓库中默认只有 master 分支
  • 执行 git commit 时,默认是在 master 分支上保存版本
    在这里插入图片描述
8.2.2 创建分支
  • 在商业项目开发过程中,我们不会轻易的在 master分支 上做操作
  • 我们会新建一个开发用的分支,在此分支上做版本的记录
  • 当代码确实没有问题时,才会将开发分支上成熟的代码版本添加到master分支
  • 既保证开发过程中,可以及时记录版本,有保证master分支上每个提交点都是稳健版本
    在这里插入图片描述
  • *号标记的为有效分支
  • git commit 提交的文件依然提交给master分支
8.2.3 切换分支
  • 默认情况下,当前使用的分支是master分支
  • 可以切换到dev分支,则后续的git commit便会在dev分支上新建版本(提交点)
    在这里插入图片描述

8.3 新建分支细节

8.3.1 新分支初始内容
  • 每个分支都有一个指针,新建一个分支,首先是新建一个指针
  • 而且新分支的指针会和当前分支指向同一个提交点
  • 新分支包含的提交点就是从第一个提交点到分支指针指向的提交点
    在这里插入图片描述
8.3.2 多分支走向
  • master分支新分支,分别进行git addgit commit
  • 分支情况如下图
    在这里插入图片描述
    在这里插入图片描述
8.3.3 分支提交日志
  • 查看分支的提交日志,进而看到分支中提交点的详细情况
  • git log --online 简易日志
  • git log 完整日志

8.4 分支合并

  • 两个分支内容的合并
  • git merge 分支a 合并分支a
  • 合并的方式有两种: 快速合并三方合并
8.4.1 快速合并
  • 如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是移动指针即可
    在这里插入图片描述
    在这里插入图片描述
8.4.2 三方合并
  • 在不具备快速合并的条件下,会采用三方合作
    在这里插入图片描述
    在这里插入图片描述
8.4.3 合并冲突
  • 两个分支进行合并,但他们含有对同一个文件的修改,则在合并时出现冲突git无法决断该保留改文件哪个分支的修改

  • 冲突演示

    • master 分支修改a文件
    • div 分支修改a文件
    • master分支 合并dev分支
      • git merge dev
      • 出现冲突: CONFLICT(content): Merge conflict in a文件
    • 此时,打开a文件
      • 冲突后,git会将两个分支的内容都展示在文件中
      • 两个分支的内容用 <<<<< ====== >>>>>>>做了分隔
  • 冲突解决

    • 出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容
    • 解决方案:
      1. 保留某一方的,删除另一方的
      2. 保留双方的
      3. 但无论如何,要记得删除 <<< === >>> 这些
      4. 本质是两人协商为冲突的内容,定制出合理的内容

9. Idea 关联 Git

9.1 关联 git

  • File > Settings 关联过程是自动的

9.2 创建仓库

新建项目后,将项目目录创建为git仓库

  • 注意: 要设置忽略文件.gitignore
  • 作用: 被忽略的文件会被版本记录忽略,版本中不包含他们
  • 范围: 不需要和其他开发共享的文件

9.3 提交 commit

  • 创建好仓库后,做第一次提交
  • VCS/Commit...
  • Unversioned Files 4 files

9.5 上传到远程仓库 push

  • VCS/Git

9.7 更新本地项目

  • 如果远程仓库有更新,则本地项目也需要一起更新
  • VCS/Git/Pull

9.8 冲突解决

  • 合并分支时,如果出现冲突,则需要解决冲突
  • 冲突出现,弹窗中可以选择如下
    • Accept Yours 保留本地
    • Accept Theirs保留远程
    • 有更多复杂的要求可以选择"Close",然后在idea中修改,再commit

10. 多人协同开发

  • 多人协同开发,git操作

10.1 项目管理员

  1. 由管理员负责创建一个远程库,初始的库中什么也没有,为裸库。库的名称建议和项目同名
  2. 管理员会在idea中创建一个初始项目,其中包含.gitignore文件,并在项目根目录下建立本地库,并建立dev分支
  3. 管理员将本地库上传到远程库
  4. 将其他开发人员拉入远程库的开发成员列表中,使得其他开发人员可以访问该远程库
10.1.1 邀请用户

在这里插入图片描述

10.1.2 设置分支

在这里插入图片描述

10.2 开发人员

  1. 初始化: 在ideaclone远程库,获取项目。会建立本地库
  2. 后续的开发中,都要在dev分支上进行。开发完一个功能并测试通过后就commit提交到本地的dev分支中,然后上传(push)到远程dev分支
  3. 需要更新项目内容时,通过pull从远程仓库拉取内容
  4. 注意: 多人协同时,每次在push到远程库前,都先做一次pull
    • 一来是把远程最新内容合并到本地
    • 二来是核实本地内容是否和远程内容有冲突
  5. 后续的开发,会接到一个个的功能任务,往复操作2,3,4

11. 经典问题

  • 在使用https协议做push时,如果曾经使用过码云,但密码有过改动,此时会报错
  • 使用https协议报错
    • You do not have permission to push to the repository via HTTPS
  • 解决方案:
    • 控制面板 > 凭据管理器 > 删除对应凭证,再次使用时会提示重新输入密码
    • 删除之前的码云凭证,然后重新push即可(输入用户名,密码)

12. 总结

  • 企业做项目肯定是多人合作开发,这时候需要用Git协调任务,这里看网上教学视频,做的笔记

转载地址:http://hdqwi.baihongyu.com/

你可能感兴趣的文章
android 用svn管理的版本编译出来有问题
查看>>
android 如何用jar包代替java代码编译
查看>>
android 数据连接关闭的情况下如何让彩信发不出去
查看>>
android 编辑彩信,加入几页铃声,预览暂停界面,铃声名字不见了
查看>>
android 在新建短信时,加入名称为","(英文逗号)的联系人时,应用崩溃的修改
查看>>
android 关于LCD背光调节渐变过程引起背光闪烁问题
查看>>
android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
查看>>
android 在手机中预置联系人/Service Number
查看>>
android 系统语言为英语时,Contacts联系人名字含有特殊前缀后缀(Dr. Mr. Lt等)时的相关问题处理
查看>>
android 短信下,添加联系人,进入联系人多选界面出现联系人电话号码晃动的问题
查看>>
android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题
查看>>
正确学习javascript。困惑的指南
查看>>
SERO幻影社区的背景怎么样?几大主流隐私币种技术分析!
查看>>
SERO目前具备的十大技术特点
查看>>
Neo4j CQL语句学习Day3
查看>>
Neo4j CQL学习Day4
查看>>
Mysql 数据库
查看>>
MySQL数据库练习
查看>>
Neo4j学习Day5
查看>>
Tomcat的基本配置
查看>>