2_Git

一. 引言

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

二. 介绍

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

三. Git安装

3.1 下载Git

3.2 安装

  • 除了安装的位置外, 其他一直点下一步即可

3.3 基本配置

  • 安装后, 打开cmd(或者在桌面鼠标右键 Git Bash Here ), 自报家门
  • 如下信息会在提交代码时使用, 记录在你的每次提交中, 以后才知道哪次提交是谁做的
git config --global user.name "用户名" #用户名
git config --global user.email "邮箱" #邮箱
查看信息
git config -l #如果出现: 或者end 输入q即可退出

3.4 测试

  • 查看git版本
git version

四. 架构

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

五. 仓库

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

5.1 新建仓库

  • 选择一个目录, 例如D:/GitSpace 执行命令: git init
  • 在此目录下, 会新建一个 .git 目录(默认是隐藏的), 即仓库对应目录

5.2 工作区

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

5.3 暂存区

  • 暂存区也在 . git 目录内, 工作区的文件进入仓库时, 要先进入暂存区

5.4 分支

  • 版本控制, 简单说, 就是记录文件的诸多版本, 分支就是这些版本的最终记录位置

六. 基本操作

6.1 查看仓库状态

  • 执行 git status 可以看到工作区中文件的状态

6.2 暂存文件

  • 执行 git add . ,将工作区中的文件全部 *存入暂存区

6.3 提交文件

  • 执行 git commit -m “这里写提交的描述信息” 作用是将暂存区的文件存入版本库中的分支, 形成一个版本

七. 远程仓库

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

7.1 远程仓库工作模式

  • workspace(add)—->localCache(commit)—->localRepository(push)—->remoteRepository(clone)—->localRepository(checkout)—->branch workspace
  • 本地工作区添加到 本地暂存区
  • 从本地暂存区提交到 本地仓库
  • 从本地仓库上传到 远程仓库(共享区域)
  • 从远程仓库中复制到 本地仓库
  • 在本地仓库切换分支然后后续的 git commit便会在此分支上新建版本(提交点)

7.2 远程仓库选型

7.3 基本操作

  • 每个开发人员, 在面对远程仓库时, 会面临的一些基本操作
7.3.1 注册git服务器账号
  • 码云 注册账号, 并登录
  • 进入公司后, 很可能会使用公司自己搭建的git服务器, 向领导索要账号即可
7.3.2 新建远程仓库
  1. 通过网站右上角的「+」号,选择「新建仓库」,进入新建仓库页面
  2. 在新建仓库页面填写仓库信息。仓库相关概念说明如下:
  3. 仓库名称: 仓库的名称,用于仓库命名
  4. 归属:仓库归属账户,可以是个人账号/组织/企业中的一种,创建成功后该账户默认为仓库的拥有者(管理员)
  5. 路径:仓库的git访问路径,由 用户个性地址+仓库路径名称组成。创建仓库后用户将通过该路径访问仓库。
  6. 仓库介绍:仓库的简单介绍
  7. 是否开源:设置仓库是否为公开仓库,公开仓库对所有人可见,私有仓库仅限仓库成员可见。
  8. 选择语言:仓库主要开发用的编程语言
  9. 添加 .gitignore:系统默认提供的git忽略提交的文件模板,设置 .gitignore后将默认忽略指定目录/文件到仓库
  10. 添加开源许可证:如果仓库为公开仓库,可以添加设置仓库的开源协议,作为对当前项目仓库和衍生项目仓库许可约束,开源许可证决定了该开源项目是否对商业友好。
  11. Readme:项目仓库自述文档,通常包含有软件的描述或使用的注意事项。
  12. 使用 \*\*\*模板文件 初始化仓库:使用 IssuePull Request文件模板初始化仓库
  13. 输入相关选项, 点击创建
  14. 生成了两种类型的地址 HTTPS 和 SSH
7.3.3 本地关联远程仓库
  • 本文档选用仓库的https协议的地址, 将此地址关联到本地git中
git remote add origin https://gitee.com/MARSdoubleZ/git_repo.git
如果提示已经存在origin则先执行 git remote rm origin 把原先的origin删除掉
git remote -v #查看远程仓库地址
7.3.4 上传文件到远程仓库
  • 将本地仓库中已经commit的内容push到远程仓库, 以共享自己的代码
将本地master分支, 上传到远程master分支
git push origin master
上传时会有弹框, 需要输入码云的账号和密码
  • 这里可能会出现连接不上远程仓库的情况, 解决方式如下
方法一: 查一下代理, 如果有就清除
git config --global http.proxy
git config --global --unset http.proxy
git config --global https.proxy
git config --global --unset https.proxy
7.3.5 复制远程仓库
  • 如果仓库已经由别人创建完毕, 我们需要其中的内容, 则可以通过 git clone 将其复制到本地
复制
git clone 远程地址
复制来的内容, 自动形成了本地仓库
7.3.6 代码共享
  • 多人协同开发时, 写好代码的 git push 上传到远程仓库; 需要代码的 git pull 拉取代码即可
上传新版本
git commit -m "new file hello.txt" #本地新增版本
git push origin master #将本地的master分支的内容同步到远程仓库的master分支
获取新版本
git pull origin master #拉取远程仓库中的master分支内容
7.3.7 命令汇总
  • git remote add origin 远程地址
  • 本地关联远程仓库, origin是远程仓库的标识名
  • git push origin master
  • 将本地仓库内容上传到远程仓库的分支中
  • git pull origin master
  • 从远程仓库分支中下载内容到本地
  • git clone 远程地址
  • 将远程仓库复制到本地, 并自动形成一个本地仓库

7.8 生成/添加SSH公钥

  • Gitee 提供了基于 SSH协议的Git服务,在使用SSH协议访问仓库仓库之前,需要先配置好账户/仓库的SSH公钥。
  • 你可以按如下命令来生成 sshkey:
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"

注意:这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。
现网的大部分教程均讲解的使用邮箱生成,其一开始的初衷仅仅是为了便于辨识所以使用了邮箱。

  • 按照提示完成三次回车,即可生成 ssh key。通过查看 ~/.ssh/id_rsa.pub 文件内容,获取到你的 public key
cat ~/.ssh/id_rsa.pub
  • 复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的 public key 添加到仓库中。
  • 添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
  • 首次使用需要确认并添加主机到本机SSH可信列表。若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功。
  • 添加成功后,就可以使用SSH协议对仓库进行操作了。

八. 分支

8.1 分支简介

  • 分支, 是一个个版本最终存储的位置
  • 分支, 就是一条时间线, 每次 git commit 形成一个个版本, 一个个版本依次存储在分支的一个个提交点上
  • 分支由多个提交点组成, 分支上会有一个指针, 默认总是指向最新的提交点

8.2 分支操作

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

8.3 新建分支细节

  • 新建分支时, 新分支, 默认有哪些内容? 分支中包含了哪些次提交?
8.3.1 新分支初始内容
  • 每个分支都有一个 指针 , 新建一个分支, 首先是新建一个 指针
  • 而且新分支的指针会和当前分支指向 同一个提交点
  • 新分支包含的提交点就是从第一个提交点到分支指针指向的提交点
8.3.2 多分支走向
  • 在master分支和新分支, 分别进行 git addgit commit
  • 分支情况如下:
  • master分支未动, 在dev分支增加一次commit
  • master分支增加一个commit, dev再增加一个commit
8.3.3 分支提交日志
  • 查看分支的提交日志, 进而看到分支中提交点的详细情况
简易日志
git log --oneline
完整日志
git log

8.4 分支合并

  • 两个分支内容的合并
  • git merge 分支a 合并分支a
  • 合并的方式有两种: 快速合并 和 三方合并
8.4.1 快速合并
  • 如果分支A当前的修改, 是完全基于分支B的修改而来, 则分支B合并分支A, 就是移动指针即可
8.4.2 三方合并
  • 在不具备快速合并的条件下, 会采用三方合并
  • 将2和3的更改都累加在1上, 形成新的提交点
8.4.3 合并冲突
  • 两个分支进行合并, 但它们含有对同一个文件的修改, 则在合并时出现冲突, git无法判断该文件该保留哪个分支的修改
  • 发生冲突时, 两个分支的内容用 <<< === >>> 做了分隔
8.4.4 冲突解决
  • 出现冲突后, 要由两个开发人员当面协商, 该如何取舍, 为冲突文件定义最终内容
  • 解决方案:
  • 保留某一方的, 删除另一方的
  • 保留双方的
  • 但无论如何, 要记得删除 <<< === >>>
  • 本质是两人协商, 为冲突的内容定制出合理的解决方案

九. IDEA关联Git

9.1 关联Git

  • File > Settings > Version > Git > Path to Git executable
  • 一般情况下关联过程是自动的

2_Git

9.2 新建仓库

  • 新建项目后, 将项目目录创建为git目录
  • 注意: 要在建仓库前, 设置 忽略文件 “.gitignore” (在根目录下新建)
  • 作用: 被忽略的文件会被版本记录为忽略, 版本中不包含它们
  • 范围: 不需要和其他开发共享的文件, 具体见下图

*.class
*.jar
*.war
*.iml

.idea

out

target

jdbc.properties

2_Git
  • 然后点击VCS > Import into Version Control > Create Git Repository

2_Git
  • 然后选择项目目录, 作为导入git的目录

9.3 提交-commit

  • 创建好仓库后, 做第一次提交
  • VCS > Commit…

2_Git
  • 之后在弹出框Local Changes > Default Changelist下勾选所要上传的文件

2_Git
  • 之后可能会有些友好提示, 可以点击忽略, 点击 “commit”即可

9.4 创建分支

  • 新建开发分支
  • IDEA右下角

2_Git

2_Git

2_Git

9.5 上传到远程仓库(push)

  • 请首先按照第七章, 创建一个远程仓库
  • 要求是裸库, 且建议库名和项目名同名
  • VCS > Git > Push

2_Git

2_Git

9.6 复制到本地仓库(clone)

  • 如果有建好的远程仓库, 比如公司内已经在使用的仓库, 或者github, 码云上的一些公开仓库, 可以将远程仓库的项目复制到本地使用
  • VCS > Git > Clone

2_Git

2_Git

9.7 更新本地项目

  • 如果远程仓库有更新, 则你的本地项目也需要一起更新
  • VCS > Git > pull

2_Git

2_Git

9.8 冲突解决

  • 合并分支时, 如果出现冲突, 则需要解决冲突
  • 需要发生冲突的双方一起商讨出最佳解决方案

2_Git

2_Git

十. 多人协同开发

  • 多人协同开发, Git操作

10.1 项目管理员(项目经理)

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

2_Git

2_Git
  • master的分支设置为 protected分支, 只有管理员有权限将代码合并到其中, dev分支设置为 常规分支 所有开发人员都可以在其中合并代码

2_Git

2_Git

10.2 开发人员

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

十一. 经典问题

  • 在使用https协议做push时, 如果曾经使用过码云, 但密码有过改动, 此时会报错 remote: You do not have permission to push to the repository via HTTPS
  • 解决方案:
  • 控制面板 > 用户账户和家庭安全 > 凭据管理器 > 管理Windows凭据

2_Git

Original: https://www.cnblogs.com/qimu666/p/16565699.html
Author: 柒木木木
Title: 2_Git

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598768/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球