Git 简介

当我们开发一个产品的时候。所有的代码并不是一气呵成全部一次性完成的,肯定是经过多个步骤,大项目甚至会多人好几个月甚至几年共同开发而成的,而这个过程中,我们的代码要形成很多个版本,好比(图片摘自网上)

这么多的版本,不好管理,同时也不好知道下一个版本相对于上一个版本到底修改了哪里。正是基于无论是文章还是软件的管理混乱这个初衷,软件版本管理工具横空出世。

软件版本管理工具主要可分为两类,一个是集中式版本管理,代表就是SVN

集中式软件版本管理工具具有一台中心服务器,软件的最终版本存在与中心服务器上,叫做 SVN Repository,即SVN仓库,所有的开发人员从服务器拉取代码,修改代码,提交代码,中央服务器集中管理,这种管理方式比较简单,使用起来不难容意上手,但是这样的管理方式有一个致命的问题,就是用户本地没有仓库的历史信息,所有版本信息全部保存在中央服务器,意味着只要中央服务器宕机了,则所有的资料都随之消失不见,虽然现在服务器的可用性增强很多,容灾备份也做得很好,但是运维维护代价也很高,使用的人已经不多了(不排除一小部分一起基于开发环境的简单而一直使用svn)

git是一种分布式的代码管理工具,每个授权用户都管理着所有的版本信息,即使任意的一个用户的信息丢失了,也可以从服务器恢复之前的版本信息,而不用担心有历史信息的丢失。

Git 安装

在git的官方网站,有git的安装详细说明,对于Windows直接可以下载一个exe执行文件,对于Linux,有各个版本的安装命令,安装非常简单,就是一句命令的事,之后在cmd窗口中执行git 命令后,如果出现相关的帮助信息则表示安装成功。

安装完成后就需要开始配置了,我们安装完后的初始界面是这样的,这里以Windows下的Git bash为例。新建一个文件夹,作为库内容存放的地方,然后在当前目录下启动Git bash,就可以开始配置了。
配置的目的主要是为了设置用户名称和邮件地址,因为每一次的git提交都会使用这些信息,它们将会被写入到提交报告中,而且不可以更改的。
配置用户名

git config --global user.name "Richard_li"

配置邮箱地址

git config --global user.email starxi***1945@hotmail.com

查看我们做的配置

git config --list

这里,git config是对git做相应的设置,后面跟的 --global 是对全局的设置,其实,除了global,还有local和system两个选项
git config --local:(缺省选项)只针对某一个仓库有效
git config --global:对当前用户的所有仓库有效
git config --sytem:对系统所有登录的用户有效
同样,查看配置也有对应的三种方式
git config --list --local (缺省)
git config --list --global
git config --list --system
其中,local的优先级是最高的,也就是说如果你同时设置了global参数和local参数且两者不相同,则git会优先使用local指令设置的参数。

这里的参数中 --global 表示全局设置,也就是说本台计算机所发出的所有提交信息在没有额外指定的情况下全部以这个设置为准。如果某一个项目不想以该设置进行提交的话,可以在项目内部执行git config 然后使用不加 --global 的配置语句进行配置。

git还有很多其他的配置,可以参照git 的官方帮助文档,或者直接命令git --help来查看文档。英文阅读有困难的朋友,可以看看官方提供的中文文档。

创建仓库

首先,什么是仓库呢,仓库其实就是一个由git管理的目录,这里目录里的所有的文件,所有的目录,都会由git记录下来,每一次修改,每一次删除,都会在git中有记录,这个仓库是可以有后悔药吃的,当你失误删除了文件,当你失误修改了不应该修改的文件,都是可以回退到以前的版本的。

那为了让git能管理当前我们新建的文件夹,首先我们得在这个文件夹下新建一个仓库。

新建仓库这个概念就好比,当你新建了一个文件夹的时候,就好比是新建了一个用于当作仓库的房子,但是即使我们知道这个房子要作为仓库用,但是没有相应的管理人员,记录系统,门禁等等设置的话,它就仅仅只是一个房子,所以新建仓库的概念就是在已有的这个空房子的基础上把各项用于仓库管理的设施搭建起来。git的话会自动新建一些文件来记录你的对当前文件夹的每一次改变。

新建一个仓库使用的命令是

$ git init
Initialized empty Git repository in D:/Workspace/git_test/.git/

对,只需要执行这么一条命令,git仓库就被搭建起来并且初始化了。那执行这个命令以后,git系统到底做了些什么呢,打开系统的显示“隐藏的目录”这个选项,可以看到,在当前目录下,有一个以点开头的名称为 .git 的文件夹被生成了,里面包含了一系列的文件:

这些目录中的文件会记录仓库中的文件以及目录的所有改动,以及实现回滚等一系列功能。这个时候我们使用

git status

来查看下当前仓库的状态,显示如下

显示了如下信息

  • 当前位于master 的分支上
  • 至今没有过提交
  • 没有需要提交的内容(创建或拷贝文件然后使用git add来追踪)

我们有时候还会遇到这么一种情况,就是我们要使用已有的代码文件来建立仓库,这样的话,我们可以直接进入到项目的文件夹,然后使用 git init 即可建立仓库

向仓库提交文件以及查看仓库状态

在解释上面的一些概念之前,首先我们添加一些文件到仓库里来看看,如图,我添加了五个文件到当前仓库

然后再到bash中查看git 的状态

之前查看git状态时候的三句内容均在,只是多了一个 Untracked files,顾名思义,未追踪的文件,意思就是说我们虽然把这些文件添加到了这个仓库中,但是这个仓库的管理系统还没有对这些“货物”进行登记造册,然后下面可以很清晰地看到我刚才添加的五个文件的文件名以红色标记显示出来。并且括号中温馨地提示了把我们将要提交的文件使用 git add + 文件名的方式进行包含。那么我们就照做:

git add test.c

这里我只添加了一个文件,来看看效果怎么样。

当我git add红色标记列出的五个文件当中的一个后,可以看到Untracked files中少了那个我已经添加了的文件,而多出来了一个项目 Changes to be committed 也就是将要被提交的改动,这里,用绿色把我刚才git add的文件列出来了,标明了是new file,这里,git将我的改动文件从工作区添加到了暂存区。

工作区与暂存区的概念:我们当前存放文件的目录称为工作区,顾名思义就是我们的工作目录,就好比我们运货到了码头,然后我们通过git add我们的那些文件就是通知仓管员,我们有哪些货物(文件)将要被造册,然后这些货物(文件)在正式被放入仓库之前就被放到了仓库门口的警备室(暂存区)等待报备。

下面我将所有的文件全部添加到暂存区,这时,除了将所有的文件名一个个地列出到git add后这种方法之外

git add LICENSE README cJSON.c cJSON.h

如果我们是想将当前所有untracked files都放置到暂存区的话,我们可以使用下面的命令

git add .

以一个点代替当前未放入暂存区的所有文件,这样,可以将untracked files 全部放入暂存区。

可以使用 git add -u 来更新git暂存区的内容

这样,所有的文件就都列入到了Changes to be committed,所有的货物放到了警备室,准备入库造册。一旦文件被加入到了暂存区,那就不能被更改了,即使再对文件进行了更改,放入了暂存区的文件也不会随着你的更改而变化了,就好比货物已经放入了警备室,你无法再次去修改货物了,但是如果此时,我突然发现文件有错误,或者需要再修改或添加内容才能放入仓库,那此时我们可以通知警备室,将货物拿回

$ git rm --cached test.c
rm 'test.c'

我突然发现test.c文件中有一个头文件没有包含,这条命令就是将货物从警备室撤回,然后系统提示 rm ‘test.c’ 文件已从警备室撤离。这时候我们就可以开始修改test.c文件,修改的内容会反应到文件本身,修改完以后重新git add到暂存区即可。

当我们把最终需要放入到仓库中的内容全部准备好,并放入到暂存区后,接下来就是真正将货物装进仓库的命令了,也就是提交文件到仓库的命令

我们直接用 git add . 的这种形式添加文件,难免有时候会误添加了一些我们不想添加的文件,这时候除了上面的 rm --cached 这种方式,其实也可以使用 git reset HEAD 这样近包含三个单词的这么个命令,可以撤回上一次add的所有内容。或者git reset HEAD filename.c 像这样在HEAD后面指定文件名,就是只撤销部分add的文件。

$ git commit test.c -m "first commit"
[master (root-commit) f7000c9] first commit1 file changed, 162 insertions(+)create mode 100644 test.c

执行commit命令即通知警卫室将暂存区的货物存入仓库,并登记造册。这里,我将test.c一个文件装入了仓库。后面跟带的 -m参数是备注,表明这一次提交的理由或者任何附加的信息,即需要登记在仓库日志上的内容。提交完test.c这个文件后,然后再用git status 查看状态时,发现被提交的那个文件已经从 Changes to be committed 列表中消失了。

接下来我将所有的文件全部commit进仓库,同样也可以使用之前便捷git add的方法,用点替代当前没有被commit的所有文件

这里除了用点来表示所有的文件以外,还可以使用 -a 参数来表示将当前未提交的文件全部提交

$ git commit . -m "fist commit"
[master ee44e6d] fist commit4 files changed, 1166 insertions(+)create mode 100644 LICENSEcreate mode 100644 READMEcreate mode 100644 cJSON.ccreate mode 100644 cJSON.h# 下面的命令有同样的效果
$ git commit -a -m "fist commit"

提示我4个文件更改了,一共有1166个插入。

这个插入的意思就是我们向文件中写入内容的字节书。

接下来我们再使用git status看看状态

$ git status
On branch master
nothing to commit, working tree clean

相比起最初,no commits yet这句话不见了,同时第三句话也由 nothing to commit, (create/copy files and use “git add” to track) 变成了 nothing to commit, working tree clean,没有需要提交的内容,工作树干净。意思就是当前工作区的所有内容全部正在被追踪,这是正常的状态。

当我们提交了多次后,如果想查看之前提交的记录的话,即查看货物的入库记录的话,可以使用

git log --stat

来查看提交记录

如图,共计有两次提交,提交人为 Richard_li,后面附带有我的邮箱,然后下面有提交的日期Date,之后是提交的时候写在 -m 参数后面引号里的内容,之后,当次提交的内容的文件更改,这里,是按照时间的倒序进行排列的,打出git log --stat命令后,最上面的信息是最近的消息,越往下是越以前的消息,可以看到第一次提交了test.c 一个文件,第二次提交更改了cJSON.c等共四个文件。

如果想在这里看到文件中所有的变动,即源代码是怎么更改的,是增加了还是删除了,可以使用

$ git log -p

查看所有的记录,如果你的文件是新添加的话,那这个文件中的所有内容都会被展示出来,内容太长,这里就不贴图片内容了。

最后放一张工作区,暂存区与仓库的示意图

[Git] 代码管理之 Git(一)Git 入门相关推荐

  1. Git 代码管理(代码提交和代码回退)

    Git 代码管理(代码提交和代码回退) Git的主要功能是代码管理,版本管理,分支管理. 在远程代码管理平台上,项目的代码被管理在一个远程代码仓库中,在本地,代码保存在一个本地代码仓库中.通过Git, ...

  2. GIT代码管理-SourceTree工具

    前言 本文主要介绍SourceTree工具在开发过程中的日常代码管理相关操作,此工具作为GIT代码管理的可视化工具使用. 准备工作 在使用SourceTree工具前需要先安装GIT,同时将代码由远程仓 ...

  3. git代码托管 · 操作举例: “git bash here ”(全程操作讲解) - git命令篇

    如何通过git进行代码托管?怎么操作?全程讲解说明,以git bash here为例. git使用案例:git代码托管: "git bash here "(全程操作讲解) 代码托管 ...

  4. Git代码管理常用命令操作

    一.Git提交代码过程 安装好Git,连接远程仓库地址,拉取代码到本地分支master,根据本地分支master创建分支b,修改完毕后,可以commit到本地分支b,之后可以提交到远程仓库地址,若没有 ...

  5. Git—代码管理、提交及冲突解决流程的思考

    1 代码管理   Git不多说,大家都知道这是一个分布式版本控制系统,对开发者而言,可以敏捷高效的进行代码管理及开发,也非常适合多人协作.话不多说,下面就来点干货. 1.1 创建新仓库   我们在工作 ...

  6. Git 代码管理常用命令

    1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加远程仓库:$ git ...

  7. Git代码管理流程(分支、fork、tag)

    我们使用Git做代码管理时,经常会出现这种情况:项目需要稳步迭代升级(暂且叫做标品)的同时,定制化的需求接憧而至.然而定制化内容(不属于正常迭代升级的范围),我们该如何处理?下述如我想到的几种方式: ...

  8. Git代码管理与发布流程

    分支定义与作用: 主干分支: origin/master:总是代表了生产环境准备就绪的状态的主分支 ,必须保证与生产环境在正常运行的代码一致.(每次需求上线验收完成后,由开发负责人从dev或Hotfi ...

  9. 代码管理工具系列介绍 Git的使用 和 Git ,Github,Gitlab,Gitee,Gitpod的区别

    Git Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等. 如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征. Git ...

最新文章

  1. 全国省份和城市数组2
  2. 图灵奖得主Yann LeCun万字访谈:DNN“史前文明”、炼金术及新的寒冬
  3. 即时通信是机遇也是挑战
  4. [iOS]MVVM-框架介绍
  5. 前端服务器OWA 访问显示异常最佳解决方案
  6. Leetcode题库796.旋转字符串(C++实现)
  7. Swift5关于根据一个frame得到最大X值和最大Y值
  8. SSAS的MDX中的计算成员和命名集
  9. 一步一步写算法(之排序二叉树线索化)
  10. java连接远程带有密码的mongodb数据库
  11. 解析Java的JNI编程中的对象引用与内存泄漏问题
  12. 2、python的print函数格式化输出
  13. Codeforces Round #226 (Div. 2)
  14. 使用phpQuery获取数组
  15. 固话月租费有望全免 包月套餐将逐步取代座机费
  16. Java后台代码word转pdf文件下载(类库参考)附jar包
  17. 关于EasyRecovery工具数据恢复的原理
  18. Windows下用MySQL8+压缩包解压安装与配置
  19. Android安全检测 - Janus签名漏洞
  20. idea tomcat 找不到程序包_IDEA 程序包不存在,找不到符号但是明明存在对应的jar包(问题分析及解决方案)...

热门文章

  1. 微信小程序自动化之miniprogram-automator快速上手
  2. java接口 传外参_JCommander:Java外部参数解析利器
  3. 反射型XSS靶场练习
  4. 寝室记-------《我的绿野仙踪》
  5. 静息态功能连接以及脑网络
  6. 解魔方机器人系列(三)软件控制及整机测试
  7. 越是看起来不起眼的小生意利润越大
  8. 怎么写安卓手机脚本_利用xposed虚拟真实手机环境,建立引流脚本矩阵
  9. 解决SiamRPN预训练模型的问题
  10. android 换主题换皮肤(apk包方式)