0-Git应用入门

本文详细介绍了Git的基本概念、安装步骤(Windows/Linux/macOS)、版本控制原理,涵盖了工作区、暂存区和版本库的关系,并重点讲解了Git的常用操作,如创建仓库、分支管理、远程协作等。适合Git初学者快速上手。
摘要由CSDN通过智能技术生成

https://git-scm.com

什么是 Git

什么是 Git?,我们不妨看看看看官方的定义(点击Git,访问Git主页):

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

这段描述的大意为:Git 是一个免费且开源的分布式版本控制系统,旨在快速高效地处理从小到超大型项目的所有事务。

所以,我们可以理解 Git 是一个版本控制系统。

版本控制系统

版本控制系统,也可称之为修订系统,是一种用户可以根据时间追溯项目文件(存放于版本库中)修订历史和属性的工具,它可以帮助团队成员协作开发。

不同于 SVN,Git 采用分布式版本库的方式,可以为每个用户提供专属于自己的项目历史副本、版本库的副本,不必服务器端软件支持。

Git 与 SVN 的区别

  1. 架构形式不同:Git 是分布式的,SVN 是集中式的;SVN 把资源集中存储在中心点的 SVN 资源库,每个用户从中心资源库拷贝工作区到本地;而 Git 将资源库同时建立在本地和服务端(如果存在服务端的话),即每个用户本地都有资源库。
  2. 存储方式不同:Git 把内容按元数据方式存储;SVN 按照文件存储,把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  3. 分支不同:在 SVN 中分支仅仅是版本库中的一个目录;但在 Git 中分支模型支持本地分支,而且分支的发布也非常灵活,用户可以使用分支进行内容切换,还可以在开发过程中将不同工作放置于相互隔离的沙箱中,帮助构建独立、灵活的分支工作流。所以Git 的分支模型被称为必杀技特性。
  4. 版本管理不同:Git 没有全局版本号,而 SVN 有全局本包号。
  5. 安全形式不同:Git 的内容存储使用 SHA-1 哈希算法,可以降低磁盘、网络故障时对版本库的破坏;所以 Git 的内容完整性优于 SVN。

安装 Git

访问Git - Downloads ,这里提供了 macOS、Windows、Linux/Unix 环境的安装包下载或安装方法。

Git 源码托管在 GitHub,用户可以通过下面的命令获取最新版本的 Git:

git clone https://github.com/git/git

Window 端安装 Git

Windows 端 Git 安装包形式如下图所示:
点击下载
下载完成后,双击 EXE 安装包,即可进行安装。

Linux/Uinx 端安装 Git

  • 从源码构建

    kernel.org 下载 Git 源码,然后从源码开始构建。

  • 在线安装

    # Debian/Ubuntu
    # For the latest stable version for your release of Debian/Ubuntu
    $ apt-get install git
    # For Ubuntu, this PPA provides the latest stable upstream Git version
    $ add-apt-repository ppa:git-core/ppa 
    $ apt update
    $ apt install git
    #Fedora
    $ yum install git (up to Fedora 21)
    $ dnf install git (Fedora 22 and later)
    # Gentoo
    $ emerge --ask --verbose dev-vcs/git
    # Arch Linux
    $ pacman -S git
    # openSUSE
    $ zypper install git
    # Mageia
    $ urpmi git
    # Nix/NixOS
    $ nix-env -i git
    # FreeBSD
    $ pkg install git
    # Solaris 9/10/11 (OpenCSW)
    $ pkgutil -i git
    # Solaris 11 Express
    $ pkg install developer/versioning/git
    # OpenBSD
    $ pkg_add git
    # Alpine
    $ apk add git
    # Red Hat Enterprise Linux, Oracle Linux, CentOS, Scientific Linux, et al.
    # RHEL and derivatives typically ship older versions of git. You can download a tarball (https://www.kernel.org/pub/software/scm/git/) and build from source, or use a 3rd-party repository such as the IUS Community Project (https://ius.io/) to obtain a more recent version of git.
    
    # Slitaz
    $ tazpkg get-install git
    

macOS 端安装 Git

macOS 端安装 Git 可以通过以下方式:

  • brew 安装

    通过 brew 安装首先需要在 Mac 上安装 Homebrew,然后执行以下命令安装:

    $ brew install git
    

    或者直接安装 git-gui 和 gitk:

    brew install git-gui
    
  • Xcode

    Xcode 集成了 Git。

  • 二进制安装包

    下载 Git 二进制安装包进行安装。

  • 从源码构建

    kernel.org 下载 Git 源码,然后从源码开始构建。

Git 基本概念和操作

基本概念

Git 技术中有三个重要的概念或术语,分别是工作区、暂存区和版本库。

  • 工作区:电脑或操作系统中可见的目录,例如 opnssl 项目代码放置在 /src/openssl 目录下,那么 /src/openssl 即可视为工作区。
  • 暂存区:英文称为 stage,一般存放在 .git 目录下的 index 文件中(.git/index) ,所以暂存区也叫索引(index)。
  • 版本库:工作区的隐藏目录 .git 为 Git 的版本库(包含在工作区中但不属于工作区)。

在这里插入图片描述

上图中 index 即为缓存区;master 为 master 分支所代表的目录树;HEAD 为指向 maser 分支的游标;object 为 Git 的对象库,存户 Git 的数据对象(blob)、树对象(tree)以及提交对象(commit)。

目录结构

在这里插入图片描述
在这里插入图片描述

文件类型作用
hooks文件夹Git 能在特定的重要动作发生时触发自定义脚本
info文件夹信息
logs文件夹日志
logs/refs/heads文件夹本地仓库分支操作
logs/refs/remotes/origin文件夹远程仓库分支操作
objects文件夹所有对象
refs文件夹引用间接引用 commit 的方式,commit 哈希的别名
ORIG_HEAD文件当前引用的远程仓库
HEAD文件当前引用的本地仓库
packed-refs文件Clone 仓库时的所有引用
COMMIT_EDITMSG文件本地最后一次提交的信息
index文件暂存区
config文件配置文件
FETCH_HEAD文件某个分支在服务器上的最新状态

基本操作

Git 的基本操作包括:创建或克隆仓库、配置仓库、提交与修改、分支管理、提交日志和操作远程仓库。

在这里插入图片描述

  • 创建仓库

    命令说明
    git init [project-name]创建一个本地仓库
    git clone [url]下载项目及其整个版本历史记录(克隆一份远程仓库)
  • 配置仓库

    命令说明
    git config配置所有本地存储库的用户信息
  • 提交与修改

    命令说明
    git add [file]为文件创建快照,为版本控制做准备(添加文件到仓库)
    git status列出要提交的所有新文件或修改后的文件(查看仓库当前状态,显示有变更的文件)
    git diff显示尚未转移的文件差异(比较暂存区和工作区文件的差异)
    git commit -m "[descriptive message]"在版本历史记录中永久记录文件快照(提交暂存区到本地仓库)
    git reset [file]取消转储文件,但保留其内容(回退版本)
    git rm [file]从工作目录中删除文件并分段删除(删除工作区文件)
    git mv [file-original] [file-renamed移动或重命名工作区文件,为提交作准备
  • 分支管理

    命令说明
    git branch [branch-name | -d branch-name]创建分支、列出所有分支、-d 删除指定分支
    git checkout [branch-name]切换指定分支并更新工作目录
    git merge [branch]合并分支
  • 提交日志

    命令说明
    git log列出当前分支的版本历史记录
    git blame [file]查看指定文件的历史修改记录
  • 操作远程仓库

    命令说明
    git remote远程仓库操作
    git fetch从远程获取代码库
    git pull下载远程代码并合并更改
    git push将所有本地分支机构提交上载并合并到远程仓库

相互关系

当你执行一条 Git 的操作命令时,Git 的工作区、暂存区、本地仓库以及远程仓库会发生什么变化呢?

  • 当在工作区修改或新增一个文件,并使用 git add 命令将文件添加到暂存区,此时暂存库中的目录树被更新,修改或新增的文件内容被写入 objects 中的一个新的对象中,而该对象的 ID 会被记录到暂存区的文件索引中。
  • 在执行 git commit 时,暂存区的目录树会被写入到版本库(对象库)中,master 分支会做相应的更新,此时 master 指向的目录树就是提交时暂存区的目录树)。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached [file] 命令时,暂存区内的文件会被直接删除,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout -- [file] 命令时,工作区中的文件将被暂存区的文件替换,如果此时工作区有未被提交的修改,也会被清除。
  • 当执行 git checkout HEAD . 或者 git checkout HEAD [file] 命令时,工作区和暂存区中的文件会被 HEAD 指向的 master 分支中的全部或部分文件替换,该命令不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

Github、Gitee、Gitlab

Git 没有像 SVN 一样的中心服务器,如果你想通过 Git 分享你的代码或者与其他开发人员合作,你就需要将你的项目存储到一台其他开发人员能够访问的服务器上。GitHub、Gitee 和 GitLab 都是基于 Web 的 Git 远程仓库,提供远程托管代码服务。

GitHub 作为目前最火的开源项目托管平台,可以提供公共仓库和私钥仓库服务,但使用私有仓库需要付费,国内访问速度较慢。

Gitee 是开源中国推出的基于 Git 的代码托管服务,中文名为码云,它提供免费的 Git 仓库,还集成了代码质量检测、项目演示等功能,但也有部分收费功能,在国内使用 Gitee,可以获得高速的网络访问体验。

GitLab 可以构建自托管的 Git 项目仓库,可以获得私人的免费仓库服务,一般用于企业内部的代码托管。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值