简介
Git
是一个分布式版本控制系统(distributed revision control system)。
- 分布式:每个电脑上都有一个完整版,每个电脑都可以改;
- 版本控制系统:一个项目每天开发一点都会生成一个新的版本,版本控制系统可以在每天生成新版本的同时,还可以回退到历史版本.
安装git
在Windows下,直接下载exe文件安装即可;在Linux下,通过命令sudo apt-get install git
即可安装。
创建git仓库
1. 通过初始化创建
git仓库有两种,一种是裸仓库,其中没有包含任何文件,仅仅只实现一个版本控制,文件都在本地,裸仓库仅仅只是提供一种代码的分享;另一种是非裸仓库,可以看到文件的。
# 裸仓库创建
git init --bare xxx.git # 创建一个xxx.git文件夹
# 创建非裸仓库
git init [directory] # 在指定目录或者当前目录下创建一个.git目录
服务器上的git仓库只是为了分享,所以一般都是设置裸仓库,但是只有非裸仓库才可以看到提交的文件,所以本博客还是青睐非裸仓库。
2. 通过克隆已有仓库创建
除了自己创建空的git仓库外,还可以直接clone已有的仓库,细心观察发现GitHub上的克隆其实也是在克隆git目录文件
下面是示例:
# 克隆裸仓库
git clone user@ip_address:/home/nlp/repo_name.git
# 克隆非裸仓库
git clone user@ip_address:/home/nlp/repo_name
以上两个示例会自动在当前目录下创建仓库目录
user代表远程git服务器上的用户名,ip_address表示git服务器的ip地址(不包含端口),repo_name表示仓库的名字
配置git仓库
git的配置自上而下有三层:
/etc/gitconfig
:系统中对所有用户都适用,使用命令为git config --system
~/.gitconfig
:用户目录下的配置文件只适用于当前用户,使用命令为git config --global
- 当前项目的Git目录的配置文件在
.git/config
文件中
# 查看所有配置信息
git config --list
git config user.name
# 配置
git config --global user.name "xxx"
git config --global user.email "yyyy"
配置远程仓库
第一个是要配置origin
,origin
只是一个默认的叫法,也可以自己重命名或者添加多个,他们的作用是连接远程仓库。这样在pull
和push
代码的时候只需要使用origin
来表示远程仓库,这个在后面会有示例,这里介绍如何设置origin
:
# 查看origin
git remote origin -v
# 删除origin
git remote remove origin
# 配置origin
git remote add origin user@ip_address:/home/nlp/repo_name
这里和上面的克隆仓库有点类似,都是用户名加上@然后加上ip地址,冒号后面跟服务器上的仓库目录
除此之外还要配置密钥,具体步骤是通过git给每个电脑生成密钥,然后将此密钥添加到git服务器上的密钥文件中,这样才会实现基于ssh的推送和接受。
给本机生成密钥的方法是:
ssh-keygen
密钥默认会在当前用户目录下的隐藏目录.ssh
中,找到id_rsa.pub
,打开后(windows下可用git bash)将里面ssh-rsa
后面的所有内容复制出来,拷贝到服务器上的/home/git/.ssh/authorized_keys
文件里,一行一个
推送和接受代码
先接受代码,更新到最新版
# 拉
git pull origin master
# 推
git push origin master
版本控制操作
关于本地对项目的版本操作有如下六种:
1. add
添加目录或者文件,添加的位置是索引,这只是一个临时区域,永久将index中的内容存储到仓库需要通过commit提交。
# 将当前目录下所有内容生成一个快照(就是添加的意思)
git add .
# 添加一个文件
git add file1
# 添加多个文件
git add file1 file2 file3
2. status
查看本地状态,得知哪些被改变的文件可以在下个阶段提交(commit)。
3. diff
展示两次提交之间的差异,或提交与工作树之间的差异
# 查看已经添加但是没有提交的内容和仓库已有内容之间的差异
git diff --cached
4. commit
提交,并将变动记录到项目中去,需提供-m或–message参数来表示当前提交的描述
# 提交,并对当前提交提供描述信息
git commit -m "added file1"
# 快速提交(不需要add直接将修改的部分提交,不包含新建文件)
git commit -a
5. reset
将当前HEAD重置到指定的状态,从而实现版本的回退和前进。
通过git log
查看历史版本后,可以发现每个版本都有一个commit ID,还有一个版本的描述文本。
实现版本的回退是根据commit id前几位来的
# 回退两个版本
git reset --hard HEAD~2
# 前进或后退到某个版本
git reset --hard 988587c # 这里的988587c是commit ID的前几位,git会自动搜索,实现回退后再重新撤销到某个版本
所有回退和前进的历史记录,都可以通过git reflog
来查看
6. rm
移除操作,从工作树和索引中移除文件
7. mv
移动或者重命名一个文件、目录或符号链接
注意服务器上如果是非裸仓库,需要执行
git reset --hard
才能看到提交的文件
分支和合并
1. branch
# 查看所有分支
git branch
# 创建分支experimental
git branch experimental
# 删除分支(合并过后再删除)
git branch -d experimental
# 删除分支的所有
git branch -D experimental
2. switch
# 切换分支
git switch experimental
3. merge
两个分支都对项目做了修改,最后合并的时候如果没有冲突,可以使用如下命令进行合并:
# 合并分支
git merge experimental
如果二者有冲突,Git会在冲突的地方留下标记,此时需要自行修改,然后提交。
最后输入以下命令来提交合并的结果:
gitk
4. log
查看历史版本,这个非常重要
git log
# 每个版本信息都采用单行显示
git log --pretty=oneline