SVN的劣势:在进行软件修改错误的时候非常麻烦。
git的优势:不受网络限制,保证开发中存在多个版本。
分支:
首先电脑先安装好git,并配置好环境变量。
安装需要注意:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果要想进行软件的开发,那么一定要存在有软件的开发者的人员信息。
所以在使用GIT之前,必须要配置一些公共的环境属性。
范例:设置开发者的用户名称。
git config --global user.name 'jianzhu'
范例:设置开发者的邮箱信息
git config --global user.email '[email protected]'
如果需要知道当前的git有哪些全局信息可以使用如下的命令完成:
取得全部的全局信息:
git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslbackend=openssl
http.sslcainfo=D:/Git/mingw64/ssl/certs/ca-bundle.crt
user.name='jianzhu'
user.email='[email protected]'
如果使用SVN需要初始化一个仓库目录,而后将此目录作为项目的提交路径。
使用maven的时候也需要有一个读取仓库。
1.首先在D盘创建一个文件夹:gitproject
2.cd gitproject进入改目录。
3.初始化仓库,对于仓库的初始化方式有两种。
第一种:创建一个包含有配置信息目录的文件夹
git init
出现信息:Initialized empty Git repository in D:/gitproject/.git/
它会在当前所在的目录中自动生成一个”*.git“隐藏文件夹。这个文件夹将包含有全部的GIT相关的版本信息。
第二种:直接将当前目录设置成git仓库。
git init --bare
出现信息:Initialized empty Git repository in D:/gitproject/
发现此时没有生成.git隐藏目录,而同时E:\gitproject 将保存所有的配置信息。
在git之中,可以监控的范围就是仓库信息(e:\gitproject就是一个仓库),只需要将一些文件保存在仓库里面就可以监控了。
在gitproject目录下建立hello.java文件。
一定要记住,编写代码的时候请使用UTF-8编码。
public class hello{
public static void main(String args[]){
System.out.println("Hello GIT");
}
}
观察当前仓库的状态:git status
如果此时git发现仓库之中增加了新的文件或者是修改了文件,那么都会提示给用户。
现在假设hello.java文件为整个项目中最终需要的文件,所以必须要将其进行提交给GIT的文件管理系统。
将文件添加到git暂存区中:
git add hello.java
随后再次查询当前仓库的状态:
这个时候实际上GIT就知道了在当前目录中有一个需要使用的新文件:hello.java
将文件提交到版本库中
git commit -m "提交的注释信息"
git commit -m "Create New File hello.java"
现在才表示将新的文件提交到git之中进行管理,这个代码才能够被项目真正使用。
但是如果说现在同时创建了多个新文件。
当使用git status查看状态是会提示出现了三个新的文件。
如果现在要想让现在这三个文件可用,之前使用的是 git add 将文件增加到暂存区之中,而后使用git commit提交到版本库中。
但是文件一多,这样就麻烦了。
批量添加新文件操作:git add . 多了一个点
进行版本库的提交:git commit -m "Add Files"
但是有人会觉得有点麻烦,既然所有的代码最终都要提交到版本库中才能运行,所以可以直接添加到版本库中。
此时修改hello.java文件内容:查看状态
自动添加并提交修改到版本库中:git commit -a -m "Change hello.java file"
如果说现在要是针对于仓库中的文件进行修改的话,在查询状态时会进行及时的体现。
修改hello.java文件内容,如果此时要是查询状态:git status
如果要想知道此时的文件与已经发布的代码那块发生了改变,则可以使用如下命令进行比较:
比较文件:
git diff 文件
git diff hello.java
如果出现的修改文件比较多,那么会采用换行的方式进行显示,如果最后不需要,使用”Q“退出。
在命令行的方式下,如果使用了+表示增加的代码,如果使用了- 表示删除的代码。
不在的代码就是-,在的代码就是+。
这个工具可以非常清楚的帮助用户进行代码修改前后的区分。
但是修改完的代码需要自行进行提交:git commit -a -m "In hello.java File"
查看提交历史:git log
每一次提交的时候都会自动的生成一个commit ID(在日后进行项目版本恢复的时候使用)
在整个GIT之中,对于文件的保存一共提供有三个区域:
工作区:用户编写的代码文件夹,所有的文件操作都以工作区为主。
GIT仓库:
【暂存库】:只是将工作区中的未保存文件保存到暂存区中,此部分由GIT维护。
【版本库】:是真正进行项目的发布的代码。
1.首先用户要在工作区中编写程序文件,但是此时的文件并不能真正的保存在GIT仓库之中,并且在这一个区域中所进行的文件的创建、修改、删除操作,都不会影响最终的软件版本发布。如果现在需要将这个临时区域的内容发布到最终的软件版本里面需要先增加到暂存区。此时表示代码可以撤销,使用git add. 进行增加。
使用git add之后工作区中文件的状态进行了删除,而后将所有新文件保存在暂存区里面。
保存在暂存区里的内容只能说是暂时需要的;暂存区的内容可能会被删除,而后真正要发布的项目必须将其设置在Master分支上(版本库),这样只有进行提交后才可以将暂存区的内容保存在版本库中,才能够真正被其他人所使用。
由于一个项目可能被发布多次,所以在git里面进行保存之后,都会自动的生成一个提交的版本编号(Commit ID),
用于为开发者提供版本回退的处理机制。
实际上保存到暂存区的内容只是给了用户一个临时保存暂时不改代码的空间,如果发现错误了,就可以进行恢复。
如果现在继续修改文件,此时的修改是在工作区里面,与暂存区没有关系,没有使用git add命令。
如果此时提交项目到版本库中(Master分支),工作区的修改不被提交。
此时提交的是暂存区的文件,工作区不受影响。
GIT中最强大的操作就在于进行版本的回退以及前进的状态切换。
在任何的开发之中,对于软件的操作代码,都很难保证其不恢复到原始状态 。因为新增加的程序可能会由于某些原因从而导致失败,而需要快速的进行版本恢复。
GIT进行版本穿越的核心概念在于每一个Commit ID。
查看当前的日志信息:git log
可以发现整个日志记录采用的是栈的形式,最早的提交保存在最后。
在一行上显示:git log --pretty=oneline
实际上在Master分支上存在有一个HEAD指针,这个指针指的是当前正在使用的版本。
HEAD指针默认指向最新的提交点。
如果现在要是改变了HEAD的指针,那么就相当于可以任意的修改软件的版本。
回退到上一个版本:git reset --hard HEAD~1
实际上此时就实现了版本的回退操作,每当退回上一次的保存点(Commit ID)。如果回退错误了呢?进行回滚!
此时就需要知道提交点的信息,依靠传统的日志就不行了。
必须使用一个删除的提交点日志信息。
查看所有回退的提交点:git reflog
发现所有针对于版本的操作,reflog都可以记录好,下面进行恢复。
恢复到最后一次提交点:git reset --hard 7d8248d
执行后:
现在只要有了正常的提交,所有的提交点就可以作为恢复点存在。
在任何开发过程之中,都很难保证不会发生“无用修改”操作。而在git里面针对于此类的操作也是有所支持的,实际上就是指修改撤销的功能,可是这里需要考虑两种情况。
情况一、在工作区发生了改变,但是此时没有提交到暂存区
如果要想恢复某个文件原本的代码,可以使用checkout操作:git checkout hello.java
情况二、已经添加了暂存区,但是没有提交到Master分支
将保存在暂存区中的hello.java文件恢复到工作区中:git reset HEAD hello.java
随后还需要恢复已有的内容:git checkout hello.java
如果要删除,删除工作区内容即可:del hello.java
需要注意的是,此时只是在工作区中被删除了,而在MASTER分支上的代码依然存在hello.java文件,所以此时必须进行更新提交。
git commit -a -m "delete hello.java"
只要此时更新一提交,那么文件将彻底删除,如果想恢复呢?使用版本穿越。
以上的操作指的是删除已经被提交的情况,那么还有一种情况:在工作区删除
所以MASTER分支上依然存在有hello.java文件,可以利用MASTER分支上的hello.java文件进行恢复:
git checkout --hello.java