Git 和 GitHub

蹲街弑〆低调 提交于 2019-12-26 01:19:40

版本控制工具

概念

版本控制工具提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。
版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率

作用

(1)协同开发
团队协作共同完成同一个项目
(2)版本管理
以不断提升项目版本的方式逐步完成项目。
(3)数据备份
开发中以版本控制的形式保存每一个历史版本。
(4)权限控制
对团队开发人员进行不同的权限分配。
(5)分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

常见工具

集中式版本控制工具
CVS、SVN、VSS……
不同的客户端直接跟服务器端交互工作,可以进行提交操作、克隆操作等。不同客户端之间是相互独立的
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
每个用户都有自己在本地的仓库,用来管理版本控制,每个客户端也同时是一个服务器。同时也可以用一个专门的服务器的仓库用来管理

Git

简介

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理
官网地址:https://git-scm.com/
Git的优点
(1)适合分布式开发,强调个体。
(2)公共服务器压力和数据量都不会太大。
(3)速度快、灵活。
(4)相对容易的解决冲突。
(5)大部分操作在本地完成,不需要联网。
(6)以快照流的方式工作

客户端下载地址:https://git-scm.com/downloads
windows安装,双击安装程序,一直next即可
查看是否安装成功:git --version

Git准备工作

创建.git目录

首先找到一个任意的路径当做本地库目录
例如:目录D:\GitTest
点击右键 --> Git Bash Here
在这里插入图片描述
初始化本地库
命令:git init
在这里插入图片描述
执行完该命令后,在当前目录会出现 文件夹 .git 。(这个文件夹是隐藏文件夹)
在这里插入图片描述
.git目录的出现表示本地库初始化成功(表示这个.git目录就是我们的本地库了)
注意:.git目录存放的是和本地库相关的文件,不要修改或者删除

Git目录说明
工作目录:任意目录下,我们开发代码的目录
暂存区域:.git目录下,作用:有个后悔(返回撤销)的余地
本地仓库:.git目录下,Git存储项目的仓库

设置签名

  1. 设置签名的作用:区分不同开发人员的身份
    注意:为Git设置签名与远程库(代码托管中心)的账号密码没有任何关系
  2. 设置签名命令:
    1. 本地库级别设置签名方式:
      git config user.name zs
      git config user.email zs@123.com
      信息保存位置:./.git/config 文件
    2. 系统用户级别设置签名方式:
      git config --global user.name zs
      git config --global user.email zs@bjpowernode.com

可以在.git文件夹下查看配置文件config或者~/.gitconfig 文件 ,看是否设置成功,成功如下图:
在这里插入图片描述
优先级按照就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名。

版本管理

文件版本控制方式

在这里插入图片描述
将工作目录的代码先提交到暂存区(add),再有暂存区存到本地库(commit),最后从本地库推送到远程库上(push)

文件版本基础管理

git status:查看工作区、暂存区状态
在这里插入图片描述
文件标识红色表示文件还没有被添加到Git中进行管理
git add [file name]:将工作区的信息(变化)添加到暂存区,文件变成绿色表示
在这里插入图片描述
git commit -m “msg” [file name]:将暂存区的内容提交到本地库
在这里插入图片描述
如果出现下面的错误,原因就是 命令 git 前有空格,删掉就好了
在这里插入图片描述
本地库与暂存库文件内容一致,这时将暂存库中的文件内容修改
原文件内容
在这里插入图片描述
修改文件内容
在这里插入图片描述
查看状态,文件又变红了,说明工作区有新内容,待添加到暂存区
重复首次操作,继续add,然后继续commit
最后查看状态,确保工作区,暂存区,本地库再次同步。
在这里插入图片描述
git log:查看本地库更新历史记录
我们可以观察到两次提交,分别对应两个40位的哈希值,这就是我们提交后记录的版本号
在这里插入图片描述
git log --oneline:查看本地库更新历史记录(简化版)
在这里插入图片描述
git reflog:查看本地库更新历史记录(展现HEAD指针)
在这里插入图片描述

版本前进后退管理

新增历史记录ccc、ddd、eee、fff、ggg
在这里插入图片描述
可以使用git commit -am"msg"进行添加和提交一次性操作
在这里插入图片描述
准备工作后,开始前进和后退的操作
git reset --hard [局部索引值]:基于索引值的操作
在这里插入图片描述
在看文件内容,回到添加eee时的状态,回到历史版本
在这里插入图片描述
回到最新版本
在这里插入图片描述
再查看文件,回到添加ggg时的状态
在这里插入图片描述
观察到前进和回退的操作也会被忠实的记录下来

git reset --hard HEAD^ :表示后退操作
一个 ^ 表示后退一步,N个^表示后退N步
在这里插入图片描述
观察以上操作,我们通过后退的方式,后退到了fff
源文件变成
在这里插入图片描述

删除文件并找回方式

前提:删除前,文件存在时的状态提交到了本地库
在这里插入图片描述
通过以上方式查看状态,表示工作区、暂存区和本地库处于同步状态。
删除文件test01.txt
在这里插入图片描述
查看文件夹状态
在这里插入图片描述
通过以上观察,表示工作区中少了文件,和本地库不同步了
此时根据提示,我们可以将这次的删除操作添加到暂存区,并提交的本地库。
注意:删除文件后的git操作,和添加文件后的git操作方式是一致的,也是先add,再commit

在这里插入图片描述
我们现在相当于彻底将这个文件删除了,最新提交到本地库的历史也是处于将这个文件删除的状态了。
现在我们要将该文件找回!
由于我们以前提交过的每一个历史版本都被忠实的记录下来的,所以我们现在回到历史就可以将文件找回了。(文件是被删除了,但是历史永远不会被删除)

查看历史版本
在这里插入图片描述
通过我们以上学习过的 git reset --hard [版本号] 就可以实现了
在这里插入图片描述
文件夹GitTest找回文件
在这里插入图片描述

比较文件的方式

git diff 文件名 : 将工作区中的文件和暂存区进行比较
测试前,首先确保工作区,暂存区,本地库处于同步状态
观察当前最新版本(例如以下最新版本为ggg)
在这里插入图片描述
修改工作区文件添加了hhh
在这里插入图片描述
接下来比较工作区中的该文件和暂存区的差别
在这里插入图片描述
通过观察,看出工作区比暂存区多了hhh

还可以与本地库的历史版本进行比较
git diff 本地库中历史版本 文件名
在这里插入图片描述

分支管理

什么是分支管理?

在版本控制过程中,使用多条线同时推进多个任务就是分支管理

在这里插入图片描述

好处

  1. 同时并行推进多个功能开发,提高开发效率
  2. 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任
    何影响。失败的分支删除重新开始即可。

操作方式

git brach -v 查看分支
在这里插入图片描述
git branch 分支名 创建分支
创建完毕后,再次查看分支,表示现在共有两个分支master和branch1
在这里插入图片描述
注意:由于branch1这个分支是由master这个分支创建出来的,所以默认指向同一个指针ggg,即分支的起点也是ggg
master绿色高亮表示当前操作,使用的仍然是master分支

git checkout 分支名 切换分支
切换完再次查看分支,branch1分支绿色高亮显示,表示我们现在操作的是branch1这个分支
在这里插入图片描述

分支合并以及解决冲突

  1. 合并分支
    首先我们切换到branch1分支上,在test1.txt上新增信息iii,然后add和commit在branch1分支上,我们看到了iii如果切换回master分支上,我们是看不到iii的(iii是branch1做的操作,所以看不到)
    此时master分支如果想要看到iii,就必须要和bran1分支进行合并分支的合并不会删除某一个分支,而是对于信息进行对称整合
    我们切换到master分支上
    执行命令 git merge branch1就会将branch1中的信息进行整合
    在这里插入图片描述
  2. 合并分支过程中冲突的解决方式
    此时master分支和branch1分支上都是最新的iii
    在master分支上新增jjj,执行add和commit
    然后切换到branch1分支上,新增kkk,执行add和commit
    然后合并分支,例如我们还是使用master合并branch1分支
    此时就会产生冲突
    在这里插入图片描述
    冲突的解决方式:
    首先编辑test01.txt文件,保留有用信息(协商解决),删除(作为冲突标识的)特殊符号
    执行git add test01.txt
    执行 git commit -m"日志信息"
    在这里插入图片描述
    成功的解决了冲突

Git注意事项

1. 保持原子性的提交

每次提交的间歇尽可能地短,以几个小时的开发工作为宜。例如在更改 UI 界面的时候,可以每完成一个 UI 界面的修改或者设计,就提交一次。在开发功能模块的时候,可以每完成一个小细节功能的测试,就提交一次,在修改 bug 的时候,每修改掉一个 bug 并且确认修改了这个 bug,也就提交一次。我们提倡多提交,也就能多为代码添加上保险。

2. 对提交的信息采用明晰的标注

不论是在本机中使用本地库,还是未来推送到远程库,如果提交不明确的标注不仅仅会让自己怀疑当初提交的目的,也会让项目组中其他的成员感到很无奈,项目经理无法很清晰的掌握工作进度,无法清晰的把握此次提交的概要信息。在有必要的情况下也不能明确的的回到指定的历史记录。所以,在做提交工作时,要填写明晰的标注,能够概要的描述所提交文件的信息,让项目组其他成员在看到标注后不用详细看代码就能了解你所做的更新。

GitHub

概述

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名GitHub
团队协作开发方式
在这里插入图片描述
GitHub官网

GitHub网站应用

1. 创建远程库

在这里插入图片描述
在这里插入图片描述
看到以下远程库信息页面证明远程库已经创建成功
在这里插入图片描述
如果是刚登录进来,欢迎页面的左侧也会看到远程库的菜单项
点击左侧菜单中的远程库,也会进入到该远程库信息页面
在这里插入图片描述
观察如下详细信息页面
点击HTTP,会得到访问远程库的地址
在这里插入图片描述
可以搜索到别人创建的远程库
在这里插入图片描述

邀请其他GitHub用户加入开发团队

打开远程库信息页面,点击settings
在这里插入图片描述
点击Collaborators在这里插入图片描述
输入被邀请人账号,点击Add collaborator
在这里插入图片描述
复制邀请链接
在这里插入图片描述
被邀请账号
打开浏览器新窗口,在地址栏访问刚刚复制的链接
点击Accept invitaion 接受邀请
在这里插入图片描述
变为团队成员后可以推送代码到远程库了
在这里插入图片描述

GitHub注意事项

1. 推送之前先拉取

GitHub拉取的原则是要随时拉取,随时推送。当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地推送。
如果在修改的期间别人也更改了相同的文件,那么推送就可能会产生冲突,这种情况就需要同之前的开发人员联系,两个人一起协商解决冲突,解决冲突之后,需要两人一起测试保证解决冲突之后,程序不会影响其他功能。

2. 不要推送不能通过编译的代码

代码在推送之前,首先要确认自己能够在本地编译。如果在代码中使用了第三方类库,要考虑到项目组成员中有些成员可能没有安装相应的第三方类库。项目经理在准备项目工作区域的时候,需要考虑到这样的情况,确保开发小组成员在签出代码之后能够在统一的环境中进行编译。

3. 不要推送自己不明白的代码

代码在推送进入到GitHub之后,你的代码将被项目成员所分享。如果提交了你不明白的代码,你看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。因此在引入任何第三方代码之前,确保你对这个代码有一个很清晰的了解。

4. 提前协调好项目组成员的工作计划

项目经理应该合理分配工作计划。每个成员在准备开始进行某项功能的修改之前,如果有可能,先跟工作小组的成员谈谈自己的修改计划,让大家都能了解你的思想,了解你即将对软件作出的修改,这样能尽可能的减少在开发过程中可能出现的冲突,提高开发效率。同时你也能够在和成员的交流中发现自己之前设计的不足,完善你的设计。

idea使用Git&GitHub

基本配置

首先建立一个演示项目(web项目即可),然后建立一个User类,里面写上初始测试内容
在这里插入图片描述
打开settings --> Version Control --> GitHub
填写GitHub网址,账号,密码,然后点击Test测试
在这里插入图片描述
上述测试成功后,配置Git
打开settings --> Version Control --> Git
第一栏文本框会自动识别到本地Git安装路径下的git.exe
点击测试
其他项维持默认即可
在这里插入图片描述
以上就是IDEA对于GitHub和Git的基本配置
以上配置完毕后,我们来操作项目

将IDEA项目push(推送)到GitHub

创建本地库
在这里插入图片描述
选中当前项目作为本地库
在这里插入图片描述
以上操作之后,会在当前项目的本地看到.git文件夹
说明当前项目文件夹作为本地库存在
在这里插入图片描述
将项目提交到暂存区
项目右键 --> Git --> Add
在这里插入图片描述
将项目提交到本地库

首先我们在提交前,需要忽略掉.iml文件
settings --> Editor --> File Types
添加*.iml
在这里插入图片描述

项目右键
在这里插入图片描述
选中刚刚模块中写好的未提交过的文件
点击Commit提交
在这里插入图片描述
将本地库中的文件上传到远程库
在这里插入图片描述
第一次提交,需要先写入提交的GitHub库的名字,以及上传地址
在这里插入图片描述
在GitHub上创建一个新仓库CRM
在这里插入图片描述
填写完以上信息后,推送项目到GitHub远程库
在这里插入图片描述

GitHub远程库clone项目到IDEA

新建一个空的Project,在另一个窗口打开(同时保留原有的项目窗口)
在这里插入图片描述
开始clone项目
在这里插入图片描述
填写基本信息
在这里插入图片描述
作为一个maven项目导入
在这里插入图片描述
将Maven项目目录结构写完整(注意文件夹颜色要赋予正确的颜色)
在这里插入图片描述
当编写java代码时,会提示没有编译环境
在这里插入图片描述
点击右侧的setup sdk
在这里插入图片描述
在这里插入图片描述
将加入了新属性的User类推送到远程库
注意:推送前,不要忘记先Add!!!
Add之后Commit and push

切换到第一个项目
暂时只有id属性(第二个项目有id属性和name属性)
所以第一个项目需要将name属性拉取,将更新为最新版
右键User类
在这里插入图片描述
如下图所示,所有默认,点击Pull
在这里插入图片描述
如果本地更改过文件(没有及时上传),拉取时会产生冲突
例如本地要上传的新属性是phone
在这里插入图片描述
但是远程库,最新的属性是address
在这里插入图片描述
这样会产生冲突,pull会失败
在这里插入图片描述
此时老版本idea,必须先要进行以下操作:
先将自己本地库最新的版本先以Stash的方式保存
在这里插入图片描述
在这里插入图片描述
然后再拉取
在这里插入图片描述

就会拉取成功了
在这里插入图片描述

最后将本地最新版(属性phone)合并进去
在这里插入图片描述
在这里插入图片描述
我们会看到即保留了刚刚pull远程库的最新版本的代码(address),又保留了自己本地库(phone)的代码
在这里插入图片描述(新版本idea会直接跳到这步)
调整冲突后(同时保留phone和address),执行add和commit操作,并push到远程库
注意:解决冲突后的文件,必须先add,在commit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!