本文架构

git java生成DDL java中的git_远程库

一.git的概述

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

1.git和SVN的原理区别

svn

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

git java生成DDL java中的git_git_02

git

为了解决svn的单点故障,git在本地同样也有一个本地库,并且代码只有commit到了本地库,在由本地库推送到远程的github仓库,所以如果远程的git如果丢失了,我们完全可以从任何一台机器上推送到其他的任何库中.

git java生成DDL java中的git_git_03


2.git的四个区域

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

git java生成DDL java中的git_git java生成DDL_04


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 1111@qq.com (设置邮箱)
  • 系统用户级别的签名(全局设置)
    git config --global user.name zhangsan
    git config --global user.email 1111@qq.com

git config --list

查看是否配置了签名

git java生成DDL java中的git_远程库_05

2.git提交到本地的命令

(1) git status

查看当前项目的状态

git java生成DDL java中的git_本地库_06


(2) 工作区 <==> 暂存区

  • git add 文件名 (将工作区的文件添加到暂存区)
  • git rm --cached 文件名 (将暂存区的文件删除)

    (3) 暂存区 ===> 本地库
    git commit -m “提交的说明” 文件名

注意:提交说明是指明你本次提交的代码是修改了哪些功能,方便我们检查提交日志做代码回滚.

git java生成DDL java中的git_本地库_07

重新编辑已经提交的文件,查看状态

git java生成DDL java中的git_git java生成DDL_08

3.git版本回退

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

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

  1. git log (这是现实完整的log记录)
    空格:下一页
    B:上一页
    Q:退出
  2. git java生成DDL java中的git_本地库_09

  3. git log --oneline
  4. git reflog
  5. git java生成DDL java中的git_本地库_10

  6. git reflog|grep 版本号

    (2) 版本回退(可以恢复删除的文件,恢复到删除文件之前的版本就可以)
  1. 版本回退的原理
    原理就是移动head指针,head表示当前版本的指针,我们回退到指定版本,则就head指针指向具体的版本

git java生成DDL java中的git_git_11


1) 版本回退命令

git reset --hard [局部索引值]

git java生成DDL java中的git_远程库_12


(3) git diff 对比文件1)对比工作区和暂存的文件

git diff [文件名]

说明:有文件名就是对比的某个文件,没有指定文件名就是对比的整个工作区和暂存区

git java生成DDL java中的git_git_13


2)对比工作区和本地库的文件

git diff head [文件名]

说明:有文件名就是对比的某个文件,没有指定文件名就是对比的整个工作区和本地库

git java生成DDL java中的git_git java生成DDL_14

4.git分支

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

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

(3)切换分支

git checkout 分支名字

git checkout -b mybranch #创建并切换分支

git java生成DDL java中的git_git_15


(4)合并分支

①需要合并的分支,修改的内容一定是提交到本地库中了的.

②切换到主分支

git merge 分支名

git java生成DDL java中的git_本地库_16


(5) 版本冲突

1)产生冲突

两个分支在没有合并的情况下,对同一个文件作出了修改,则产生冲突

git java生成DDL java中的git_git java生成DDL_17


2)手动编辑文件 vim a.txt

产生冲突的文件,会在该文件中标明冲突的地方

git java生成DDL java中的git_本地库_18


3)重新将文件提交到本地库

修改完成之后,重新将文件提交到本地库,其实解决分支的原理就是,本分支知晓了其他分支修改了本文件,我已经修改了文件并且提交到本地库,则就解决了冲突

git java生成DDL java中的git_git java生成DDL_19


git分支其他命令:

创建一个tag版本: git tag 版本名称 #常用于项目封板,打一个tag

git父子module: git submodule … #常用于关联git的不同repository

创建分支: $ git branch mybranch

切换分支: $ git checkout mybranch

创建并切换分支: $ git checkout -b mybranch

更新master主线上的东西到该分支上:$git rebase master

切换到master分支:$git checkout master

更新mybranch分支上的东西到master上:$git rebase mybranch

提交:git commit -a

对最近一次commit的进行修改:git commit -a –amend

commit之后,如果想撤销最近一次提交(即退回到上一次版本)并本地保留代码:git reset HEAD^
合并分支:(merge from) $ git checkout master
$ git merge mybranch (merge from mybranch)
删除分支: $ git branch -d mybranch
强制删除分支: $ git branch -D mybranch
列出所有分支: $ git branch
查看各个分支最后一次提交: $ git branch -v

查看哪些分支合并入当前分支: $ git branch –merged

查看哪些分支未合并入当前分支: $ git branch –no-merged

更新远程库到本地: $ git fetch origin
推送分支: $ git push origin mybranch
取远程分支合并到本地: $ git merge origin/mybranch
取远程分支并分化一个新分支: $ git checkout -b mybranch origin/mybranch
删除远程分支:

$ git push origin :mybranch
rebase: $ git checkout mybranch
 $ git rebase master (rebase from master)

举例:

$ git checkout server
 $ git rebase –onto master server client
 $ git checkout master
 $ git merge client (fostforward)
 $ git rebase master server (checkout sever)
 $ git merge server
 $ git branch -d client
 $ git branch -d server

三. github

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

1.基本概念
  • Repository 仓库(存放代码的文件夹)
  • Star 收藏(本项目被收藏了多少)
  • Fork 复制克隆仓库(本项目本复制克隆了多少,我们点击fork就是把这个仓库复制到本地,并在本地账号也复制一个一模一样的仓库)
  • Watch 关注(如果别人做了更新的操作,则我们会受到通知)
2. 3个页面
  1. Github 主页(登陆的界面等)
  2. 仓库主页(就是仓库的信息,关注,收藏,fork等)
  3. 个人主页(个人的信息主页)
3.仓库管理

(1)仓库主页

git java生成DDL java中的git_git java生成DDL_20


(2) 创建文件

git java生成DDL java中的git_远程库_21


(3)文件编辑

git java生成DDL java中的git_远程库_22


(4) 删除文件

git java生成DDL java中的git_git java生成DDL_23


(5)上传文件

git java生成DDL java中的git_远程库_24


git java生成DDL java中的git_git_25


(6) 搜索仓库文件

git java生成DDL java中的git_git_26


git java生成DDL java中的git_git_27


(7) 下载项目

git java生成DDL java中的git_本地库_28

4.issues的使用

git java生成DDL java中的git_git_29


(1) 新建问题讨论

git java生成DDL java中的git_git_30


(2) 填写标题/具体描述/提交

git java生成DDL java中的git_本地库_31


(3)该仓库的主人收到issues

git java生成DDL java中的git_git java生成DDL_32


(4) 仓库主人处理issues帖子,回帖/关闭帖子

git java生成DDL java中的git_本地库_33

5.项目

(1) 在gitHub上搜索别人的项目

git java生成DDL java中的git_本地库_34


(2) 关注/收藏/复制

git java生成DDL java中的git_本地库_35


查看我的收藏项目

git java生成DDL java中的git_本地库_36


(3) fork别人的仓库(其实就是讲别人的仓库复制一个到自己的账户里)

git java生成DDL java中的git_git java生成DDL_37


(4) pull Request

这个主要是用于开源项目的,或者是跨团队开发,比如我有一个项目,其他人觉得我的项目很好,也想要贡献代码,则他先fork项目,之后在将项目拉取到本地,修改完成后再提交到他的远程库,然后在发起pull request,请求贡献代码.

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

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

1.设置连接的别名

git remote -v (查看当前设置的所有远程连接的别名)

git remote add [别名] [远程库的地址] (添加新的远程连接的别名)

git java生成DDL java中的git_本地库_38

2.拉取远程代码

(1) 克隆远程库到本地
git clone [远程库地址]

说明:
1.git clone 远程库地址,后面一定不能加参数,加参数就是给自己克隆的库起个其他的名字.这个就是完整的复制整个仓库,包括所有的分支,本地就可直接切换分支.
2.克隆如果是public库,克隆代码的不受限制的,任何人都可以去克隆代码,如下.

git java生成DDL java中的git_git_39


(2) 拉取

git pull [远程库地址也就是我们设置的remote别名] [分支名]

用来更新本地库代码用的.

说明:
1.如果要pull,首先的git init初始化本文件目录.git clone则不需要,因为克隆的整个仓库,而我们需要在仓库中自动就初始化了git文件,也就是已经加入了版本管理.
2.pull只能拉取单独一个分支,并且没有仓库的名字,而直接是远程仓库该分支下的所有的文件,同样也可修改提交,知识和远程库的架构就不相同了.
3.pull拉取的分支没法完整的对整个仓库进行版本控制,版本日志等.
2.git pull = git fetch(拉取并不修改本地库中的文件) + git merge
(修改本地库中的文件,其实就相当于合并分支的意思)

git java生成DDL java中的git_git_40

3.推送代码到远程库

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

(1)推送到自己的远程库

git push 推送并登陆输入用户名和密码

git java生成DDL java中的git_远程库_41


推送成功

git java生成DDL java中的git_本地库_42

(2) 团队开发,推送到其他人远程库

push权限不是每一个人都拥有的,如果没有将您添加到团队中,则直接提交会出现如下.

git java生成DDL java中的git_远程库_43


①该github仓库的所有者添加新的团队成员的github账户

git java生成DDL java中的git_git java生成DDL_44


②被邀请的人员,需要接收邀请,点击accept

git java生成DDL java中的git_远程库_45


③push 代码,输入用户名和密码

git java生成DDL java中的git_git_46

4.SSH免密登陆

(1)进入当前操作系统的用户目录

cd ~

(2)删除以前的ssh秘钥

rm -rf .ssh/

(3)生成秘钥

ssh-keygen -t rsa -C 邮箱 (生成.ssh文件,也就是秘钥)

连续三次回车即可,不用输入密码.

git java生成DDL java中的git_git_47


(4)进入我们生成的.ssh文件夹,查看公钥 public

git java生成DDL java中的git_git_48


(5)进入我们的gitHub仓库,将我们的公钥设置进去

git java生成DDL java中的git_远程库_49


(5.5) 测试是否设置成功

ssh -vT git@github.com

git java生成DDL java中的git_远程库_50


git java生成DDL java中的git_本地库_51

(6)在本地仓库配置远程仓库ssh地址,并且推送文件

git java生成DDL java中的git_远程库_52

4.版本冲突

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

  1. 如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉 取。
  2. 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
5.跨团队协作

跨团队协作流程

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

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

补充:
上传本地项目到远程的空项目中;
本地项目目录中
步骤1 git init
步骤2 git remote add origin 远程库地址
步骤3 git add .
步骤4 git commit -m “init”
步骤5 git push -u origin master