天天看点

git 使用初步

目前公司使用gitlab搭建了git服务器,在此记录一下工作中经常要用的命令。

git介绍最权威的当然还是官网,下面调重点来说:

理念

git的理念是速度、完全分布式,git的速度速度得益于其独创的以文件快照的形式保存不同版本之间的文件,完全分布是因为git在每个client端都保存着和server端同样的数据,这样git可以很快的比较版本之间的差异,在没有网络的情况下也能正常工作,这么做一个最大的好处是,避免了server宕机的问题,因为每个client都保存这全部信息,恢复比较容易。

git中文件的三种状态

对于任何一个文件,在 git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。

已提交:是说该文件已经被保存到本地仓库中

已修改:是说该文件被修改了,但是还没有被保存的本地仓库中

已暂存:是说该文件在下次提交时,会被保存到本地仓库中(提交的git命令后面在命令讲解部分会提到)

所以我们在本地操作时经常是在这三种情况下转换:下面一张图说明这三种状态的转换

git 使用初步

woking directory存放的是已修改的文件,也就是工作目录

staging area存放的是已暂存的文件,也就是暂存区域

git directory存放的是已提交的文件,也就是本地仓库

每个项目都有一个git目录(如果 git clone 出来的话,就是其中 .git 的目录;如果 git clone --bare 的话,新建的目录本身就是 git 目录),它是 git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。可以看出这也就是本地仓库。

工作目录就是从项目的git目录中取出某个版本的所有文件和目录用以后续工作的目录。

暂存区域其实是个简单的文件,一般都放在git目录中,有时也会称之为索引文件

安装git

ubuntu等类debian系统一行命令搞定

sudo apt-get install git

初始化

git和其他linux系统的软件一样,配置文件分为全局的,和每个用户级别的。

系统级别的是/etc/gitconfig文件,git config 时用 --system 选项,读写的就是这个文件。

用户级别的是~/.gitconfig文件,git config 时用 --global 选项,读写的就是这个文件。

除了这两个之外,git还可以为每个单独的项目提供特有的配置,在项目的git目录下的config文件

距离项目近的配置文件会覆盖上一级配置文件

一般来说必须要配置的是user.name和user.email这两个属性,可以使用下面的命令

git config --global user.name "john doe"

git config --global user.email [email protected]

由于使用了--global参数,所以设置的配置是用户级别的

查看设置的参数可以使用git config --list 命令,也可以查具体的属性值git config user.name

git的所有命令都可以通过git help <cmd>来查看用法。

到这里,你就已经完成了git所具备的基础知识了。

下面将要介绍的是完成上述理念所使用的具体命令

------add 2014-5-8 --

上面这些都是花架子,不能实用,下面重点说说最近一直比较迷糊的概念git push与git pull相关代码:

要想push代码,首先要先有个远程repository,这个命令中origin相当于本地的指针,指向github上的[email protected]/jiacai2050/ssss.git

之后再执行

这样就是本地的当前所在分支上的修改push到了origin仓库的master分支

多人协作时的大概流程:(角色jiacai2050:普通开发者, leader:项目组长)

假设现在在leader的github中有个ssss的项目,现在jiacai2050想开发个add_log功能,流程如下

1.开个本地分支,这样才有写权限

2.

添加一个新分支,用于添加新功能

3.做一些修改后,执行

这样就将本地的add_log分支(假设你目前就是在add_log分支上)推向github上fork的仓库中,并且新创建一个add_log分支

然后就可以发个pull request

leader看到这个pull request后,想要merge 这个请求的大概流程:

之后再

这样,leader就完成了合并操作。

以上流程参照http://happycasts.net/episodes/60?autoplay=true,欢迎大家去看这个视频,真的是浅显易懂,这个老师的声音也有好磁性的说。