69.java项目-activiti实战项目(15)--git/github

本文架构
69.java项目-activiti实战项目(15)--git/github

一.git的概述

git是一个分布式的版本管理工具,用于代码的管理.

1.git和SVN的原理区别

svn
代码统一交由代码库管理,我们开发人员编写代码的时候需要从远程库下载,再编写.如果代码库宕机或者出现故障,则我们将丢失代码的版本,修改等等,因为我们本地只有代码,没有这个项目的所有变更的细节----这就是单点故障
69.java项目-activiti实战项目(15)--git/github

git
为了解决svn的单点故障,git在本地同样也有一个本地库,并且代码只有commit到了本地库,在由本地库推送到远程的github仓库,所以如果远程的git如果丢失了,我们完全可以从任何一台机器上推送到其他的任何库中.
69.java项目-activiti实战项目(15)--git/github
2.git的四个区域

  • 工作区: 这是我们本地编写代码的工作区域
  • 暂存区: 这是使用git add 存放代码的区域,这个区域其实有几个作用,其一,因为代码如果省略的暂存区这一步,直接提交代码,风险会比较大,其二,我们可以把我们想要提交的代码统一添加到暂存区,在commit到代码库时可以统一审阅.
  • 本地库: 本地库就是管理本地代码的本地仓库,他管理着本项目的所有代码,包括代码日志,代码回滚,推送远程等等
  • 远程库: 远程库,就是我们在共享代码的时候,需要将代码托管到一个远程库中,例如github/gitlab/gitee等等,这些其实都是为了和其他人协作开发代码.

69.java项目-activiti实战项目(15)--git/github
3.git的使用
git有两种操作方式,一种是git GUI,界面操作方式,一种是git bash命令行操作模式,命令行操作模式是完全契合linux操作系统的,和linux上操作完全一致.

4. git 的功能

  1. 协同修改 - 多人并行不悖的修改服务器端的同一个文件。
  2. 数据备份 - 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
  3. 版本管理 - 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式,有点类似于redis的RDB(内存快照)
  4. 权限控制 - 对团队中参与开发的人员进行权限控制。 对团队外开发者贡献的代码进行审核——Git 独有。
  5. 历史记录 - 查看修改人、修改时间、修改内容、日志信息。  将本地文件恢复到某一个历史状态。
  6. 分支管理 - 允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

二.Git命令

1.git初始化命令

相当于把这个文件目录交由git管理

(1)git init
在具体的文件目录中使用git init命令,初始化本文件目录为git管理,自动生成一个.git目录

(2) 设置签名
这个和我们的git账号和密码没有关系,这个只是我们提交代码的标识是谁提交的而已
Git config

  • 项目级别的签名
    git config user.name zhangsan (设置用户名)
    git config user.email [email protected] (设置邮箱)
    69.java项目-activiti实战项目(15)--git/github
  • 系统用户级别的签名(全局设置)
    git config --global user.name zhangsan
    git config --global user.email [email protected]
    69.java项目-activiti实战项目(15)--git/github

git config --list
查看是否配置了签名
69.java项目-activiti实战项目(15)--git/github

2.git提交到本地的命令

(1) git status
查看当前项目的状态
69.java项目-activiti实战项目(15)--git/github
(2) 工作区 <==> 暂存区

  • git add 文件名 (将工作区的文件添加到暂存区)
    69.java项目-activiti实战项目(15)--git/github
  • git rm --cached 文件名 (将暂存区的文件删除)
    69.java项目-activiti实战项目(15)--git/github
    (3) 暂存区 ===> 本地库
    git commit -m “提交的说明” 文件名

注意:提交说明是指明你本次提交的代码是修改了哪些功能,方便我们检查提交日志做代码回滚.
69.java项目-activiti实战项目(15)--git/github

重新编辑已经提交的文件,查看状态
69.java项目-activiti实战项目(15)--git/github

3.git版本回退

这个功能是我们如果代码编写出现问题,可以将我们的代码回退到某一个版本

(1) 查看当前项目的commit历史

  1. git log (这是现实完整的log记录)
    空格:下一页
    B:上一页
    Q:退出
    69.java项目-activiti实战项目(15)--git/github

  2. git log --oneline

  3. git reflog
    69.java项目-activiti实战项目(15)--git/github

  4. git reflog|grep 版本号
    69.java项目-activiti实战项目(15)--git/github
    (2) 版本回退(可以恢复删除的文件,恢复到删除文件之前的版本就可以)

    1. 版本回退的原理
      原理就是移动head指针,head表示当前版本的指针,我们回退到指定版本,则就head指针指向具体的版本

69.java项目-activiti实战项目(15)--git/github
1) 版本回退命令
git reset --hard [局部索引值]
69.java项目-activiti实战项目(15)--git/github
(3) git diff 对比文件

1)对比工作区和暂存的文件
git diff [文件名]
说明:有文件名就是对比的某个文件,没有指定文件名就是对比的整个工作区和暂存区
69.java项目-activiti实战项目(15)--git/github
2)对比工作区和本地库的文件
git diff head [文件名]
说明:有文件名就是对比的某个文件,没有指定文件名就是对比的整个工作区和本地库
69.java项目-activiti实战项目(15)--git/github

4.git分支

(1)查看当前所有的分支
git branch -v

(2)创建分支
git branch 分支名字

(3)切换分支
git checkout 分支名字

69.java项目-activiti实战项目(15)--git/github
(4)合并分支
①需要合并的分支,修改的内容一定是提交到本地库中了的.
②切换到主分支
git merge 分支名
69.java项目-activiti实战项目(15)--git/github
(5) 版本冲突
1)产生冲突
两个分支在没有合并的情况下,对同一个文件作出了修改,则产生冲突
69.java项目-activiti实战项目(15)--git/github
2)手动编辑文件 vim a.txt
产生冲突的文件,会在该文件中标明冲突的地方
69.java项目-activiti实战项目(15)--git/github
3)重新将文件提交到本地库
修改完成之后,重新将文件提交到本地库,其实解决分支的原理就是,本分支知晓了其他分支修改了本文件,我已经修改了文件并且提交到本地库,则就解决了冲突
69.java项目-activiti实战项目(15)--git/github

三. github

github是一个代码托管平台,方便了我们代码的共享,协同开发等.

1.基本概念

  • Repository 仓库(存放代码的文件夹)
  • Star 收藏(本项目被收藏了多少)
  • Fork 复制克隆仓库(本项目本复制克隆了多少,我们点击fork就是把这个仓库复制到本地,并在本地账号也复制一个一模一样的仓库)
  • Watch 关注(如果别人做了更新的操作,则我们会受到通知)

2. 3个页面

  1. Github 主页(登陆的界面等)
  2. 仓库主页(就是仓库的信息,关注,收藏,fork等)
    69.java项目-activiti实战项目(15)--git/github
  3. 个人主页(个人的信息主页)

3.仓库管理

(1)仓库主页
69.java项目-activiti实战项目(15)--git/github
(2) 创建文件
69.java项目-activiti实战项目(15)--git/github
(3)文件编辑
69.java项目-activiti实战项目(15)--git/github
(4) 删除文件
69.java项目-activiti实战项目(15)--git/github
(5)上传文件
69.java项目-activiti实战项目(15)--git/github
69.java项目-activiti实战项目(15)--git/github
(6) 搜索仓库文件
69.java项目-activiti实战项目(15)--git/github
69.java项目-activiti实战项目(15)--git/github
(7) 下载项目
69.java项目-activiti实战项目(15)--git/github

4.issues的使用

69.java项目-activiti实战项目(15)--git/github
(1) 新建问题讨论
69.java项目-activiti实战项目(15)--git/github
(2) 填写标题/具体描述/提交
69.java项目-activiti实战项目(15)--git/github
(3)该仓库的主人收到issues
69.java项目-activiti实战项目(15)--git/github
(4) 仓库主人处理issues帖子,回帖/关闭帖子
69.java项目-activiti实战项目(15)--git/github

5.项目

(1) 在gitHub上搜索别人的项目
69.java项目-activiti实战项目(15)--git/github
(2) 关注/收藏/复制
69.java项目-activiti实战项目(15)--git/github
查看我的收藏项目
69.java项目-activiti实战项目(15)--git/github
(3) fork别人的仓库(其实就是讲别人的仓库复制一个到自己的账户里)
69.java项目-activiti实战项目(15)--git/github
(4) pull Request
这个主要是用于开源项目的,或者是跨团队开发,比如我有一个项目,其他人觉得我的项目很好,也想要贡献代码,则他先fork项目,之后在将项目拉取到本地,修改完成后再提交到他的远程库,然后在发起pull request,请求贡献代码.

  1. Fork项目
  2. 修改自己仓库的项目代码
  3. 新建pull Request,发起一个请求
  4. 等待原项目的作者审核我们提交的request看是否选择合并.

四. git本地库 < == > github远程库

1.设置连接的别名

git remote -v (查看当前设置的所有远程连接的别名)
git remote add [别名] [远程库的地址] (添加新的远程连接的别名)
69.java项目-activiti实战项目(15)--git/github

2.拉取远程代码

(1) 克隆远程库到本地
git clone [远程库地址]
说明:
克隆如果是public库,克隆代码的不受限制的,任何人都可以去克隆代码,如下.
69.java项目-activiti实战项目(15)--git/github
(2) 拉取
git pull [远程库地址也就是我们设置的remote别名] [分支名]

说明:
git pull = git fetch(拉取并不修改本地库中的文件) + git merge
(修改本地库中的文件,其实就相当于合并分支的意思)

69.java项目-activiti实战项目(15)--git/github

3.推送代码到远程库

git push [远程库名] [分支名]

(1)推送到自己的远程库
git push 推送并登陆输入用户名和密码
69.java项目-activiti实战项目(15)--git/github
推送成功
69.java项目-activiti实战项目(15)--git/github

(2) 团队开发,推送到其他人远程库
push权限不是每一个人都拥有的,如果没有将您添加到团队中,则直接提交会出现如下.
69.java项目-activiti实战项目(15)--git/github
①该github仓库的所有者添加新的团队成员的github账户
69.java项目-activiti实战项目(15)--git/github
②被邀请的人员,需要接收邀请,点击accept
69.java项目-activiti实战项目(15)--git/github
③push 代码,输入用户名和密码
69.java项目-activiti实战项目(15)--git/github

4.SSH免密登陆

(1)进入当前操作系统的用户目录
cd ~
(2)删除以前的ssh秘钥
rm -rf .ssh/
(3)生成秘钥
ssh-****** -t rsa -C 邮箱 (生成.ssh文件,也就是秘钥)
69.java项目-activiti实战项目(15)--git/github
(4)进入我们生成的.ssh文件夹,查看公钥 public
69.java项目-activiti实战项目(15)--git/github
(5)进入我们的gitHub仓库,将我们的公钥设置进去
69.java项目-activiti实战项目(15)--git/github
(6)在本地仓库配置远程仓库ssh地址,并且推送文件
69.java项目-activiti实战项目(15)--git/github

4.版本冲突

因为多人同时修改这个项目,则如果下载的项目不是最新的项目,并作出了修改,推送到远程库,则必然产生冲突.
要点:

  1. 如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉 取。

  2. 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。

5.跨团队协作

跨团队协作流程

  1. Fork 需要合作的仓库的地址
  2. 自己克隆自己的远程仓库,并编写代码修改,并且提交到远程库
  3. 发起pull request 将自己仓库中修改的地方提交到fork的仓库中去.
  4. 该仓库的拥有者审核我们的提交请求,同意提交.

以上就是一个完成的跨团队的协作的流程.