1. Git简介
1.1. Git介绍
Git(读音为/gɪt/) 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
1.2. 主流的版本控制器
- Git(分布式版本控制,没有中央服务器,可以离线提交)
- SVN(集中式版本控制,有中央服务器,不可以离线提交)
- CVS
- VSS
- TFS
- Visual Studio Online
版本控制产品非常多,现在影响力最大且使用最广泛的Git.
1.3. Git和CVS、SVN的区别
Git是分布式版本控制系统,代码提交是在本地的(如此速度就快),当然生成补丁(patch)然后push到远程服务器上是需要联网的。 CVS、SVN是集中式版本控制系统,代码提交都是提交到远程服务器上,是需要一直联网的(如此速度就慢)(这里的一直联网不是说你写代码的时候要联网,而是说你提交代码的时候必须联网;但是git不同,git提交代码是本地的不需要联网,生成patch后push patch才需要联网,相当于svn的远程的集中服务器对于git来说,这个集中的远程服务器就在本地)
CVS、SVN这样的集中式版本控制系统,它的完整代码仓库(代码仓库不仅仅只包含了代码,还包含各个历史版本的信息等)在中心服务器上,一旦这个中心服务器挂了,也就是完整的代码仓库挂了,虽然你本地可能之前有从中心服务器上取得过代码,但是那些历史版本信息都没有了,而且你也无法再提交代码。 Git不同,Git没有中心服务器的概念,每一个git客户端(git节点)都含有一个完整的代码仓库(前提是你之前从远程git仓库fetch过代码),所以那些历史版本信息都在你本机上,假如哪一个git节点挂掉了,随意从其他git节点clone一个代码仓库过来就ok了, 那些原来的代码、版本信息之类的都还是完整的(当然如果你在这个挂掉的git节点上新增的代码是没有掉了的)
综上,Git的每一个节点(第一次从远程git仓库取得代码后,该git节点就是一个完整的代码仓库)相当于SVN的中心服务器,都包含完整的代码仓库。
1.4. Git的优点
- 适合分布式开发,强调个体。
- 远程服务器(公共的)压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作,近乎所有操作都是本地执行。(当然提交远程服务器或者从远程服务器fetch代码是要联网的)。
2. Git下载与安装
可以从官方网站上找到对应自己的操作系统的GIT版本进行下载,下载网址:https://git-scm.com/downloads
下载之后开始安装:
1.下一步
2.选择安装路径,next
3.选择需要安装的组件,这里默认即可,next
4.选择菜单文件夹,这里默认即可,next
5.选择默认编辑器,默认推荐的即可,next
6.设置“新存储库中初始分支的名称”,默认推荐即可,next
- 设置path环境:
Use Git from Git Bash only:只通过GitBash使用Git
Git from the command line and also from 3rd-party software:使用windows系统的命令行工具(默认这项即可)
UseGit and optional Unix tools from the Command Prompt:二者都有,但是会罩层工具覆盖警告
- 选择安全密钥,默认推荐即可,next
9.选择HTTP传输后端,使用默认推荐OpenSSL库即可,next
- 配置结束转换行,默认windows即可,next
第一项:(windows系统选择)检查换行格式将windows格式的换行转换为unix格式的进行提交
第二项:(Unix系统安装选择)检查换行格式将原来不管什么格式的换行一律转换为unix格式的换行在进行提交
第三项:(非跨平台项目安装选择)不进行格式转换,检查出什么格式就提交什么格式
11.配置终端模拟器以使用Git Bash ,选择默认即可,next
- 选择git pull的默认行为,默认即可,next
13.选择git辅助工具,默认即可,next
- 配置附加选项,默认即可,next
15.执行安装
16.安装成功
17右键菜单,选择
- 进入编辑页面,即可进行GIT操作
3. 使用Git进行版本控制
3.1. 仓库分区
Git本地有三个工作区域:工作目录(Working Directory),暂存区(Stage/Index),资源库(Repository或Git Directory)。如果再加上远程的git仓库(Remove Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
Workspace:工作区,就是平时存放项目代码的地方
Index/Stage:暂存区,用于临时存放你的改动,事实上它是一个文件,保存即将提交的列表信息
local Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本
Remote Repository:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
以上四个工作区其实跟我们挂钩的只有工作区和远程仓库,暂存区和仓库区我们只需要通过命令操作即可
3.2. 初始配置
首次使用git先需要配置以下内容:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
因为git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。然后在本机会生成一个.gitconfig文件,里面包含了user.name和user.email的信息。
如果不加–global参数就只对当前项目有效。但通常都使用–global,避免每次都要重新配置。
3.3. 常用指令
3.3.1. 新建代码库
# 在当前目录新建一个Git代码库
$ git init # 新建一个目录,将其初始化为Git代码库
进入项目目录(注意这个前提)并输入:git init 该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。
3.3.2. 查看代码仓库状态
在执行其他操作之前,先来看一下状态:
$ git status
在Git中,分支是项目的一个版本,从这里的输出我们可以知道,我们位于分支的,master
我们每次查看项目的状态时候,输出的都是我们位于分支master上,接下里的输出表明,我们将进行初始项目的日叫,提交是项目在特定时间的快照。
Git指出了项目中未被跟踪的文件,因为我们还没有告诉他要跟踪那些文件,接下里我们被告知没有任何东西添加到当前提交里面,但我们可能需要将为跟踪的文件加入仓库
3.3.3. 将文件加入到仓库
# 添加指定文件到暂存区
$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录
$ git add . # 将所有修改添加到暂存区 经常用此命令
命令 git add . 将项目中未被跟踪的文件都加入到仓库中,它不提交这些文件,而只是让git开始关注他们。现在我们检查这个项目的状态,发现Git找到了需要提交的文件的一些修改,标签 new file 表示这些文件是新加入的。
3.3.4. 执行提交
# 提交暂存区到仓库区
$ git commit -m [message] # 提交暂存区的指定文件到仓库区
我们在执行 git commit -m "Started project" 的时候以拍摄项目的快照。标志-m 让Git接下里的消息(“Started project")记录到项目中的历史记录中,输出表明我们在分支master 上,而且有一个文件被修改了
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
3.3.5. 查看提交历史
# 显示当前分支的版本历史
$ git log # 显示commit历史,以及每次commit发生变更的文件
我们每次提交的时候,Git都会生成一个包含40字符的独一无二的引用ID,它记录提交是谁执行的,提交的时间以及提交的指定消息,并非在任何情况下你都需要所有的这些信息,因此Git提供一个选项,让我们能够打印提交历史条目的更简单的版本。
标志 --pretty=oneline 指定显示一项最重要的信息,提交的引用ID以及为提交记录的信息
3.3.6. 第二次提交
我们在Helloworld.java文件中加入一行代码
int num = 100;
查看状态
此处显示我们对Helloworld. java文件做了修改,但是并没有提交,所以接下来我们提交所做操作,并在查看操作。
这一步,我们执行了提交,并且在执行命令git commit 的时候指定了标志-am.标志-a 让Git 将仓库中所有修改了的文件都加入当前提交中,(如果我们两次提交之间加入了新文件,我们执行get add . 操作,将新文件加入到仓库中)标志-m让Git咱提交历史中记录一条消息。
查看状态
这时我们再查看项目的状态的时候,发现工作目录也是干净的,最后我们发现提交历史中包含两个提交。
3.3.7. 撤销修改最近版本
我们在Helloworld.java文件中加入一行代码
System.out.println(num);
查看状态
Git注意到我们修改了Helloworld.java,我么可以提交所做的修改,但是我们不提交所做的修改,而要恢复到最后一个提交,为此我们不对Helloworld.java执行任何操作,不删除刚添加的代码行,也不使用文本编辑器的撤销功能,而是在终端会话中执行如下命令:
# 撤销修改
$ git checkout . # 能够让我们恢复到以前的任何提交
查看状态,同时查看文件中的代码也被撤销了
3.3.8. 撤销修改以前版本
我们可以检查提交历史中的任何一次提交,而不仅仅是最后一次,为此我们可以在命令git check末尾指定该提交的引用ID的前6个字符(而不是局点)。通过检查出以前的提交,我们可以对其进行审核么然后返回到最后一次提交,或者放弃最近所做的工作,并选择以前的提交。
如果要恢复到“Started project”需要以下几步:
首先,我们查看了状态,确认我们在分支master上,查看历史提交时,我们看见了两个提交。
然后,我们执行了命令 git reset --hard ,并在其指定了要永久性的恢复到的提交的引用ID的前6个字符。
接下来,我们在次查看状态,我们在分支master上,并且没有需要任何修改,
最后,我们再次查看提交的历史状态时候,我们发现我们处于重新开始的提交中,同时文件中的代码也恢复到最初状态。
3.3.9. 删除仓库
有时候,仓库的历史纪录被我们搞乱了,而我们又不知道如何恢复,这时候我们首先应该考虑百度一下,看看自己的问题出在那里,如果无法恢复,而且参与项目的人只有自己,可以继续使用这些文件,但需要将这些项目的历史纪录删除——删除.git 这不会影响任何文件的当前状态,而只会删除文件的所有提交,因此我们将无法检查出项目的其他任何状态。
为此,可以打开一个文件浏览器,并将目录.git 删除,也可以通过命令完成这个任务。但是这样做过我们需要创建一个新的仓库,以重新对这些修改进行跟踪。
$rm -rf .git #-rf 强制删除文件
查看状态结果告诉我们这不是一个仓库,(git用来跟踪仓库的信息都存储在文件夹.git中,因此删除该文件夹也将会删除整个仓库),但是原来的Helloworld.java源文件不会被删除,可以继续构建新仓库进行版本控制。
4. Gitee代码托管平台
Gitee 是开源中国社区2013年推出的基于 Git 的代码托管服务,目前已经成为国内最大的代码托管平台,致力于为国内开发者提供优质稳定的托管服务。 它可以让你和其他人一起在远程或本地项目上进行协作。
官方网站:www.gitee.com/
本地仓库: 本机上某个存放代码的仓库。
远程仓库: 码云服务器上的代码仓库。
重要提醒:
当我们在本地操作(新增、删除、修改)文件、目录时,并将其提交(commit),只是提交到了本地仓库。注意:所有的改动只是放到了本地仓库,并没有上传到服务器的远程仓库。
当将本地仓库与远程仓库关联起来后,即可将本地仓库中的对代码的改动上传到(push)远程仓库,也可从远程仓库将对代码的代码改动下载(pull)下来。
4.1. 创建SSH key
由于本地Git仓库和Gitee仓库之间的传输是通过SSH加密的,所以需要先进行如下设置:在Git Bash下输入如下指令,成功后在用户主目录下,寻找.ssh目录,并在这个目录下找id_rsa和id_rsa.pub这两个文件,这两个就是 SSH Key 的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,用于后续步骤,命令如下:
$ ssh-keygen -t rsa -C "zhangsan@163.com"
4.2. 登录Gitee账号
没有Gitee账号的,可以去官网注册一个。注册登录后,在个人主页—>个人设置---->SSH公钥,将上述步骤中的 id_rsa.pub 里面的内容复制粘贴到 3 号位置,在2号位置任意添加一个标题即可。
4.3. 在Gitee中创建远程仓库
登录Gitee,点击右上角的 + 号,再点击新建仓库
填写仓库名称,下面的路径默认,是否开源根据自己的需要,然后按照图中所示勾选
创建仓库成功会有命令提示,可以按照命令提示进行项目上传
按照以上指令进行文件上传
4.4. 克隆远程仓库项目
先创建远程库,从远程库克隆项目,通常指令如下:
#HTTP方式
$git clone https://gitee.com/yichunlinNeusoft/helloworld.git
#SSH方式
$git clone git@gitee.com:yichunlinNeusoft/helloworld.git
4.5. 在Eclipse中配置Git
首次从远程仓库上向eclipse克隆项目,可以选择引用项目import中的GIT选项
选择“克隆”clone选项
填写location(从gitee中直接复制),同时填写gitee的用户名和密码进行验证
选择对应分支,这里我们就选主分支master
配置域名(默认)
选择引入项目的方式(如果有空项目导入就选第一项)
项目导入成功
4.6. 在Eclipse中使用Git
在项目开发阶段,我们需要不断对远程仓库中的项目进行提交和下载,这是可以在eclipse中直接进行的,方法在右键菜单中,有Team选项,可以自己需要的功能进行选择