Git入门

Git的一些基本概念

Git是什么,Git是一个版本控制系统,用来记录文件内容变化,以便以后查阅特定版本情况的系统。那么,既然是版本控制系统,那么Git怎么记录文件之间的差异呢?

Git的做法与其他版本控制不一样,一般的版本控制系统,他们比较关心文件内容的具体差异(图1),但是Git不一样(图2)。git应用了一种被称为“快照”做法。Git会遍历整个文件系统。当有变化的文件时,它会以某种方式(快照)记录变化的文件,并且保存一个指向这个快照的索引(指针)当文件没有变化时,为了提高性能,git会对原来的指针做一个链接。

一般版本控制系统

图1:其他系统在每个版本中记录着各个文件的具体差异

Git的版本控制

图2:Git 保存每次更新时的文件快照

还有一点很重要,Git不是倚靠文件名来工作的,而是通过哈希值进行工作,就像下面的一串,因为保存在Git数据库中的东西都是用哈希值做索引的,Git的工作完全依赖于该哈希值。

下面来说很重要的概念,那就是文件的三种状态。文件在Git内部只有三个状态:已提交(commited),已修改(modified)和已暂存(staged)。这分别对应三个区域:Git的工作区域,暂存区域和本地仓库。所以一般流程是这样的。

文件的三种状态

图3:工作目录,暂存区域,以及本地仓库

  • 你在工作区域里面修改一个文件,那么这个文件处于已修改状态(modified)
  • 你通过git add可以将文件从工作区域转向暂存区域,文件状态变为已暂存(staged)
  • 你通过git commit可以讲文件又暂存区域转到本地仓库,此时的状态就是已提交(commited)
  • 如此反复

顺便提一下,git其实还有另外一种状态,那么就是未跟踪状态,当你新建一个文件时,Git并不知道,所以此时文件处于未跟踪状态,这时候你需要git add filename 来保证你新建的文件处于git管理的生命周期中。

在我们开始真正开始Git之前,你还需要了解两个概念:分支和远程。

所谓分支,就是你可以在主干上或者其他分支中分离出一条线,你就可以在这条线上进行开发,而不影响主干和其他分支,Git上的分支,其实本质上指向commit对象的可变指针。当你创建一个新分支时,就是创建一个新的分支指针。再谈另外一个概念:远程。我们知道,当你一个人开发时,你可以只在你的本机上进行版本控制。但这样的话,是发挥不了Git的强大威力的。我们在日常开发中,往往是一个团队进行开发的,大家可能在不同的机器上开发同一个项目。这个时候我们就需要一个Git服务器,大家把代码都可以提交到那个服务器上,其实服务器上和我们本地没有什么实质的区别,我们也可以在这个服务器上建立分支,移除分支等,这个服务器就是我们所说的远程的概念。

开始一个新项目

Git的下载我们这边就略过不谈,一般机器上都默认有Git的,在开始工作之前,我们首先得做一些配置

git config --global user.name "fyales"
git config --global user.email "[email protected]"

如果你想拷贝别人得Git仓库,执行以下代码即可

git clone git://github.com/schacon/grit.git

如果你想自己从无到有建立一个新的项目,那么首先你应该选取一个远程分支服务器,这里我们就用通用的OsChina Git吧(谁让Github在中国有些不稳定) 。首先你应该将你的SSH秘钥添加到你的Oschina Git里面。如果没有的话,可以用下面命令生成一下,并将id_rsa的代码添加到Public Key里面.

ssh-keygen
cd ~/.ssh
cat ~/.ssh/id_rsa/pub

就像下面这张图(图4)。

ssh示例

图4:SSH公钥管理

添加公钥的目的就是让服务器信任你的电脑,让你的电脑可以对你的远程文件进行操作,这样你就可以不用输入密码了。 然后你就可以建立你的新项目了。在这里你要记得你新项目的远程地址哦(类似https://git.oschina.net/fyales/DoList.git的形式)

接下来的工作差不多就是本地的工作了。

mkdir DoList
git init

我们首先需要做的就是初始化一个Git新仓库,然后建立一个.gitignore文件,这个.gitignore文件的作用就是让Git忽略到一些文件,从而确保这些文件不被添加到Git仓库中。此文件支持最基本的正则表达式。接下来就是添加远程仓库了

git reomte add origin https://git.oschina.net/fyales/DoList.git
git pull origin master
git status
git add .
git commit -am "first commit"
git push origin master

在这里我们做了如下工作:将你的本地仓库与远程仓库联系起来,然后将远程仓库的代码拉下来,接下来将代码推到本地仓库,最后一行就是将代码推到远程仓库。

这里要说的首先是第二行命令,该命令就是将本地仓库与远程仓库联系起来,其中origin是我们起的默认仓库名,第三行命令的完整格式是git pull origin:master master。其中master是默认分支名,这句代码的完整含义就是将origin这个远程分支的master分支的代码拉下来,然后再合并到本地的master分支。与之对应的是git push命令。其完整含义就是将本地的master分支的代码推到origin这个远程分支的master分支上。

另外一个值得注意的命令就是git status.它可以获得你现在的工作状态,这个命令的使用率非常频繁(有可能是最频繁的)大家可以试一下。

用分支进行操作

到现在为止,我们做的还不错,我们添加了远程分支,并且可以在本地上进行工作,下面我们可以看看我们的提交记录

git log

这个命令是让你看观看你的提交历史的,如果我们不知道这个命令怎么用怎么办,没有关系,下面这个命令可以帮助你

git log --help

好了,下面我们又要开始工作了,我们的master分支一般是稳定分支,一般的不直接在master分支进行操作,所以我们要另外建立一个分支

git branch develop
git checkout develop 

这样我们就建立了一个develop的分支,并且将分支切换到了develop。这两个命令也可以变成一个命令进行使用

git checkout -b develop

好了,我们在这个分支进行工作,添加代码,修改代码,balabalabala。如果我一不小心修改了build.gradle文件,我需要将它恢复原样怎么办,git可以帮你恢复原样,就像这样

git checkout build.gradle

最后,终于大功告成,当我们完成工作后,我们需要合并代码到master上,所以我们就应该这样

git checkout master
git merge develop

这个命令的意思是在master分支的基础上合并来自分支develop上的代码。好了我们的开发告一段落了,现在应该删除该分支了1

git branch -d develop

好了,一般的Git操作就是这样了,好长时间不动笔,写得比较凌乱。。。。。后面会讲比较深入点的,今天就到这里了。最后,口号:

Make things interesting!

你可能感兴趣的:(Git入门)