git是什么?
git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。git与常用的版本控制工具SVN等不同,它采用了分布式版本库的方。
简而言之,git就是一个版本管理库,也是一个版本管理工具,它的作用就是帮助我们记录版本信息,以及修改内容。git的结构是分布式的资源库,特点是没有严格的服务器概念,每个单体都可作为资源库。这个特点就让我们人人有自己的git仓库这件事变得容易实现。
为什么要用git?
提到版本控制,总会想起大学毕业时写论文的场景,你电脑上的毕业论文一定出现过这番景象!
课设_初稿.doc 课设_修改1.doc 课设_修改2.doc 课设_修改3.doc 课设_完整版1.doc 课设_完整版2.doc 课设_完整版3.doc 课设_最终版1.doc 课设_最终版2.doc 课设_死也不改版.doc ... |
这就是最原始的版本控制方法,这种方式的缺点也是显著的。
多个文件,保留所有版本时,需要为每个版本保存一个文件;
协同操作,多人协同操作时,需要将文件打包发来发去;
容易丢失,被删除意味着永远失去;
为了解决这个痛点,应运而生了一批版本管理工具,如:git、svn等。其中linux当中最常用的当属git,因此学会使用git是十分必要的。
git安装和初次使用
git仓库的构建分两种方式,一种是管理当前的代码,给当前代码创建一个git仓库,这种需要初始化新仓库;还有一种是用clone克隆一个远程仓库到自己当前目录下,这种适合一群人维护一个仓库,也是常见的方式。
本文只介绍第一种当前代码的管理。
Ubuntu上安装git
执行sudo apt-get install git 进行git安装
elf@ubuntu:~/work/example/hello$ sudo apt-get install git |
创建版本库
以下以用git管理/home/elf/work/example/hello/hello.c文件为示例,展示git的安装和最简单的流程
(1)git初始化
git初始化新仓库,执行git init后会在当前目录生成一个.git目录
elf@ubuntu:~/work/example/hello$ git init |
(2)设置用户名和邮箱
每当我们在一个新的git上,首先执行git config --global user.name "Your Name"创建个人git账户,执行git config --global user.email 创建账户邮箱。
以账户名为elf_li,邮箱elf_li@exmple.com为例操作
elf@ubuntu:~/work/example/hello$ git config --global user.name "elf_li" elf@ubuntu:~/work/example/hello$ git config --global user.email "elf_li@exmple.com" |
(3)将当前需要跟踪的文件加到git仓库(将文件添加到暂存区域),执行git add [filename];以添加hello.c到仓库暂存区为例
elf@ubuntu:~/work/example/hello$ git add hello.c |
(4)提交版本
提交暂存区域的所有修改到本地仓库(如果修改文件后未添加到暂存区,将不会被提交),用git status指令(在分支内操作时会做具体的讲解)可以看到相关信息,提示需要提交。
执行git commit -m “xxx” 进行提交
elf@ubuntu:~/work/example/hello$ git commit -m "instial program" |
此时用git status查看,已经没有hello.c的提示了。
(5)查看当前提交信息
有过提交操作后,可以使用git log查看提交记录信息
elf@ubuntu:~/work/example/hello$ git log |
完成以上操作,已经构建了一个本地资源库,主要包括以下部分:
内容 |
说明 |
Directory |
使用git管理的目录,包含工作空间和git管理空间。 即:/home/elf//work/example/hello目录 |
workspace |
工作区,平时存放项目代码的地方 |
.git |
存放git管理信息的目录,git初始化时创建 |
staging |
暂存区,用于存放临时改动,事实上它只是一个文件,保存即将提交到文件列表信息 |
local repo |
本地版本库,是安全存放数据的位置,含有提交的所有版本的数据。其中HEAD指向最新放入仓库的版本。 |
Stash |
隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态 |