前言

在开发一个软件项目时,本地只有几十行代码或几百行代码时还可以维护,但当代码达到一定的数量后或两三个人共同开发一个项目时,就很容易会出现代码混乱、冲突、排错难等问题。一旦开发完工以后发现整个项目运行不了,提交的代码也无法确认到责任人,导致维护项目时需要花费数倍的时间。为解决上述问题,版本控制系统应运而生。

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管 理,是软件配置管理的核心思想之一。

背景介绍

1.git 是什么?

Git是一个开源的分布式版本控制系统。可以有效、高速地处理从很小到非常到非常大的项目版本管理。Git创始人Linus,同时也是Linux的创始人。Git与Github就是球与球场的关系。Git的使用分为本地仓库管理和远程仓库管理两大部分。

2 .为什么要用 git ?

需要进行版本控制,防止文件修改的版本过多,无法便捷的实现控制。比如,回退到某个历史的版本。

3.git 有什么好处?

git 可以管理各种文件,特别是代码项目。多使用在*nix系统中是分布式管理,不同于集中管理。这是git和svn的核心区别更好的支持分支拥有全球唯一的版本号代码安全性更加有保证开源方便,数据传输速度更快,可以无网络操作 。

Git与SVM的对比

1.SVM是集中式版本的控制系统,把版本库集中放在中央数据库中。开发人员都是把代码从中央数据库下载下来在经行开发,之后再把开发完成后的代码在上传到中央数据库中
SVM的缺点:

  • 服务器单点故障
  • 容错率差

2.Git是分布式的控制系统,分为两种库:远程仓库,本地仓库

  • 本地仓库:位于开发者自己的电脑
  • 远程仓库:是在远程服务器上的Git仓库

一、安装git

非常简单,就一条命令,如下:

[root@git ~]# yum -y install git

二、git库的创建及介绍

[root@git /]# mkdir /git
[root@git /]# cd git/
[root@git git]# git init             # 初始化为git库
Initialized empty Git reposi tory in /git/.git/
[root@git git]# ls -a                   #初始化成功后,会生成一个.git的隐藏目录
.  ..  .git
#生成的隐藏目录是用来跟踪管理版本库的,不建议随便修改其目录中的文件,
#如果改乱了,就把git库给破坏了。

在git版本库中,有三个重要的概念:工作区、暂存区、版本库。

  • 工作区:就是你的系统中可以看到的目录;
  • 暂存区:一般存放在.git目录下的index文件中,所以也会将暂存区叫做索引;
  • 版本库:工作区中的有一个.git隐藏目录,这个不算工作区,而是git的版本库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

上图中,左侧为工作区,右侧为版本库,在版本库中标记为“index”的区域就是暂存区,标记为“master”的是master分支代表的目录树。

当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

当执行 “git rm --cached ” 命令时,会直接从暂存区删除文件,工作区则不做出改变。

当执行 “git checkout .” 或者 “git checkout – ” 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

当执行 “git checkout HEAD .” 或者 “git checkout HEAD ” 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

三、git库的基本操作

[root@git git]# git config --global user.name "zyz"
[root@git git]# git config --global user.email "zyz@zyz.com"
[root@git git]# echo "aaaa" > test.txt
[root@git git]# git add test.txt
[root@git git]# git commit -m "第一次提交"
#将暂存区的文件提交到版本库,并且一定要使用“-m”选项注明提交说明
[master (root-commit) 9ec7631] 第一次提交1 file changed, 1 insertion(+)create mode 100644 test.txt
[root@git git]# echo bbbb >> test.txt             # 修改测试文件
[root@git git]# git status            # 查看状态他会说我们这个文件发生更改需要添加
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@git git]# git add test.txt                  # 添加到暂存区
[root@git git]# git status                 # 再次查看状态他会说需要再次提交这个文件
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   test.txt
#
[root@git git]# git commit -m "第二次提交"           # 提交完毕
[master 8c3c7db] 第二次提交1 file changed, 1 insertion(+)
[root@git git]# git status                   # 再次查看状态
# On branch master
nothing to commit, working directory clean
[root@git git]# echo cccc >> test.txt             # 修改第一个测试文件
[root@git git]# echo "第二个测试文件" > test2.txt         # 新建几个测试文件
[root@git git]# echo "第三个测试文件" > test3.txt
[root@git git]# git add test.txt test2.txt test3.txt            # 添加到暂存区
[root@git git]# git status            # 查看状态
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   test.txt                 # 修改
#   new file:   test2.txt                 # 新文件
#   new file:   test3.txt                 # 新文件
#
#上面是提示git被修改,并且添加了两个新的文件
[root@git git]# git commit -m "提交多个版本"                # 将暂存区的多个版本进行提交
[master 92e5155] 提交多个版本3 files changed, 3 insertions(+)create mode 100644 test2.txtcreate mode 100644 test3.txt
[root@git git]# git log --pretty=oneline          # #查看提交记录,一行对应一次提交记录
92e5155ccbb59913cd717a539a11529b786a564b 提交多个版本
8c3c7dbc6eb90d64899df1d23c0546fe1ffbe064 第二次提交
9ec7631c3c93990f71db83ae04e8b387aa1213d6 第一次提交
#至此,git库下的所有文件都被提交了,那么,我现在将本地的所有文件都删除,查看下git的状态是什么
[root@git git]# rm test*              #删除当前目录下所有的测试文件
[root@git git]# git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    test.txt                  # 删除
#   deleted:    test2.txt
#   deleted:    test3.txt
#上述提示了删除了三个文件,下面说的是修改了但是尚未提交
no changes added to commit (use "git add" and/or "git commit -a")
#那么,我现在若想恢复删除的文件呢?只需进行以下操作:
[root@git git]# git reflog --pretty=oneline               # 查看 提交记录
92e5155 HEAD@{0}: commit: 提交多个版本
8c3c7db HEAD@{1}: commit: 第二次提交
9ec7631 HEAD@{2}: commit (initial): 第一次提交
[root@git git]# ls                    # 确定没有任何测试文件
[root@git git]# git reset --hard 92e5155              # #版本回滚到指定提交的位置
HEAD is now at 92e5155 提交多个版本
[root@git git]# ls                      #再次查看,被删除的文件又回来了
test2.txt  test3.txt  test.txt
#那么,现在我想要恢复到第一次提交的时候呢?
[root@git git]# git reflog --pretty=oneline             # 同样需要查看提交日志
92e5155 HEAD@{0}: commit: 提交多个版本
8c3c7db HEAD@{1}: commit: 第二次提交
9ec7631 HEAD@{2}: commit (initial): 第一次提交
[root@git git]# git reset --hard HEAD@{2}         #对,在版本回滚时,不但可以指定第一列的ID号,也可以指定其HEAD字段
HEAD is now at 9ec7631 第一次提交
[root@git git]# ls        #再次查看当前工作目录下,恢复到了最初只有一个测试文件的状态
test.txt
[root@git git]# git reset --hard 92e5155                  #再次恢复到测试文件最多的时候
HEAD is now at 92e5155 提交多个版本
[root@git git]# ls
test2.txt  test3.txt  test.txt

四、撤销修改的操作

关于撤销修改,其实在上面已经展示出来如何从版本库中撤销修改了,那么下面将介绍如何从暂存区、工作台进行撤销修改
1、从工作台撤销修改

[root@git git]# cat test.txt             #确定当前文件内容
aaaa
bbbb
cccc
[root@git git]# echo dddd >> test.txt               #修改文件内容
[root@git git]# cat test.txt                    # #查看修改后的文件
aaaa
bbbb
cccc
dddd
[root@git git]# git checkout -- test.txt                #对工作台执行撤销操作
[root@git git]# cat test.txt                #确认新添加的内容被撤销
aaaa
bbbb
cccc

2、从暂存区撤销修改

[root@git git]# echo "123123" > aaa.txt                    # 创建一个新的测试文件
[root@git git]# git add aaa.txt              # 添加到暂存区
[root@git git]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   aaa.txt                  # 新文件
#
[root@git git]# git reset HEAD aaa.txt              # 撤销
[root@git git]# git status        #再次查看git的状态,提示提交为空,还提示使用git add建立提交
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   aaa.txt                 # 这里已经显示不是新文件
nothing added to commit but untracked files present (use "git add" to track)
#提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

3、从版本库中删除指定版本

[root@git git]# rm test.txt             #删除本地文件
root@git git]# git rm test.txt                #使用git执行rm命令
rm 'test.txt'
[root@git git]# git commit -m "删除文件"               #提交到版本库
[master f9bccab] 删除文件1 file changed, 3 deletions(-)delete mode 100644 test.txt

至此,都只是git版本库的基本操作,那么?我们如何将我们的git
库关联到github上呢?下面是两种情况下的关联方法。

五、将本地git库关联到github

情况一:本地有git库,github库是空的:
**1、首先需要先创建一个空的github库。
**
自行注册github账号并登陆,比较简单,这里就不写了。

在主机上生成秘钥对,并上传至github上:

[root@git git]# ssh-keygen -t rsa -C "848369866@qq.com"            #执行此命令后,一路按回车即可,“-C”后面是自己的邮箱地址
[root@git git]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEKmiwENbVxLSn2tRDUAFVh3muJFXJYqjuOPU+RfCIb42Bv2w52zzasY4rEPgPc865b+NTLk4Xkw4SEEl7qzObf/kDyqtM0d7PjCR+E4/u9MKHo+evgtNJwrNXeoycKc1EHKYWRqAbJ79QulwqDPU7Z2DC9I0ML1Kf6ipRe4biN58imyt/YLxVj9RnmWS6r+umkSM4ukn4DKHGfI1DJxIWEk2jwgQKBmdBB06YZvHBn6VOKaIlCSSHCAWZ51D6EDT8LdZ4jwZmbqN0ypBFG7E6KM5oYPE1hIRnbcy+HB7jYCptNmZhv2eamHH+yL+oMe2Wn/wxwc1gTRfl9Epz1LD7 848369866@qq.com

在github上操作如下,以便添加公钥:

输入github账号的密码进行验证:

确定添加成功:

2、回到新创建的库:

[root@git git]# ls -a
.  ..  aaa.txt  .git  test2.txt  test3.txt
[root@git git]# git remote add origin git@github.com:zhangyz-nb/test01.git          #执行提示的第一条命令
[root@git git]# git push -u origin master              #进行提交,由于是第一次上传,所以需要使用“-u”选项
#如果执行上述命令后,提示需要输入“yes”,输入即可
Counting objects: 13, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (13/13), 1021 bytes | 0 bytes/s, done.
Total 13 (delta 0), reused 0 (delta 0)
To git@github.com:zhangyz-nb/test01.git* [new branch]      master -> master
Branch master set up to track remote branch master from origin.#提示已经提交成功了。

至此,F5刷新我们github上刚刚创建的库的页面,就可以看到我们工作台目录下的那些文件了,如下:

六、从github下载到本地git版本库

上述已经演示了如何将本地的git版本库关联到远端的github的空库。

那么这里将展示如何将github已存在的库(库中有内容)下载到本地。

由于在第五步操作时,已经设置好了邮箱及ssh秘钥等操作,所以这里就可以省略这两部操作了,如果没有配置邮箱及ssh秘钥,可参考第五个段落进行配置。

这里就将第五步创建的github库下载到本地。

找到github创建的库,如下:

[root@git git]# git clone git@github.com:zhangyz-nb/test01.git
Cloning into 'test01'...
#执行命令“git clone”,后面的路径就是我们复制的github上的ssh路径
Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 13 (delta 0), reused 13 (delta 0), pack-reused 0
Receiving objects: 100% (13/13), done.
[root@git git]# cd test01/
[root@git test01]# ls
test2.txt  test3.txt
[root@git test01]# echo "clone success..." > succed          # 创建一个新的测试文件
[root@git test01]# ls
succed  test2.txt  test3.txt
[root@git test01]# git add succed        # 添加到暂存区
[root@git test01]# git commit -m "clone succes"         # 提交
[master 4b662bd] clone succes1 file changed, 1 insertion(+)create mode 100644 succed
[root@git test01]# git push origin master              # 将本地文件推送到github
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 306 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:zhangyz-nb/test01.gitf9bccab..4b662bd  master -> master
[root@git test01]# git remote              # 查看远端版本库信息
origin

回到github上,刷新库的页面,即可看到新提交的文件,如下:

更多Android技术学习:核心进阶知识学习

七、文末

全文讲解了Git的背景以及与SVM的对比优缺点;Git的安装与基本的使用。

最先进的Git分布式仓库系统——是如何提升编程效率的?相关推荐

  1. Git分布式版本工具的部署与使用

    一.Git概述 1. Git诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linu ...

  2. 运维之道 | Git分布式版本控制系统安装、配置

    Git分布式版本控制系统安装.配置 一.Git简介 Git是目前世界上最先进的分布式版本控制系统,在处理各种项目时都十分高效,而且非常的高大上. SVN是集中式版本控制系统,版本库是集中放在中央服务器 ...

  3. Git 分布式版本控制系统使用教程

    Git 专栏索引: Git 分布式版本控制系统使用教程 在 IDEA 中使用 Git 图文教程 Git 分布式版本操作系统使用教程 1. 版本控制系统简介 1.1 集中式版本控制系统 1.2 分布式版 ...

  4. Git 分布式版本控制系统

    目录 文章目录 目录 Git 分布式版本控制系统 Git 的基本概念 Git 的仓库结构 Git 的核心对象 Git 的数据结构 Git Flow 参考文档 Git 分布式版本控制系统 Git 是一个 ...

  5. g4e基础篇#2 Git分布式版本控制系统的优势

    1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 初始化Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git历史记录 起步 ...

  6. git分布式版本管理系统和github平台

    一.git分布式版本管理系统(以下是我自己的见解,可能不对,希望指出) 1.git是一个概念,github是一个基于git概念所创造的平台 它可以让一个项目文档,在不同地点不同时间让不同的人同时开发和 ...

  7. Git分布式版本控制遇到的问题如何把本地的项目上传到码市上

    一.Git分布式版本控制遇到的问题 错误: $ git push -u origin master fatal: unable to access 'https://git.coding.net/Su ...

  8. 运维之道 | Git分布式版本控制常用命令解析

    Git分布式版本控制常用命令解析 一.创建版本库 版本库(repository)也叫仓库,可以看做一个目录,这个目录里的所以文件都由Git进行管理,每个文件的修改.删除,Git都能跟踪 1.选择一个合 ...

  9. Git分布式版本控制工具

    Git分布式版本控制工具 文章目录 Git分布式版本控制工具 1 目标 2 概述 2.1 开发中的实际场景 2.2 版本控制器的方式 2.3 SVN 2.4 Git 2.5 Git工作流程图 3 Gi ...

最新文章

  1. VScode 乱装插件环境破坏踩坑自我反思总结
  2. 【视频版】有一种机房叫处女座的机房。。。
  3. leetcode 435. Non-overlapping Intervals | 435. 无重叠区间(单调栈)
  4. 文献记录(part94)--Clustering and outlier detection using isoperimetric number of trees
  5. 前端学习(1292):文件写入操作
  6. 四步奠定SDN部署基石
  7. 微服务SpringCloud系列
  8. 项目管理-软件开发模式对比(瀑布、迭代、螺旋、敏捷)
  9. Veeam 数据备份解决方案修复多个严重漏洞
  10. SQlite数据库的C编程接口(一) 简介 ——《Using SQlite》读书笔记
  11. 关于苹果审核团队内部消息以及一些过审小方法
  12. 细说汽车电子通信总线之CAN-FD 总线协议详解
  13. 利用DroidCamX将手机摄像头打造成电脑高清摄像头
  14. 域渗透——获取用户明文密码
  15. 杀毒软件开发,原理、设计、编程实战
  16. 鸿蒙1004鸿蒙,第1004章 【两成】
  17. 小米手机显示流量数据连接到服务器,小米手机流量总不稳定,这三项设置可能你会用到...
  18. Docker(2) 安全加密,habor仓库和Docker网络
  19. JSP页面如何通过Form传递参数到另一个JSP页面
  20. Android国外学习资源汇总

热门文章

  1. tiptop 编译运行_TIPTOP MPS(amsp500)运行流程
  2. 利用微信公众号实现商品的展示和支付(2)
  3. Unity - Unable to merge android manifests.
  4. 记录Ok6410 sd 启动uboot
  5. 查找微信公众号服务器,墨涩网 - 免插件实现微信公众号搜索连接wordpress网站文章——墨涩网...
  6. windows word2010 PPT
  7. 计算矩阵行列式时奇排列与偶排列的判定
  8. 没有人能扼杀掉你的梦想
  9. 局域网找不到其它电脑
  10. layui修改表格行高