git在本地仓库上的使用

      git作为一款优秀的版本控制工具受到广大用户的欢迎和喜爱,不管是开发还是项目管理都发挥着重要的作用。前面一篇文章已经简要说了如何在github上注册以及在本地添加SSH秘钥操作,包括在本地通过git指令将需要上传的开源文件传到远程仓库里面去。

http://blog.csdn.net/cai2016/article/details/51557682

      但有时候仅仅想在本地进行操作,将仓库建立在本机,既要使用git工具又不想开源自己的代码或文件。这时候理解在本地创建以及在本地一些常见操作就显得十分重要了。在说个之前先来说说git相关原理,这对于记住git 指令如(git add ./git commit …)也很重要。

git原理

      先来看一下书本上关于git原理的解释,直接看图比较直观~

git在本地仓库上的使用_第1张图片

      上图简单的说就是表示git保存每次更新文件流程。每次保存的是变化后的整个文件,如果有修改就保存全部。上图中虚线表示在新的版本中该模块没有改变,在新的版本中使用的是上一版本的文件快照。如Version 2中的B模块没有改变,在新的版本中使用的Version1中的B模块,其他的依次类推。这里介绍两个有用的命令:git gc ;git fsck

git gc

      由于在以上图所示的流程中不断修改版本,虽然能够进行记录和跟踪,但是过多的版本会占用过多的磁盘和内存。在大的仓库中git靠压缩历史信息来节约磁盘和内存空间,但是需要注意的是:这种压缩并不是自动压缩,是需要手动操作的。因此在适当时候执行一下git gc指令会提高系统的使用效率。通常在较大的仓库中使用git gc比较耗时间,最好在没做其他任务的时候进行该操作。

git fsck

      git fsck 运行一些仓库的一致性检查, 如果有任何问题就会报告. 这项操作也有点耗时, 通常报的警告就是“悬空对象”(dangling objects).git fsck 保证可靠性。这种悬空可能是多次add造成,除了fsck 命令还有reflog。执行该项操作也是较耗时间。

git在本地仓库上的使用_第2张图片

git 基本概念以及操作流程

文件目录——仓库(repository)

      代码仓库可以理解为一个目录,这里面的所有文件都是通过git实现版本管理,git对版本进行跟踪和记录在该目录下发生的更新。先来看一下git的基本框架。

Directory:仓库。包括工作空间和管理空间。

workspace:目录和文件构成工作空间。

.git :存放git管理信息目录,由git init初始化初始化创建

Index/Stage:暂存区,通常我们在git add 之后只是将文件提交至暂存区,下一步就是git commit操作。

HEAD: 当前活跃分支(branch)的游标,可以理解为程序运行指针(PC指针),git 现在在哪个分支,HEAD就指向哪里。通常理解为current指针。

git stash

      git stash 可用来暂存当前正在进行的工作,保存当前的工作现场,切换到其他分支进行工作。git stash list 可以查看stash队列。通常每次git stash就会切换一个分支,在该分支上工作也需要保存它的工作现场。这种工作方式可以结合嵌入式中断工作方式的进行理解。中断需要保存断点寄存器状态以及现场保存,当中断服务程序执行完毕以后就会从断点处进行返回。这个过程中会有pop和push操作,同样git stash也有pop:

       git stash apply读取暂存区数据,用过apply后暂存区数据依然存在。

       git stash pop取出最新的一次暂存数据,取出后这次数据就不会存在于暂存区。

git在本地仓库上的使用_第3张图片

git init

      接下来说说git在本地仓库上的一些常用操作。首先需要在本地创建仓库,这个不像在github上创建那么复杂,直接选取在本地存放工程代码的目录下进行git bash,在bash里面执行git init指令,执行后会在本地文件夹下出现一个.git的文件。这个文件很重要,不能删除,要是git init后没出现这个文件夹则需要重新配置git。

git add

      先来看看在使用git add之前是什么现象。这里介绍一个好用的指令:git status。该指令使用很频繁,以为可以通过该指令得知本地仓库的一些状态。在还没有git add之前在本地仓库添加了一个txt文件。用git status查看状态:

git在本地仓库上的使用_第4张图片

      红色提示表明该txt文件没有add,说明该文本文件没有被git跟踪,并且git还提示使用git add进行操作。红色提示表明该txt文件没有add,说明该文本文件没有被git跟踪,并且git还提示使用git add进行操作。那么接下来就是使用git add将该文本文件添加到暂存区,注意:此时的更新仅仅发生在workspce区。

git在本地仓库上的使用_第5张图片

      此时文件已经存放在暂存区,此时的更新已经从workspace保存Stage。但是这还没完成提交,接下来就是执行git commit操作,实现在本地仓库的更新。

git在本地仓库上的使用_第6张图片

      以上几个步骤走完算是把文本文件提交到本地仓库了。通常版本控制的意义在于对于同一文件不同版本进行管理,可以方便对文件的跟踪。下面就针对一些文件的修改以及更新包括对版本跟踪的一些操作。

       还是一样直接用git status命令看一下是否有需要跟踪的文件:

git在本地仓库上的使用_第7张图片

      由于对文本文件进行了修改,在原来的基础上添加了一些内容,现在用git status后显示文本文件已经modify了。那同样需要执行一下git add 和git commit进行更新了。

      以上都是一些常见的操作,另外我们在使用提交和更新之后,如何对版本进行查看。有两个很重要的指令git show 和 git log。

git log

git log来查看提交文件的次数和信息。

git在本地仓库上的使用_第8张图片

git在本地仓库上的使用_第9张图片

git在本地仓库上的使用_第10张图片

      使用git log可以查看所有的提交信息,这些信息包括commit 生成的hash值,还包括提交信息的人,时间以及备注信息。这些就是版本控制的好处之一,假设好多人在看发同一个项目,都可以往服务器上提交自己的源码,这样就知道代码信息了。不过以上的git log指令有一个缺陷,那就是log 没带参数,也没设置路径。这样查找的所有是整个代码仓库的提交信息,效率比较低。推荐使用带参数的git log指令。

git log –pretty=oneline [要查看提交信息的文件名]

      以查看txt文件的提交信息为例,以下是版本结果:

git在本地仓库上的使用_第11张图片

      以上显示对txtAddNew.txt文件进行了版本查看,可以看到该文件一共经过了三次update和commit,在hash码的后面还给出了commit的备注信息。下面介绍git show 指令进行查看指定版本的信息。假设要对以上3个提交版本中第二个版本进行查看,可以使用git show 指令。

git show [commit 的 hash码]

首先复制目标版本的hash码,以下是查看结果:

git在本地仓库上的使用_第12张图片

      查询给出了提交人、时间以及备注信息。注意绿色部分,”++modify information update.”这是此次提交的更新的内容,红色部分表示该版本之前存在的信息。

      关于git 操作还有很多,这里仅仅给出了最基本的一些操作。更多git的使用需要在实际应用上进行理解和总结。

你可能感兴趣的:(Java)