首页 > 代码库 > git的介绍与使用
git的介绍与使用
最近在学习一些开源技术,顺带想起了之前曾经别人推荐的git。作为一个程序员,肯定也都会很想要有一个自己的服务器,然后将一些重要数据备份在服务器中。如果是需要和朋友共同开发,那服务器更是不可或缺。但是你懂得,我等屌丝,木有钱购买自己的服务器,也不愿意去买一个服务器,嘿嘿,不是有开源的git么?正合我意,好吧,顺带日志也是需要记录的。
版本控制
本地
为了让某个文件能够恢复到之前的某个时间点,需要对文件进行版本控制。最开始的时候,可以在本地以时间为为单位,建立文件夹,使用copy文件到多个文件夹的技术,然后不一样的时间点,保存不一样的文件,通过这种方式,就可以实现备份文件了。这时候,本地机器作为版本控制中心。但是这种方式有个很明显的缺点,无法进行共享文件。比如开发一个程序,需要多人协同开发,就难以实现。
单台服务器
于是,就出现了一种新的方式,就是使用一台服务器,作为版本控制中心,也就是我们经常使用的svn,cvs等工具。通过这种方式,多人可以很好的进行协同开发,看起来,一切都很美妙。但是,如果中心服务器挂掉了呢?这时候后果会怎样?很抱歉,这时候中心服务器的数据将会有可能全部丢失(硬盘坏了)。这时候,客户端可能只能保存着之前某个时间点的文件。所以这种方式同样面临着单点故障的风险。
集群
在技术不断进步的今天,人们发现了新的办法来解决单台服务器面临的单点故障问题,就是使用服务器集群(cluster)。比如使用三台服务器作为服务器,然后将数据同时备份到这三个服务器,所以容错能力将会大大提供。Snapshot
下面我们来看下传统的svn,cvs等工具是如何来备份数据的,如下图所示这类工具被将这些文件在每个版本中都保存一份,比如version1中,FileA、FileB、FileC都会保存一份,然后在version2,也会保存一份变化的FileA、FileB、FileC,哪怕某个文件没有发生变化也会复制一份,比如FileB没有变化,但是在version2中需要从version1中copy FileB到version2中。
但是在git中,却不是这样子保存的,如下图所示:
git为了提高效率,并不是将每份文件都保存一份,而是采用了另外一种方式。只保存某个客户端有变化的文件。比如在version2,其中FileB这时候并没有改变,所以并不是保存一份FileB的复制文件,而是使用指针的方式,指向了version1的FileB文件。
几乎都是本地操作
在svn中,严重依赖于网络,如果网络挂了,那么很多最新文件的信息都无法得知,也无法提交新的更新。在git中,几乎所有的操作都是本地的,速度非常快,并且不受限于网络。这个特点,也是git的一种显著特征。比如你家里没有网络,那么你同样可以使用git来查看版本信息,或者是提交更新代码,因为git会把数据记录在本地数据仓库中。在具体的实现上,大概就是,客户端从服务器copy一份snapshot到本地,然后每次提交的数据都会保存在本地仓库,查看版本信息时,默认情况下也是从本地查看,而不是服务器。数据一致性
在git中,git会对数据进行校检。如果想要修改一些git不知道的文件,git都会拒绝。同样,在引用git的文件时,git同样会确保数据的完整性。文件的三个状态
在git中,文件主要有三种状态,分别是:committed、modified、staged。- committed代表文件已经提交到本地仓库
- modified代表文件已经被修改,但是还没有提交到本地仓库
- staged代表文件已经被修改,并且做了一个标志,下次将会被提交到本地仓库
- the git directory是存储本地数据的目录,也就是使用git clone下来的目录
- the working directory是从the git directory检出某个版本的文件目录
- the staging area是下一次commit的目录,里面记录了下一次commit的信息
git的主要流程
1. 在working directory中修改文件2. 将修改的文件添加到staging area
3. commit staging area的文件到repository
git命令
在git中,有很多种工具可以使用,这里面使用git的命令行,相信学会了命令行的操作,其他的gui也是手到擒来。在这里面,具体的安装,大家自己参考下文档,就不多介绍了。git config 设置git的相关属性
在这里面,我们可以设置多个属性,也可以直接编辑git的配置文件。- /etc/gitconfig这个文件保存着git的全局通用信息,对应的命令是:git config --system
- 在工具空间下的~/.gitconfig或者~/.config/git/config文件,代表的是当前git用户的配置文件,对应的命令:git config --global
设置用户信息
$ git config --global user.name "your name"$ git config --global user.email "youremail@163.com"
每次提交信息时,都会需要用到这两个信息,所以第一次使用git时,记得设置信息。
如果下次某个工程,你不想使用这个用户名和邮件,可以去掉--global参数,重新设置便可。
查看配置信息
$ git config --list获取帮助命令
$ git help <verb>比如查看config指令:$ git help config
将某个目录变成git管理的工程
1、进入你要提交给git管理的目录,比如我的是C:\git\demo2、执行下面的git命令:$ git init
3、将该目录中的文件添加到git中,执行下面的命令:$ git add demo.txt
4、commit数据到本地仓库中,执行如下命令:$ git commit -m "the initial commit"
整个过程如下图所示:
从git仓库中,clone一份到本地
在如火如荼的开源世界,越来越多的开源项目都将代码交给git来管理,如果你想将某个工程clone到你本地,那么就可以使用 $ git clone [urls]命令。1、找到自己感兴趣的git项目,复制url
2、执行$ git clone [url] [the project name]
url:仓库url地址
the project name:设置工程名字,默认为url后面部分的工程名字
这时候,git会将整个工程的数据都pull到本地,这里和普通的svn有着重大的区别。在svn中,会将所有的文件checkout出来(复制某个版本的所有文件),而git则是会把所有的数据,包括源文件,以及版本信息都完整的复制到本地。
提交文件到仓库中
我们将git中的文件分为下面几个状态:tracked or untracked。tracked代表文件属于git管理,unchecked代表文件不属于git管理。在使用$ git clone [url]命令,那么本地对应的git工程中,所有的文件都是属于checked的,如果你新添加的文件,那么都是unchecked的。同样的,我们也将文件分为modified or unmodifiled。modified代表文件已经修改,但是没有commit;unmodified代表文件已经commit,没有修改。下面是文件之间的状态转换图:
查看状态:$ git status
如果你的工程刚刚$ git clone下来,那么结果如下所示:git同样支持查看简要信息:$ git status -s
这个表示,当前工程,所有的文件都是checked并且unmodified状态,并且显示出了当前的分支。下面我添加一个新的文件到git的文件中,并且输入新的内容。这里假设README文件存在,如果不存在,可以使用$ git add [file name],将file name文件变成tracked,然后输入文件内容。添加一个文件到git:$ git add [file name],或者是一个文件更新了,同样也是使用这个命令。这个命令不单止将一个文件变成tracked,同样也会将这个文件加入到the staging area中,下次commit时,将会提交到repository。
提交
一个文件,通过$ git add [file]变成了tracked以及staging,下一步就是将数据commmit,commit的命令也非常简单,就是:$ git commit。这个命令会要求用户输入这次提交的注释,用户直接添加自己的注释,然后提交便可。如果想跳过这一步,就使用下面这个命令:$ git commit -m "the desc content"。
删除文件
删除一个文件:第一步,$ rm [the file name],第二步:$ git commit,第三步:$ git rm [the file name]移动文件:$ git mv [file_from] [file_to],这个指令就是其实就是将原来的文件进行了如下的几步操作:
- $ git rm README.md 删除原来的文件
- $ git add README 添加新的文件
总结
学习需要坚持不懈,特别对于很多新技术而言,更加需要具备良好的英语阅读能力。所以,如果从长远考虑,英语的学习必不可少,有时候甚至比技术更加的重要。希望自己在接下来的工作生涯中,可以继续保持学习英语的干劲,不断提高自己的学习能力。
git的介绍与使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。