Git介绍--安装以及基本操作(一)

Git概述

  git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNU Interactive Tools(一个类似Norton Commander界面的文件管理器)有所不同。

  git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。

  实际上内核开发团队决定开始开发和使用git来作为内核开发的版本控制系统的时候,世界上开源社群的反对声音不少,最大的理由是git太艰涩难懂,从git的内部工作机制来说,的确是这样。但是随着开发的深入,git的正常使用都由一些友善的命令来执行,使git变得非常好用。现在,越来越多的著名项目采用git来管理项目开发,例如:wine、U-boot等。

  作为开源自由原教旨主义项目,git没有对版本库的浏览和修改做任何的权限限制,通过其他工具也可以达到有限的权限控制,比如:gitosis、CodeBeamer MR。原本git的使用范围只适用于Linux/Unix平台,但在Windows平台下的使用也日渐成熟,这主要归功于Cygwin、msysgit环境,以及TortoiseGit这样易用的GUI工具。git的源代码中也已经加入了对Cygwin与MinGW编译环境的支持且逐渐完善,为Windows用户带来福音。

Git和SVN的区别

区别

  1、SVN属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器   SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等。   Git是一个分布式版本控制系统,操作命令包括:clone,pull,push,branch ,merge ,push,rebase,Git擅长的是程序代码的版本化管理。

  2.GIT跟SVN一样有自己的集中式版本库或服务器。 但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然能够提交文件,查看历史版本记录,创建项目分支,等。对一些人来说,这好像没多大用处,但当你突然遇到没有网络的环境时,这个将解决你的大麻烦。

  3.GIT把内容按元数据方式存储,而SVN是按文件   所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

  4.分支在SVN中一点不特别,就是版本库中的另外的一个目录。 如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

  5.GIT没有一个全局的版本号,而SVN有   目前为止这是跟SVN相比GIT缺少的最大的一个特征。你也知道,SVN的版本号实际是任何一个相应时间的源代码快照。我认为它是从CVS进化到SVN的最大的一个突破。因为GIT和SVN从概念上就不同,我不知道GIT里是什么特征与之对应。如果你有任何的线索,请在评论里奉献出来与大家共享。

  6.GIT的内容完整性要优于SVN:   GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏

优缺点

  • SVN的优点:

1、采用集中式,易于管理,保证安全性; 2、管理方便,逻辑明确,理念符合常规思维; 3、代码的一致性高; 4、适合人数不多的项目开发; 5、允许一个文件有任意多的可命名属性,会关注所有的文件类型; 6、支持二进制文件,更容易处理大文件; 7、支持空目录。

  • SVN的缺点:

1、服务器压力太大,数据库容量暴增; 2、必须连接在服务器上,否则基本不能工作、提交、对比、还原等; 3、不适合开源开发。

  • Git的优点:

1、适合分布式开发,强调个体; 2、公共的服务器压力和数量都不会太大; 3、速度快, 成熟的架构,开发灵活; 4、任意两个开发者之间可以很容易的解决冲突; 5、离线工作,管理代码成本低,不需要依赖服务器; 6、部署方便。基本上下个命令就可以用; 7、良好的分支机制,可以让主干代码保持干净。

  • Git的缺点:

1、资料少,学习成本比较大,学习周期比较长,要求人员素质比较高; 2、不符合常规思维; 3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

Git安装

  git可以在Linux系统上安装,也可以在window下安装,在Linux系统下安装很简单,这里不做解释,本文以window下安装为例子:

1、去官网下载安装包

官网下载 如果一些不想去官网下载的童鞋们,我把我下载好的分享给你们: 链接: https://pan.baidu.com/s/19NkL7thU2vMSKuZGdv7lyg 提取码: kxpa

在这里插入图片描述

这是我之前下载好的,我就不下载了。

在这里插入图片描述

2、安装

  找到我们刚才下载的安装包,双击安装,一直选择默认即可。

3、安装成功

  当我们安装成功后,我们可以在开始菜单栏找到有关git的相关菜单

在这里插入图片描述

  我们也可以在任何电脑目录下进行鼠标右击看到git相关的菜单选项:

在这里插入图片描述

配置个人信息

  我们安装成功后,我们要设置一下个人信息,才能使用。 注意:我们一般情况下都是先创建一个git本地仓库(也就是一个固定的文件夹),我的如下: 我的是放在了D盘的根目录下了。

在这里插入图片描述

然后我们在根目录下鼠标右击选择Git Bash 进入命令界面:

在这里插入图片描述

进去命令界面后,输入命令如下:

$ git config --global user.name "zmf"
$ git config --global user.email "yexiaomo1997@gmail.com"

其中zmf是自定义的你的账号名称,yexiaomo1997@gmail.com是你要关联的邮箱,以后要用到,尽量使用自己常用的邮箱地址。

创建版本库

  版本库也就是我们平常说的仓库,repository。其实也就是个文件夹,只是这个文件夹被git管理,该文件夹中的文件的创建、修改、删除都能够被追踪。

创建文件夹

执行一下命令即可,(在git命令窗口里的命令还是有大部分和Linux系统中的命令相同的)

mkdir git1

在这里插入图片描述

初始化操作

  然后我们进入其创建好的git1目录下,通过git init 命令把这个目录变成Git可以管理仓库,创建成功后在该文件夹下会多处一个.git的文件夹。

git init

注意:有些童鞋可以看不到,因为此文件夹是隐藏的,看不到的童鞋可以在在文件管理器的菜单栏找到查看,然后勾选隐藏项目即可:

在这里插入图片描述

在这里插入图片描述

注意:Git目录就是用来来跟踪管理版本的,千万别自己有事没事皮一下修改这个目录的文件,如果乱改的话,就把Git仓库破坏了,以后使用时会有问题的。

创建一个文件

在命令窗口执行如下命令:

touch a.txt

在这里插入图片描述

执行git add命令添加到仓库

  创建好空的文件后,然后编辑,保存,执行以下命令:

git add a.txt

在这里插入图片描述

执行git commit 命令提交

$ git commit -m "第一次提交了a.txt文件"
[master 3fa1e5e] a.txt
 1 file changed, 2 insertions(+)
 create mode 100644 a.txt

  commit -m的-m后面跟的是本次操作的备注说明信息。最好是有意义的,也就是下次看到这个说明就清楚提交了什么内容。 为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add files"

status 和 diff命令

命令说明
git status查看当前库的状态
git diff是difference的简写,是用来查看文件的变化的(工作区和版本库)

正常状态下执行这两个命令如下:

在这里插入图片描述

注意:我的git status命令执行应该比各位童鞋多出来中间的一段提示,因为我的连接了远程仓库,我还没更新到远程仓库里,所有提示。至于连接远程仓库,后面我会介绍,这里无关紧要,请继续。

对a.txt文件进行修改

在这里插入图片描述

执行status命令

$ git status a.txt
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

上面的状态以及信息的提示,就是告诉我们a.txt文件被修改了,但是还没有提交。

执行diff命令查看不同

$ git diff a.txt
warning: LF will be replaced by CRLF in a.txt.
The file will have its original line endings in your working directory
diff --git a/a.txt b/a.txt
index 6227925..c58f7a0 100644
--- a/a.txt
+++ b/a.txt
@@ -1,2 +1,4 @@
 hello git
 你好啊!
+
+我很好啊!

  通过此命令我们能够看到增加的是 我很好啊!这行信息,知道了对a.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步

add命令

$ git add a.txt
warning: LF will be replaced by CRLF in a.txt.
The file will have its original line endings in your working directory

commit命令

$ git commit -m "第一次修改"
[master f4a4b31] 第一次修改
 1 file changed, 2 insertions(+)

提交后再执行git status命令

$ git status a.txt
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,而且工作目录是干净的(working tree clean)。

版本退回

log命令

  刚刚我们对read.txt文件执行两次操作,我们还能记得住我们做了什么操作,但是当我们操作了一段时间后,修改的越来越多,那么我们就会忘记很多以前的操作。这时我们可以通过log命令来查看历史信息

$ git log a.txt
commit f4a4b316b1b5f30daf9d2b8ff53d9be5138ef4f3 (HEAD -> master)
Author: zmf <yexiaomo1997@gmail.com>
Date:   Sun May 12 18:40:42 2019 +0800

    第一次修改

commit 3fa1e5e717143b5ba4291c05f15a5fe23150b4e3
Author: zmf <yexiaomo1997@gmail.com>
Date:   Sun May 12 16:29:27 2019 +0800

    a.txt

  git log命令显示从最近到最远的提交日志,每条日志信息占了五行记录,如果日志比较多的情况下。我们可以在命令后添加 –pretty=oneline单行来显示日志信息

$ git log --pretty=oneline
f4a4b316b1b5f30daf9d2b8ff53d9be5138ef4f3 (HEAD -> master) 第一次修改
3fa1e5e717143b5ba4291c05f15a5fe23150b4e3 a.txt

提示: "f4a4b......"这一串的信息就是每次操作的版本号。

版本回退

1、回退到上个版本

在这里插入图片描述

2、我们也可以根据版本号进行版本回退

$ git log --pretty=oneline
ff77b81044540f6da27e49b52a3bf0ef21d09838 (HEAD -> master) a.txt 第二次测试修改!
3fa1e5e717143b5ba4291c05f15a5fe23150b4e3 a.txt

Z&F@DESKTOP-GC0DRTQ MINGW64 /d/git/git1 (master)
$ git reset --hard 3fa1e5
HEAD is now at 3fa1e5e a.txt

Z&F@DESKTOP-GC0DRTQ MINGW64 /d/git/git1 (master)
$ git log --pretty=oneline
3fa1e5e717143b5ba4291c05f15a5fe23150b4e3 (HEAD -> master) a.txt

首先我们发现信息被我们找回来了,其次3fa1e5....是最新版本的版本号,虽然不全,但是前几位要正确,git会自动匹配

转载于:https://my.oschina.net/u/4116644/blog/3048626

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值