admin管理员组

文章数量:1545424

目录

一、GIT简介

1.版本控制的起源

2.常见的版本控制工具

3.集中式与分布式的区别

4.GIT与SVN的简单对比

5.GIT简介

二、GIT工作原理

三、GIT简单使用

1.GIT使用环境

2.GIT单人流程

3.GIT多人开发

四、GIT分支

1.查看分支

2.创建分支

3.切换分支

4.将分支提交到远程服务器

5.合并分支

6.删除分支

五、Gitflow 标准

1.准备阶段

2.开发阶段

3.准备上线阶段

4.项目上线

5.上线之后

六、GitHub的使用

1.注册GitHub账号

2.创建仓库

3.操作仓库

七、在WebStorm中如何使用git管理

1.操作仓库

2.git 管理

3.git 分支


一、GIT简介

1.版本控制的起源

现在的软件项目通常是由一个研发小组共同分析、设计、编码、维护以及测试的

针对团队开发需要解决以下问题:

  • 备份多个版本,费空间,费时间
  • 难以恢复至以前正确版本
  • 难以解决代码冲突困难
  • 难以追溯问题代码的修改人与修改时间
  • 无法进行权限控制
  • 项目版本发布困难

源代码管理工具就是为了解决上述问题便运营而生

版本控制:

  • 是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程
  • 是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统
    • 如果是开发团队中的一员,使用版本控制是强制性的!
    • 如果是单人开发,也强烈建议现在就开始使用版本控制!
  • 使用版本控制可以:
    • 不会对现有工作造成任何损害
    • 不会增加工作量
    • 添加新的功能拓展时,会变得更加容易

2.常见的版本控制工具

  • CVS 开启版本控制之门
    • CVS 1990年诞生,远古时代的主流源代码管理工具
  • SVN 集中式版本控制之王者
    • SVN:又称subversion,是CVS的接班人,是一款集中式源代码管理工具
    • 曾经是绝大多数开源软件的代码管理工具,前几年在国内软件企业使用最为普遍
  • GIT 分布式版本控制之伟大作品
    • GIT:一款分布式源代码管理工具,目前国内企业几乎都已经完成了从SVN到GIT的转换

3.集中式与分布式的区别

  • 集中式源代码管理

  • 分布式源代码管理

区别在于:

  • 集中式:开发者只能将代码提交到服务器;分布式:开发者可以提交到本地
  • 集中式:只有远程服务器上有代码数据库;分布式:每个开发者机器上都有一个代码数据库

SVN(集中式)

GIT(分布式)

4.GIT与SVN的简单对比

  • 速度

    • 在很多情况下,git的速度远远比SVN快
  • 结构
    • SVN是集中式管理,git是分布式管理
  • 其他
    • SVN使用分支比较笨拙,git可以轻松拥有无限个分支
    • SVN必须联网才能正常工作,git支持本地版本控制工作
    • 旧版本的SVN会在每一个目录下放置一个.svn,而git只会在根目录拥有一个.git

5.GIT简介

  • GIT是一款自由和开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目
  • 在所有分布式版本控制工具中,git是最快、最简单、最流行的。
  • 是Linux之父李纳斯的第二个伟大作品
    • 2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。
    • Linus为了辅助Linux内核的开发(管理源代码),迫不得己自己开发了一个分布式版本控制工具,从而Git诞生了

二、GIT工作原理

  • 工作区:就是我们用于存放代码的目录(除了.git目录以外的内容)
  • 版本库:.git目录,用于存储记录版本信息
    • 暂存区
    • 分支:git初始化后会自动生成一个默认分支master
    • HEAD指针:用于指向当前分支,默认指向master分支

  • git add:把文件修改添加到暂缓区
  • git commit:把暂缓区的所有内容提交到,当前HEAD指针指向的分支
  •  

三、GIT简单使用

git官方下载地址:https://git-scm/downloads

git自学网站:https://backlog/git-tutorial/cn

1.GIT使用环境

  • 多人开发时需要一个共享版本库, 单人开发初始化一个本地库即可
  • 共享版本库的形式:
    • 本地共享库: 文件夹/U盘/硬盘
    • 远程共享库: 自己搭建git服务器/托管到第三方平台(github/oschina等)
  • 无论是单人开发还是多人开发, 客户端都可以使用命令行或者图形化界面使用git

2.GIT单人流程

(1).准备工作 (只做一次)

  • 1.创建一个工作区(目录)
  • 2.在工作区中的打开git终端
  • 3.通过 git init 指令, 初始化版本库
  • 设置显示隐藏文件
  • 初始化后,会自动在工作区中创建一个版本库.git隐藏目录
  • 4.设置用户名和邮箱
    • git config user.name "姓名"
    • git config user.email "邮箱"
  • 5.通过 git config -l 查看设置情况

(2).开发阶段 (反复执行)

  • 1.编写代码
  • 2.将文件添加到版本库的暂存区
    • git add 文件名称       #将指定文件添加到暂存区
    • git add .                    #将工作区中的所有文件都添加到暂存区
  • 3.将暂存区的文件添加到HEAD指针指向的分支
    • git commit -m "说明"
    • 默认只有一个分支:master分支,也称之为主分支
  •  注意点
    • 1.不是写一句代码就 add commit 一次, 应该是完成一个功能后再 add commit
    • 2mit 时 -m 注释一定要认真编写, 与当前提交内容保持一致

单人使用Git管理项目的好处:

  • 1.可以通过 git status 查看哪些文件没有被管理, 修改了哪些文件
    • 红色(没有被管理或者被修改了)、绿色(文件在暂存区)、没有文件(说明文件已经被git管理)
  • 2.可以通过 git diff 文件名称 查看具体修改了哪些代码
    • 注意:修改文件后,需要重新 add 与 commit
  • 3.可以通过 git log / git reflog 查看项目演变历史
    • git log 文件名称 / git reflog 文件名称    #查看某个文件的演变历史
    • git log / git reflog    #查看所有文件的演变历史(git reflog 简短查询)
  • 4.可以通过 git reset --hard 版本号  在任意版本之间切换
    • git reset --hard HEAD^      #切换到上一个版本
    • git reset --hard 版本号       #切换到指定版本
  • 5.无需备份多个文件, 每次 commit 提交 Git 会自动备份

如果工作区中的某些文件不想被git管理,如何忽略文件?

  • 1.新建文件
    • 默认git会提示两个文件未被管理
  • 2.新建 .gitignore文件
  • 3.编写 .gitignore文件 
    • *.css   表示忽略所有以.css结尾的文件
    • 此时再查看 git 状态时,便会忽略掉 home.css 与 index.css 文件
  • 备注:.gitignore文件 编写规则
#               表示此为注释,将被Git忽略
*.a             表示忽略所有 .a 结尾的文件
!lib.a          表示但lib.a除外
/TODO           表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/          表示忽略 build/目录下的所有文件,过滤整个build文件夹;
doc/*.txt       表示会忽略doc/notes.txt但不包括 doc/server/arch.txt
 
bin/:           表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin:           表示忽略根目录下的bin文件
/*.c:           表示忽略cat.c,不忽略 build/cat.c
debug/*.obj:    表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
**/foo:         表示忽略/foo,a/foo,a/b/foo等
a/**/b:         表示忽略a/b, a/x/b,a/x/y/b等
!/bin/run.sh    表示不忽略bin目录下的run.sh文件
*.log:          表示忽略所有 .log 文件
config.php:     表示忽略当前路径的 config.php 文件
 
/mtk/           表示过滤整个文件夹
*.zip           表示过滤所有.zip文件
/mtk/do.c       表示过滤某个具体文件
 
被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
 
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:
!*.zip
!/mtk/one.txt
 
唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。为什么要有两种规则呢?
想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么.gitignore规则应写为::
/mtk/*
!/mtk/one.txt
 
假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!
注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,one.txt文件虽然加了!过滤规则,也不会生效!
 
----------------------------------------------------------------------------------
还有一些规则如下:
fd1/*
说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
 
/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;
 
/*
!.gitignore
!/fw/ 
/fw/*
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;注意要先对bin/的父目录使用!规则,使其不被排除。

git常用命令:

git help :git指令帮助手册
查看其他指令的做法:git help 其他指令

git init : 仓库初始化(个人仓库)

仓库文件目录
HEAD:         指向当前分支的一个提交
description:  项目的描述信息
config:       项目的配置信息
info/:        里面有一个exclude文件,指定本项目要忽略的文件
objects/:     Git对象库(commit/tree/blob/tag)
refs/:        标识每个分支指向哪个提交
hooks/:       默认的hook脚本

GIT设置配置信息
配置用户名:git config user.name "用户名"(用于跟踪修改记录)
配置邮箱:git config user.email "邮箱"(用于多人开发间的沟通)
git config -l :  查看配置信息
git config -e :  编辑配置信息
git status :    查文件的状态

查看某个文件的状态:git status 文件名
查看当前路径所有文件的状态:git status
git add :将工作区的文件保存到暂缓区

保存某个文件到暂缓区:git add 文件名
保存当前路径的所有文件到暂缓区:git add .
git commit:将暂缓区的文件提交到当前分支

提交某个文件到分支:git commit -m "注释" 文件名
保存当前路径的所有文件到分支:git commit -m "注释"
git log :查看文件的修改日志

查看某个文件的修改日志:git log 文件名
查看当前路径所有文件的修改日志:git log
用一行的方式查看简单的日志信息:git log ––pretty=oneline
查看最近的N次修改:git log –N(N是一个整数)
git diff :查看文件最新改动的地方

查看某个文件的最新改动的地方:git diff 文件名
查看当前路径所有文件最新改动的地方:git diff
git reflog :查看分支引用记录(能够查看所有的版本号)

git rm:删除文件(删完之后要进行commit操作,才能同步到版本库)

git reset:版本回退(建议加上––hard参数,git支持无限次后悔)

回退到上一个版本:    git reset ––hard HEAD^
回退到上上一个版本:  git reset ––hard HEAD^^
回退到上N个版本:     git reset ––hard HEAD~N(N是一个整数)
回退到任意一个版本:  git reset ––hard 版本号(版本号用7位即可)

3.GIT多人开发

(1).在远程服务器上,创建一个共享版本库

  • 1.项目负责人打开远程的服务器, 创建一个工作区
  • 2.在远程的服务器上打开工作区, 在工作区中打开Git终端工具
  • 3.在Git终端工具中输入 git init --bare
  • 初始化后,在工作区中,会自动生成一堆文件
  • 4.经过以上几步, 就代表远程服务器上的共享版本库已经创建好

(2).开发人员下载远程版本库

  • 1.开发人员在自己的电脑上,打开Git终端工具
  • 2.从远程的服务器上,下载当前项目的共享版本库
    • git clone 远程服务器共享版本库地址
  • 多人开发和单人开发使用Git的区别
    • 单人开发是自己创建版本库, 而多人开发是从远程服务器下载版本库

(3).进入开发阶段 (和单人开发一样)

  • 1.设置用户名和邮箱
    • git config user.name "姓名"
    • git config user.email "邮箱"
  • 2.编写代码
  • 3.git add .   #添加到暂缓区
  • 4.git commit -m "说明"    #添加到HEADER指针指向的分支
  • 5.git push   #将代码提交到远程的服务器
  • 6.其它的开发人员只需要通过 git pull 就可以拿到更新的代码了
  • 注意点
    • commit 是将编写好的代码提交到本地的版本库, 所以其它的开发人员是拿不到我们提交的代码的;
    • 如果想让其它开发人员也能拿到我们提交的代码, 还必须通过 git push 将编写好的代码提交到远程的服务器

多人开发使用Git注意点:

  • 1.不能将不能运行的代码,提交到本地和远程服务器(切记一定不能!)
  • 2.如果服务器上有其它开发人员的更新内容, 那么我们不能直接通过push将我们的代码提交到服务器,必须先将其它开发人员更新的内容更新到本地之后,才能通过push提交我们的内容;
  • 3.如果我们更新的内容和其它同事更新的内容有冲突(修改了同一个文件的同一行代码), 这个时候需要我们自己手动修改冲突, 修改完冲突之后才能将代码提交到远程服务器;
  • 开发技巧:只要开发完一个功能就要立即提交代码, 因为在企业开发中谁后提交谁就负责解决冲突, 谁的工作量就会变大

四、GIT分支

1.查看分支

  • 1.1 通过 git branch 指令,可以查看当前版本库中(本地),有多少个分支
  • 1.2 注意点
    • 1.如果当前的版本库是的, 那么无法查看
    • 2.如果通过 git branch 指令查看当前版本库中有多少个分支
    •       输出的内容中哪一个分支前面有 * 号,就代表当前的HEADER指针指向哪一个分支
    •       我们 commit 提交的代码就会提交到指向的分支中

2.创建分支

  • 2.1 通过 git branch 分支名称  创建一个新的分支
  • 2.2 注意点
    • 1.在哪个分支中创建了新的分支, 那么创建出来的新的分支,就会继承当前分支的所有状态 ,例如: 在master分支中做了两个操作, 然后在master分支中创建了Dev分支,那么创建出来的Dev分支就会继承master分支中的这两个操作
    • 2.一旦分支被创建出来之后, 分支就是独立的, 分支之间不会相互影响

3.切换分支

  • 3.1 通过 git switch 分支名称  修改HEADER指针的指向
  • 3.2 注意点
    • 只要HEADER指针的指向发生了改变,那么commit的代码就会发生改变
    • HEADER指针指向谁commit提交的代码就提交到谁里面

4.将分支提交到远程服务器

  • 4.1 通过 git branch -r 查看远程服务器上有多少个分支
  • 默认情况下,只有一个分支:master分支,也叫做主分支
  • 注意:必须执行过push,也就是远程仓库中必须有内容才能查看到
  • 4.2 在本地切换到新建的分支中
  • 4.3 通过 git push --set-upstream origin 新的分支名称  提交新建的分支到远程的服务器

5.合并分支

  • 可以通过 git merge 分支名称 合并分支
  • 将Dev分支中的代码都合并到master分支中
  • 在master分支中执行 git merge Dev 表示需要将Dev分支中的代码都合并到master分支中
  • 在Dev分支中执行 git merge master 表示需要将master分支中的代码都合并到Dev分支中

6.删除分支

  • 6.1 可以通过 git branch -d 分支名称  删除本地的分支
  • 6.2 可以通过 git push origin --delete 分支名称  删除远程服务器的分支

五、Gitflow 标准

就像写代码需要代码规范一样,代码管理同样需要一个清晰的流程和规范

参考文档:https://nvie/posts/a-successful-git-branching-model/

1.准备阶段

  • 1.初始化远程工作区和共享版本库 git init --bare
  • 2.项目经理初始化项目, 并在master定制标记
    • 克隆远程项目并配置用户名和邮箱
      • git clone 远程项目地址
      • git user.name "用户名"
      • git user.email "邮箱"
    • 添加初始化文件
    • 操作初始化文件
      • git add .                             #添加到暂存区
      • git commit -m "说明"         #提交到HEADER指针指向的分支(默认指向master)
      • git push                            #推送至远程服务器
    • 绑定标记
      • git tag -a v0.1 -m "说明"   #绑定标记
      • git tag                               #查看标记
  • 3.项目经理基于master分支创建Develop分支
    • git branch                      #查看当前版本库(本地)中的分支
    • git branch 分支名称      #新建分支
    • git switch 分支名称       #切换分支
    • git push --set-upstream origin 新的分支名称    #将新建的分支提交到远程的服务器
    • git branch -r                  #查看远程服务器上的分支
  • 4.项目经理给开发人员分配工作任务

2.开发阶段

  • 1.开发人员下载远程项目,并配置用户名与邮箱
  • 2.开发人员基于Develop分支创建功能分支
    • git switch Develop                  #切换分支
    • git branch feature/home         #新建分支(开发人员1)
    • git branch feature/login          #新建分支(开发人员2)
  • 3.开发人员在自己的分支上 add  commit  push
  • 当home首页功能开发完成后,开发人员1将代码push推送至远程服务器
  • 开发人员2同上述操作...
  •  
  • 当login登录功能开发完成后,开发人员2将代码push推送至远程服务器
  •  
  • 4.开发完成告诉项目经理, 由项目经理审核代码并合并代码到Develop分支
    • git pull                                #拉取最新代码
    •  
    • git switch feature/home     #切换分支(检查代码)
    • git switch Develop
    • git merge feature/home     #将feature/home分支合并到Develop分支
    •  
    • git switch feature/login      #切换分支(检查代码)
    • git switch Develop           
    • git merge feature/login     #将feature/login分支合并到Develop分支

3.准备上线阶段

  • 1.项目经理基于Develop分支,创建Release/v1.0分支
    • git switch Develop
    • git branch Release/v1.0
  • 2.测试人员获取Release/v1.0分支代码进行测试
  • 3.发现bug,由开发人员基于Release/v1.0分支,创建bugfix分支,进行修复
    • git pull
    • git switch Release/v1.0
    • git branch bugfix/issue32
  • 修复bug  / add / commit  
  • 4.修复完成后,重新合并到Release/v1.0分支
    • git switch Release/v1.0
    • git merge bugfix/issue32
    • git push
  • 5.将测试和修复完所有bug的最终代码,合并到Develop分支
    • git pull
    • git switch Develop
    • git merge Release/v1.0

4.项目上线

  • 1.将Develop分支合并到master分支
    • git switch master
    • git merge Develop
    • git push
  • 2.项目经理,在master分支定制标记
    • git switch master
    • git tag -a v1.0 -m "项目第一次上线"
  • 3.项目经理,将标记提交到远程服务器
    • git push origin v1.0

5.上线之后

  • 1.项目上线后,发现紧急bug
  • 2.基于master分支,创建hotfix分支, 在该分支上修复bug
    • git switch master
    • git branch hotfix/issue66
    • git switch hotfix/issue66
    • 修复bug / add / commit
  • 3.修复完成后,重新合并到master分支和develop分支
    • git switch Develop
    • git merge hotfix/issue66
    • git switch master
    • git merge hotfix/issue66
  • 4.项目经理,重新在master分支,定制标记
    • git tag v1.1 -m "说明"
    • git push origin v1.1

 

六、GitHub的使用

1.注册GitHub账号

  • 1.打开GitHub官网
    • 官网地址:https://github
  • 2.注册账号

  • 3.登录GitHub

2.创建仓库

3.操作仓库

方式1:使用 HTTPS 操作仓库

  • 1.复制 HTTPS 仓库地址

  • 2.创建本地工作目录并下载远程项目

  • 3.配置用户名和密码
    • git config user.name "用户名"
    • git config user.email "邮箱"

  • 4.编写代码并 add commit 

  • 5.通过 git push 将代码推送到远程仓库
    • 注意:此时会弹出GitHub登录界面,需要输入账号密码,才能完成推送
    • 弊端:每次 push 都需要输入账号密码,比较麻烦

方式2:使用 SSH 操作仓库

参考文档:https://gitee/help/articles/4181

准备工作:

  • 1.打开git终端,生成密钥
    • ssh-keygen -t rsa -C "邮箱"

  • 2.查看并拷贝公钥

  • 3.配置 GitHub 的 SSH keys

  • 4.添加认证
    • ssh -T git@github

操作仓库:

  • 1.复制SSH仓库地址

  • 2.创建本地工作目录并下载远程项目

  • 3.配置用户名和密码
    • git --global config user.name "用户名"
    • git --global config user.email "邮箱"

4.编写代码并 add commit push

  • 此时 push 推送时,便无需再输入GitHub账号密码了

  • 此时GitHub中的github-test仓库中便会多出一个从本地推送的index.js文件

七、在WebStorm中如何使用git管理

1.操作仓库

  • 1.在GitHub上创建仓库作为远程版本库
  • 2.复制SSH仓库地址

  • 3.在桌面上打开git终端,下载远程项目

  • 4.将下载好的远程项目,用 WebStorm 打开

2.git 管理

只要是下载的gitHub上的远程项目,通过WebStorm打开后,便可以通过 git 来管理;

commit 提交:

从GitHub上下载的项目,会自动添加一个.idea隐藏目录

如何忽略.idea目录下的文件不被git管理?

  • 新建 .gitignore 隐藏文件,添加忽略规则

文件名称为红色:表示未被 git 管理

(1).添加到暂存区

点击 鼠标右键 - Git - Add ,将文件添加暂存区

文件名称为绿色:表示已被添加到暂存区

(2). 提交到HEADER所指向的分支

点击 鼠标右键 - Git - Commit File... ,将暂存区的文件提交到HEADER指向的分支

填写提交说明(注释),点击 Commit 提交

3.git 分支

(1).新建分支

(2).切换分支

(3).将新建的分支,提交到远程服务器

Gitflow 开发阶段:

(1).开发人员各自创建分支,进行代码开发

  • 1.创建 feature/home 分支

  • 2.编写代码
  • 3.勾选Remember:表示每创建一个文件,都会自动添加到暂存区

  • 4.直接点击右上角的绿色对勾,将暂存区的文件提交到当前所在分支

  • 创建 feature/login 分支(操作步骤同上)

(2).项目经理合并分支

  • 切换到Develop分支,将 feature/home 与 feature/login 分支合并到 Develop 分支

  • 查看项目演变历史

  • 绑定标签

本文标签: 版本工具Git