• Git的使用


    1. Git概述

    1.1 Git简介 

    Git是一款免费、开源的分布式版本控制系统,用于明捷高效处理任何或小或大的项目。Git是Linus为了帮助管理Linux内核开发而开发的一个开源版本控制软件。

    1.2 Git的优点

    • 更顺畅的工作流程,开发过程中,完全可以离线操作
    • 快速,Git分布式架构使得本地仓库包含所有的历史版本信息,可以在不同的版本之间快速切换
    • 弹性的本地分支,在svn下,建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令
    • 仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净
    • 内容按元数据方式存储,所有的版本信息都位于.git目录下
    • 完整性好,更易于协作开发
    • 用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库

    2. Git的工作原理

    2.1 基本概述

    在Git中的绝大多数操作都只需要访问本地文件和资源,不用连网,因为Git在本地磁盘上就保存着当前项目的历史更新,所以处理起来速度很快。

    如果想要看当前版本的文件和一个月前的版本之间有何差异,Git会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事。

    2.2 Git的状态

    对于任何一个文件,在Git内部都只有三种状态:已提交(committed),已修改(modified)和已暂存(storaged)

    • 已提交:表示该文件已经被安全的保存在本地数据库中了
    • 已修改:表示修改了某个文件,但是还没有提交保存
    • 已暂存:表示把已修改的文件放在下次提交时要保存的清单中

    2.3 Git文件流转的区域

    使用Git管理项目时,文件流转的区域:Git的工作目录、暂存区域、本地仓库、远程仓库

    每个项目都有一个Git目录(如果是 git clone 出来的话,就是其中 .git 的目录;如果是 git clone  --bare 的话,新建的目录本身就是Git目录)。它是Git用来保存元数据和对象数据库的地方。这个目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

    从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫工作目录。这些文件实际上都是从 Git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑

    所谓的暂存区域只不过是一个简单的文件,一般都放置Git目录中。有时会把这个文件叫做索引文件,但是标准叫法还是暂存区域。

    2.4 Git的基本工作流程

    1. 在工作目录中修改某些文件
    2. 对修改或的文件进行快照,然后保存到暂存区域
    3. 提交更新,将保持在暂存区域的文件快照转储到Git目录中

    可以从文件所处的位置来判断状态:

    • 如果是Git目录中保存着特定版本文件,就属于已提交状态
    • 如果做了修改并已放入暂存区域,就术语已暂存状态
    • 如果自上次取出后,做了修改但是还没有放到暂存区域,就是已修改状态

    3. Git的使用方法

    3.1 基本使用命令

    git  config   --global  user.name  "xxx"   // 配置用户名
    //上传本地 repository 到服务器上的时候,在 Github 上会显示这里配置的上传者信息
    git  config   --global  user.email  "xxx"  // 配置邮箱
    
    git  init  /path           //创建本地仓库(repository)
    //会在目录下创建一个 .git 目录,.git 目录里存储了所有的版本信息、标记等信息
    
    git  add                   //从本地仓库增删,结果将会保存到本机的缓存里面
    git  add  -A               //提交全部修改
    
    git  commit   -m  "注释"    //提交,把本机缓存中的内容提交到本机的 HEAD 里面
    
    git  status                //查看状态
    
    git log                    // 查看版本,以确定需要回到的时刻点
    git log --pretty=oneline   // 每行显示一条版本记录
    
    git reset --hard 6774dbf8d5116fa6b99875db461321b8eaad60c1 
    // 进行版本回退,后面的字符就是git log命令显示结果中的版本号
    git reflog  
    // 回到过去的版本号后,如果想要回到最新的版本的时候,就要用这里命令来找到最新的版本号
    
    git  config  --list       //查看配置列表
    
    git  rm  xxx              // 从本地仓库删除指定文件,将文件从暂存区中删除
    git  rm  -r  xxx          //从本地仓库删除指定文件夹
    
    git clone https://github.com/hgzerowzh/blog_website.git
    // 将github上的仓库克隆到本地
    git add readme.txt
    
    git  remote  add  origin  git@github.com:xxx/first.git
    // 把本地仓库和远程仓库关联起来,如果不执行这个命令,则每次 push 的时候都需要指定远程服务器的地址
    
    git  push  origin  master  //把本地的commit push到远程服务器
    // origin 也就是之前 git remote add origin 那个命令里面的 origin,origin 替代了服务器仓库地址:git  push  git@github.com:xxx/first.git   master
    // 如果显示没有权限,则要去修改 .git/config文件中的origin配置段:url = https://用户名:密码@github.com/用户名/仓库名.git
    
    git  pull  origin  master //从远程服务器pull新的改动
    
    git  push  origin  master
    //把本地的 commit  push 到远程仓库中
    //可以使用  .gitignore 文件忽略指定的内容
    
    # 使用ssh认证只需要把生成的公钥上传到github上即可
    // 生成公私钥:ssh-keygen -t rsa -C "注册邮箱"

    3.2 分支管理

    3.2.1 分支:生成副本,避免影响开发主线

    • 主分支(master):第一次向git仓库提交更新记录时自动产生的一个分支
    • 开发分支(develop):作为开发的分支,基于master分支创建
    • 功能分支(feature):作为开发具体功能的分支基于开发分支创建

    3.2.2 分支管理命令

    git brance                // 查看分支
    git branck 分支名称        // 创建分支
    git checkout 分支名称      // 切换分支
    git merge 被合并的分支     // 合并分支
    git branch -d 分支名称     // 删除分支,分支合并后才允许被删除,可以用-D大写强制删除
    # 在删除分支的时候,一定要先退出要删除的分支,然后才能删除

    3.2.3 冲突的产生

    比如没有拉取就进行提交操作,可能就会产生冲突

    解决方法:先pull一下,然后需要开发之间进行协商,进行代码的取舍,然后重新提交

    3.3 忽略文件

    某些文件我们不想让其提交到远程仓库,此时就可以使用“忽略文件”机制来实现需求。

    忽略文件需要新建一个 .gitignore的文件,该文件用于声明忽略文件或不忽略文件的规则,规则对当前目录及其子目录生效。

    常见规则的写法:

    /mtk/            // 过滤整个文件夹
    *.zip            // 过滤所有.zip文件
    /mtk/do.c        // 过滤某个具体文件
    !index.php       // 不过滤具体某个文件	

    4. 搭建Git服务器

    4.1 整体环境

    • 服务端:
          c7_node_03
          10.0.0.203
    • 客户端:
          c7_node_04
          10.0.0.204
    • 软件安装:
          服务端和客户端都安装git
          yum  install  git  -y

    4.2 服务端创建仓库

    useradd -m git
    passwd git
    // 输入git用户的密码
    su - git
    
    mkdir project.git
    cd project.git
    
    [git@c7_node_03 project.git]$ git init --bare
    Initialized empty Git repository in /home/git/project.git/
    // 如果是 git clone 出来的话,就是其中 .git 的目录
    // 如果是 git clone  --bare 的话,新建的目录本身就是Git目录
    

    4.3 客户端从仓库拉取和提交代码

    mkdir git
    cd git/
    
    git clone git@10.0.0.203:/home/git/project.git
    
    cd project/
    echo "NO.1" > 1.html
    
    git config --global user.name "hgzero"          // 设置用户名(仓库名)
    git config --global user.email "hgzero@qq.com"  // 设置邮件地址
    
    git add .               // 将当前目录加入暂缓区
    git commit -m "NO.1"    // 提交到本地仓库,会输出很多欢迎信息,用于协同操作提示作用
    
    git remote add orgin git@10.0.0.203:/home/git/project.git  
                            // 确认本地和远程的状态是否正常
    
    git push origin master  // 本地推送到远程服务器
    
    # 然后再更新一个版本
    vim 1.html              // 添加点内容,做点修改
    git add 1.html 
    git commit -m "NO.2"
    git push

    5. Windows下使用Git

    一些Git图形化工具:

    • GitHub for Desktop
    • Source tree
    • TortoiseGit

    Windows下安装Tortoisegit之前,需要安装msysgit,这样tortoisegit才能正常运转。

    更详细的Git教程:

  • 相关阅读:
    第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-2 session的基本原理与create命令的使用
    第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-1 zookeeper常用命令行操作
    3-3 zookeeper的作用体现
    3-2 zk客户端连接关闭服务端,查看znode
    Python(2.7.6) glob
    SonarQube(5.0.1) 环境的安装配置
    Maven(3.0.5) 环境的安装配置
    Linux 命令
    Linux
    Python(2.7.6) copy
  • 原文地址:https://www.cnblogs.com/hgzero/p/12890875.html
Copyright © 2020-2023  润新知