git使用教程

star2017 1年前 ⋅ 379 阅读

背景

自从git出来了之后,大家都纷纷使用git了,毋庸置疑git已经成为主流,如果你还在使用svn来管理项目,那赶紧开始学习git吧。

svn和git的区别

svn工作模式
imagepng
缺点:如果svn挂了或者网络挂了,那么代码就没办法提交了。

git工作模式
imagepng
git是离线的,你可以在自己机器上创建仓库,后面再选择提交到远程仓库上去。
git中几个名词解释:
工作区(working tree):就是你工作所在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
暂存区(index):是索引文件,它是连接working tree和commit的桥梁,每当我们使用git add命令之后,index file的内容就改变了,此时index file就和working tree同步了。
本地仓库(commit):是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git commit就是将index file里的内容提交到本地仓库(commit)中。

git安装

1、window
下载地址:
https://git-scm.com/download/win

然后下一步下一步就可以了。

2、linux
1)安装依赖包

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

2)下载git并解压

wget https://github.com/git/git/archive/v2.3.0.zip
unzip v2.3.0.zip
cd git-2.3.0

3)编译

make prefix=/usr/local/git-2.3.0 all
make prefix=/usr/local/git-2.3.0 install

4)环境变量

添加环境变量
vim /etc/profile

export PATH=/root/svr/git/bin:${PATH}

立即生效

source /etc/profile

安装是否成功

git --version

imagepng
表示安装成功

gitlab安装

1、下载地址
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/
2、安装依赖

sudo yum install -y curl openssh-server openssh-clients cronie
sudo lokkit -s http -s ssh

安装邮件服务

sudo yum install postfix sudo service postfix start sudo chkconfigpostfix on

3、安装gitlab

sudo rpm -ivh gitlab-ce-9.5.4-ce.0.el6.x86_64.rpm

4、配置
vim /etc/gitlab/gitlab.rb

external_url='http://xxxxxx'

unicorn['port'] = 9081

5、启动

sudo gitlab-ctl reconfigure

其他命令

sudo gitlab-ctl start # 启动所有 gitlab 组件;

sudo gitlab-ctl stop # 停止所有 gitlab 组件;

sudo gitlab-ctl restart # 重启所有 gitlab 组件;

sudo gitlab-ctl status # 查看服务状态;

sudo gitlab-ctl reconfigure # 启动服务;

sudo vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;

常用命令

git init

该命令创建一个空的仓库,在文件夹下面会出现.git文件夹。

1)-q|--quiet
只打印错误或者警告信息。

2)--bare
创建一个裸仓库,创建的仓库不包含工作目录。一般使用这个命令,文件名会设置为.git结尾。普通仓库不能被 push,因为可能会有暂存文件,从而导致冲突,所以 git 做了限制。bare 仓库可以被 push,因为它禁止在仓库里工作(没有暂存文件),不存在上面的问题。现在的代码托管服务 github 这些,新建仓库都是 bare,所以见到的克隆地址都是 xxx.git。

3)--template=
规定目录使用哪个模板。模块的配置如下(优先级从高往下):
1、在参数后面配置 --template 选项
2、设置环境变量 $GIT_TEMPLATE_DIR
3、配置 init.templateDir 变量
4、默认模板目录:/usr/share/git-core/templates

4)--separate-git-dir=
不是创建一个文件目录,而是创建一个文本文件,这个文本文件包含实际的仓库地址,将git仓库与文件系统做一个符号链接,指向特定的路径。如果他被重新初始化,这个仓库将移动到真实的地址。

5)--shared[=(false|true|umask|group|all|world|everybody|0xxx)]
指定仓库的权限,默认是group

umask |flase
用户权限根据权限掩码。

group |true
当前组有什么权限,仓库也有相应的权限。

all | world | everybody
与group相似,确保所有用户可以读。

0xxx
是一个八进制码,0xxx会覆盖用户的umask(权限掩码),0640表示仓库组可读,但是组不能写或者其他人不能访问。0660表示仓库对当前用户或者组可读可写,其他人不能访问。

补充:在命令行中涉及到的目录,如果不存在,那么在执行的时候会去创建。

git clone

将仓库克隆到新的目录下,为克隆仓库创建一个远程跟踪分支。

-l|--local
如果你克隆本地机器的仓库,在克隆的时候,会绕过Git aware传输机制,直接复制本地仓库的HEAD、objects和引用目录。为了节省空间.git/objects/下面的文件都是硬连接。
如果仓库地址是本地地址,如/path/test,那么--local将不起效果。如果仓库地址是网址,这个选项将被忽略。
如果使用--no-local,那么/path/test会使用git传输机制获取仓库。

--no-hardlinks
在本地文件系统中强制去克隆一个仓库,生成一个不是硬连接的仓库,他的作用是对你的仓库做一个备份。

-s|--shared
当要克隆的仓库在本地机器上时,不使用硬链接,而是自动设置.git/objects/info/alternates,以便与源仓库共享对象。生成的仓库开始时没有自己的任何对象。

-q|--quiet
安静的执行,不输出任何日志
imagepng

-v|--verbose
详细的运行,输出比较详细的日志
imagepng

-n|--no-checkout
克隆完成之后,不执行HEAD的检出

git add

更新索引,能让他在暂存区中找到,为下次提交做准备。
可以通过git status命令来查看文件的状态。

<pathspec>
需要添加的文件,如*.c,可以添加所有以.c结尾的文件。也可以是一个目录名,如dir,会把dir/file1和dir/file2都提交。
如果你想添加修改或者新建的文件,但是不包括删除的文件,那么使用--no-all选项。

-v|--verbose
详细输出日志

-n|--dry-run
不实际添加文件,只是看看哪些文件存在或者可能被忽略

-f|--force
允许添加其他被忽略的文件

-i|--interactive
以交互的方式进行添加。

-A|--all|--no-ignore-removal
如果配置了<pathspec>,那么这个目录下的所有文件都会被加入到暂存区。
如果没有配置<pathspec>,那么所有文件都会被加入到暂存区。

--refresh
不添加文件,只刷新他们在暂存区的状态

--ignore-errors
如果某个文件添加到暂存区的时候,报错了,可以使用这个命令忽略报错,但是会把没有报错的文件添加到暂存区里面。

git status

查看工作区的状态

-s|--short
以简单的方式输出信息
imagepng

-b|--branch
如果没有-s,那么跟get status输出一样
如果有-s 那么会显示当前分支
imagepng

-v|--verbose
输出更加详细的日志
imagepng

git diff

查看改变

git diff
查看工作区与暂存区的差别。

git diff --cached
查看暂存区与本地仓库的差别。
imagepng

git diff HEAD
查看工作区和本地仓库的差别。

git diff test test2
比较两个仓库的不同。
imagepng

git commit

把暂存区的数据提交到本地仓库。

-a|--all
提交所有暂存区里的文件,没有加入暂存区的文件不会被提交。

--branch
日志中输出当前分支。

-m <msg>|--message=<msg>
添加提交的备注。

git reset

重置HEAD到另一个commit。
imagepng

git reset HEAD
表示重置到HEAD这个版本。

git reset HEAD~3
表示重置到更早的第三个版本。

--soft
不重置暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响) 。

--mixed
重置暂存区和本地提交的内容为未暂存的状态,但不重置工作区。

--hard
重置暂存区和工作区。将已提交的内容的版本恢复到本地。

--merge
重置暂存区,如果回退版本和最新版本不一样,那么会修改工作区的文件,但是会保留工作区的修改。如果暂存区里有未提交的文件,那么重置将被终止。

-keep
重置暂存区的文件,如果回退版本与最新版本不同,那么修改工作区的文件。
如果该文件在工作区中已经编辑过,那么重置将被终止。

git rm

在暂存区中移除该文件或者文件夹。

<file>
移除的文件,如*.c,移除所有以c结尾的文件。也可以设置目录。

-f|--force
强制删除暂存区文件

-r
当给定一个主目录名时,允许递归删除。

--cached
从暂存区中删除文件或者路径。工作区的文件不论有没有被修改都会被保留。

git branch

默认列出所有本地分支

-r
列出所有远程分支

-a
列出所有分支

-v |-vv
查看最近提交

git branch [branchname]
创建本地分支

--track [branch] [remote-branch]
基于远程仓库创建本地分支

-d [branchname]
删除本地分支

git checkout

git checkout [branchName] / git checkout -b|-B dev origin/dev
切换本地分支或者基于远程创建本地分支。

-b
根据指定的版本创建一个新的分支名。

-B
根据指定的版本创建一个新的分支名。如果已经存在那么进行重置。

git log

查看提交日志

--stat
显示变更的文件

imagepng
加了--stat的展示
imagepng

-S<string>
根据关键字进行搜索

git tag

git tag [tagname]
创建标签

-d
如果标签存在就删除。

git fetch

更新git remote 中所有的远程仓库,所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中。

git pull

将来自远程仓库的更改合并到当前分支中。git pull会先使用git fetch获得当前指向的远程分支的后续版本的数据,然后在使用git merge将本地分支进行合并。

git push

推送指定分支到远程仓库。

-u|--set-upstream
为每个推送成功的分支加跟踪引用。第一次push需要加上。

--all
推送所有分支

-d|--delete
删除远程仓库分支

--tags
所有refs/tags下面的tag都推送。

-f|--force
强制推送。

git remote

查看所有远程仓库。

git remote add origin [URL]
添加远程仓库

git remote rename <old> <new>
对远程仓库重命名。

git remote remove <name>
移除远程仓库。

git shortlog

以用户的维度输出日志。
imagepng

-e
显示邮件

git revert

恢复某次操作,此次操作之前和之后的commit和history都会保留,并且把这次恢复作为一次最新的提交。前提条件是你的工作区是最新的。
imagepng

git stash

把当前未提交的文件暂时存储起来,等你做完其他的事情之后在还原回来。
使用场景:
比如你正在开发一个功能,突然来了一个很紧急的测试bug,需要马上修改掉,但是你代码写了一半,提交上去可能会出问题,如果你不知道stash这个命令,那么你可能会在本地新建一个分支,修改完bug之后把这个分支删掉。使用stash这个命令,那么你可以暂时把你的代码存储起来,等修改完bug之后在显示出来。这样就不需要在本地拉个分支了。大大的节约了时间。

分支管理

imagepng

master:主干,上线的时候代码都会合到这里,一般会控制上传代码的权限。
分支:给开发用,一般开发一个新功能或者一个迭代,都会拉一个分支。
标签:每次上完线都会打个tag。

分支切换原理:

imagepng
只是把指向版本3的指针指向了版本2

本文为博主原创文章,未经博主允许不得转载。
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: