Git介绍
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。通俗来说就是一个类似于svn的版本管理工具,可是那和svn/vcs这些有什么不一样呢?
最重要的一点就是,Git是分布式的。SVN的版本库是集中放在中央服务器的,写代码的时候使用自己的机器,首先从中央服务器更新最新的版本,编码完毕之后就推送到中央服务器。像svn这种是集中式版本控制系统,必须联网才能工作,如果在局域网还可以,速度够快没什么多大阻碍。但例如我这次项目因为项目人员分布不同地方,服务器部署在公网,那检出的速度就没有那么理想了。
而Git是分布式版本控制系统,它是没有中央服务器的,每个人的电脑就是一个完整的版本库,也因为这样使用的时候不需要联网了,那怎么进行版本交互呢?只需把各自的修改推送给对方,就可以互相看到对方的修改了。
下载、安装Git
因为我的Windows上已经配置好Git了,这里就使用Ubuntu来示范。如果是windows,在这里http://git-scm.com/download/win下载下来,狂点下一步就能安装好了,Linux也可以在这里下载,然后./configure,make,make install,但是我这边直接用自带的apt-get下载了更加方便。
安装完毕后在终端输入git,出现以下界面即安装成功。
安装完成后,设置git。
安装完成后,还需要最后一步设置,因为Git是分布式版本控制系统,所以每人都需要有自己的标志。在命令行输入(账号邮箱替换成自己的):
$ git config --global user.name "James"
$ git config --global user.email "jame_leong@163.com"
使用下面命令查看信息
git config --list
使用Git
首先创建版本库,mkdir建立文件夹之后使用命令 git init就可以吧这个文件夹变成空的版本库。如下图:
这样版本库就创建好了。下面就开始示范具体的代码控制操作。以一个文本文件test.txt为例
然后,提交文件。首先git add test.txt告诉git要准备添加了,这一步可以add很多文件,然后使用git commit -m "this is init"一并提交,并带注释。
现在使用git status可以看到代码库的状态:无文件提交。我们修改下文件,再查看:
同时使用git diff可以看到哪里改变了。
然后提交。像刚才一样add之后再commit即可。
现在,使用git log可以看到我们刚刚提交的记录。
那我们怎么回到刚才提交的版本呢?这里要注意一下这个commit后的一串字符,这是提交号,用来标志每一次提交的。这个标志号可以给我们在任何时候回到任何版本。
主要使用命令使用git reset --hard (版本标志号)检出以前提交的。--hard是彻底退回版本,代码也变成那个版本的。此外还有sotf、mixed,如下:
--soft
Does not touch the index file nor the working tree at all (but resets the head to <commit>, just like all modes do).
This leaves all your changed files "Changes to be committed", as git status would put it.
--mixed
Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports
what has not been updated. This is the default action.
--hard
Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded.
--merge
Resets the index and updates the files in the working tree that are different between <commit> and HEAD,
but keeps those which are different
between the index and working tree (i.e. which have changes which have not been added).
If a file that is different between <commit> and the index has unstaged changes, reset is aborted.In other words,
--merge does something like a git read-tree -u -m <commit>, but carries forward unmerged index entries.
--keep
Resets index entries and updates files in the working tree that are different between <commit> and HEAD.
If a file that is different between <commit> and HEAD has local changes, reset is aborted.
更新旧版本方法一:git reset --hard HEAD^为更新上一个版本,更新上两个就HEAD^^,或者HEAD~2
更新旧版本方法二:git reset --hard 3fb6bd,这个是标志号,只需要写刚才一大长串的一部分即可
最后,可以使用git reflog查看到我们每次使用的命令,其中包括了我们的标志号,所以我们可以在任何时候都返回到我们想要的版本。
此外,还有git checkout -- file可以在commit前返回到最原始的状态,git rm用来删除。
GitHub
git是一个分布式的版本控制系统,它除了可以使用本地为资源库之外,还可以使用远程资源库,就好像svn服务器一样。
但Git还有一个更好搭档GitHub,它是一个免费的远程资源库,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,
只要注册一个GitHub账号,就可以免费获得Git远程仓库。最在本地或服务器创建一个资源仓库通过shell命令或图形用户
界面可以和远端的github进行项目同步更新,实现对项目的管理。
使用GitHub
在GitHub里面https://github.com/创建一个账号,即可以创建一个项目,然后使用git remote add origin 命令即可以与远程仓库关联。
使用push -u origin master把本地master分支的最新修改推送至GitHub