Little eagle - git学习笔记

简介

git、svn和cvs的主要区别在于git是分布式版本控制系统,而svn和cvs则是集中式版本控制系统。集中式版本控制系统所有文件系统存放在中央服务器上,工作模式更像是一个C/S模式,本地用户通过安装客户端来与服务器进行版本的获取与更新操作。问题是当服务器处于脱机状态时,所有用户都要停止工作。

为了解决该问题,git则抛弃了这种机制,用户将所有文件包括版本信息下载到本地,提交和修改可以在本地执行,在修改确定后再与远程服务器保持同步。

简单理解git是什么?

git是一种开源分布式 版本控制 工具

安装和配置

Linux下安装git

Ubuntu10.10及以上版本、Debain squeeze及以上版本使用以下命令:

1
2
$ sudo aptitude install git
$ sudo aptitude install git-doc git-svn git-email gitk //安装单独的软件依赖包

RHEL、Fedora、Centos等系统下的安装:

1
2
$ yum install git
$ yum install git-svn git-email gitk //安装单独的软件依赖包

Windows下安装git

git官网下载对应位数安装包按指引安装即可

此外推荐一款Windows下git图形化操作界面软件TortoiseGit

git基本配置

配置个人身份

用于表示git提交记录中的个人信息,表明该提交操作人是谁

1
2
git config --global user.name "youname"
git config --global user.email youremail

服务器的认证配置

以下两种方式任选其一(推荐ssh协议认证方式):

(1)ssh协议认证方式

以下配置以部署到github为例

首先生成公钥(yue),一路回车即可

1
ssh-keygen -t rsa -C "youremail"

在默认路径下找到C:\.ssh_rsa.pub,以记事本方式打开,复制全部文本。

打开github,如下

title命名随意(能够让你想起来是哪台电脑的备注即可),将之前复制的全部文本粘贴到Key文本框中,点击绿色按钮Add SSH key!搞定!

(2)http/ https协议认证方式

设置口令缓存

1
git config --global credential.helper store

添加https证书信任

1
git config http.sslverify false

git基本命令

工作区与文件状态

要理解git命令的作用,前提是搞懂git工作区域的概念,git一共有四个工作区域,工作区域之间的关系及指令如下:

此外,还要对git文件的四种状态有初步理解,分别是:

Untracked:文件为加入git库,不参与版本控制,通过git add转为Staged

Unmodify:已入库未修改。有两种转变方式,git rm移除版本库转为Untrackded 或者被修改转为Modified

Modified:已修改。该状态下也有两种转变方式,git add进入暂存Staged状态,git check丢弃修改进入Unmodify状态

Staged:暂存状态。git commit同步到库中,此时远程和本地文件一直,文件变为Unmodify状态。而如果是git reset filename取消暂存,则变为Modified状态。

直观的四种状态的转变如下图:

常用命令

新建代码库

1
2
3
4
5
6
# 在当前目录新建一个Git代码库
git init
# 新建一个目录,将其初始化为Git代码库
git init [project-name]
# 下载一个项目和它的整个代码历史
git clone [url]

查看文件状态

1
2
3
4
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status

工作区<-->暂存区

1
2
3
4
5
6
7
8
9
10
11
12
13
# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
git add .
#当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用
git rm file_path
#当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。
git rm --cached file_path
#直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
#加了【分支名】 +文件名 则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
git checkout

工作区<-->资源库(版本库)

1
2
3
4
5
6
7
8
9
#将暂存区-->资源库(版本库)
git commit -m '该次提交说明'
#如果出现:将不必要的文件commit 或者 上次提交觉得是错的 或者 不想改变暂存区内容,只是想调整提交的信息
#移除不必要的添加到暂存区的文件
git reset HEAD 文件名
#去掉上一次的提交(会直接变成add之前状态)
git reset HEAD^
#去掉上一次的提交(变成add之后,commit之前状态)
git reset --soft HEAD^

远程操作

1
2
3
4
# 取回远程仓库的变化,并与本地分支合并
git pull
# 上传本地指定分支到远程仓库
git push

其它常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 显示当前的Git配置
git config --list
# 编辑Git配置文件
git config -e [--global]
#初次commit之前,需要配置用户邮箱及用户名,使用以下命令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
#调出Git的帮助文档
git --help
#查看某个具体命令的帮助文档
git +命令 --help
#查看git的版本
git --version