zoukankan      html  css  js  c++  java
  • Git-分布式版本控制-知识结构和使用

    1.基本概念

    01.工作流程
       活跃贡献者的数量:小型团队 管理团队
       提交权限 提交准则
       工作流程、派生/管理组织  
       了解如何维护项目 审计
    02.技术概念
      repository   branch 
      track  stage
      init  add  commit  push  pull  clone 
    
      origin  是当你运行 git clone 时默认的远程仓库名字
      master  是当你运行 git init 时默认的起始分支名字
        远程仓库 origin 通信时 master 分支的状态
    03.文件状态
     以README为例	
    	文件状态: 已跟踪 或 未跟踪 untracked  和 忽略文件 .gitignore
    		   已跟踪: 
    		      未修改 unmodified,已修改 modified或已放入暂存区  staged
    			  	git reset HEAD README.md  # 取消暂存
    			    git checkout -- README.md # 撤消之前所做的修改--慎重用
    		   .gitignore 的文件,列出要忽略的文件的模式
    		    git rm --cached README.md # 从已跟踪文件清单中移除(确切地说,是从暂存区域移除
    		    
    			未合并(unmerged)状态的文件
    			重命名: git mv
    

    2.Git内部原理

    01.Git 的数据结构
        四个数据对象,三个树对象,三个提交对象和一个标签对象
    	引用类型  HEAD引用 标签引用 远程引用(remote reference)
        对象类型(数据对象、树对象 和 提交对象 ),还有第四种标签对象(tag object)
    	Git 环境变量
        		
    02.Git 仓库中有五个对象:
       Git 的核心部分是一个简单的键值对数据库(key-value data store)
        三个 blob 对象(保存着文件快照)、
        一个 树   对象(记录着目录结构和 blob 对象索引)
        一个 提交 对象(包含着指向前述树对象的指针和所有提交信息)
    	
    	HEAD 上一次提交的快照,下一次提交的父结点 . HEAD 指向当前所在的分支
    	Index 预期的下一次提交的快照
    	工作目录   .git 文件夹中所在的目录
    	.git/objects 目录(即 对象数据库)
    	Git 分支的本质:一个指向某一系列提交之首的指针或引用
    03.Git 服务器 和Git 客户端
       Git服务器:git daemon   、  systemctl  status  git-daemon
      git协议: 四种不同的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议
       
    04. Git 的原始内部数据 文件系统
       .git/hooks 钩子都被存储在 Git 目录下的 hooks 子目录中 
                  客户端钩子分为:提交工作流钩子、电子邮件工作流钩子和其它钩子。
         .
    	 config 文件包含项目特有的配置选项
    	 info 目录包含一个全局性排除(global exclude)文件, 用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns
    	 refs 目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针
    	 objects 目录存储所有数据内
    	 HEAD 文件指向目前被检出的分支;index 文件保存暂存区信息
    

    3.Git命令

    01.帮助
         git  --help
    	 git help branch
    02..查看-检查
         git --version     #查看版本 
         git status        # 当前做的哪些更新尚未暂存? 有哪些更新已暂存并准备好下次提交?
         git diff          # 查看尚未暂存的文件更新了哪些部分
         git diff --staged # 比对已暂存文件与最后一次提交的文件差异  git diff --cached 
         git log           # 回顾提交历史 按时间先后顺序列出所有的提交,最近的更新排在最上面
         git config -l  | git config --list 
         git branch -a  | git branch --all 
         git remote -v
         git remote show origin	 
       分支 本地分支  远程分支 创建分支  切分支  合并分支    删除分支 
    03.整合不同分支
      变基和合并
      Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase
          提交历史是记录实际发生过什么
    	  提交历史是 项目过程中发生的事
        01.合分支最容易的方法是 merge 命令
           git checkout  分支切换
    	   git merge    合并分支
           遇到冲突时的分支合并
             git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件
           冲突解决方案仅保留了其中一个分支的修改,
             并且 <<<<<<< , ======= , 和 >>>>>>> 这些行被完全删除了
           对每个文件使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。
          git add
        02.通过合并操作来整合分叉的历史: rebase 
           命令将提交到某一分支上的所有修改都移至另一分支上
    	   管理版本库,还是帮忙验证、审核收到的补丁, git apply 命令要比 patch 
    	   patch  format-patch 生成并通过电子邮件发送过来的补丁
    	撤消合并
    	   还原提交 git revert
       远程和本地连接
        Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)
          001.git pull = 等同于先做git fetch,再做git merge
    
          002. git push 推送 
          simple方式 :  不带任何参数的 git push,默认只推送当前分支 
       matching方式 :推送所有有对应的远程分支的本地分支
          当前分支与多个主机存在追踪关系,则可以使用 -u 选项指定一个默认主机
       地做git pull合并差异,然后再推送到远程主机
       –force 选项,结果导致远程主机上更新的版本被覆盖
    
      04.搜索
      Git 提供了两个有用的工具来快速地从它的数据库中浏览代码和提交
       git grep 会查找你工作目录的文件
       git log 命令有许多强大的工具可以通过提交信息甚至是 diff 的内容来找到某个特定的提交
       bisect 命令  
    05.其他
        git tag 
           Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)
        git describe
        发布:  git archive
        git reflog 来查看引用日志 记录了最近几个月你的 HEAD 和分支引用所指向的历史
        Git 托管服务: gitLab  GitHub  gitee
    

    4.Git数据结构

    	 config 文件包含项目特有的配置选项
    	 info 目录包含一个全局性排除(global exclude)文件, 用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns
    	 refs 目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针
    	 objects 目录存储所有数据内
    	 HEAD 文件指向目前被检出的分支;index 文件保存暂存区信息
         ├── branches
         ├── config
         ├── HEAD
         ├── index
         ├── info
         │   └── exclude
         ├── objects
         │   ├── 00
         │   │   ├── ad0d06ea08f5bfc2716c31006889b19f402b0c
         │   │   └── *******************************fdb2c
         │   ├── info
         │   └── pack
         │       ├── pack-bc0ab38dfd8e51db7f0612a9cc02ceb731f5be97.idx
         │       └── pack-bc0ab38dfd8e51db7f0612a9cc02ceb731f5be97.pack
         │└── refs
         │    ├── heads
         │    │   ├── dev
         │    │   └── master
         │    ├── remotes
         │    │   └── origin
         │    │       ├── dev
         │    │       ├── HEAD
         │    │       └── master
         │    └── tags
         ├── ORIG_HEAD
         ├── packed-refs
         ├── logs
         │   ├── HEAD
         │   └── refs
         │       ├── heads
         │       │   ├── dev
         │       │   └── master
         │       └── remotes
         │           └── origin
         │               ├── dev
         │               ├── HEAD
         │               └── master	
         ├── hooks
         │   ├── applypatch-msg.sample
         │   ├── commit-msg.sample
         │   ├── post-update.sample
         │   ├── pre-applypatch.sample
         │   ├── pre-commit.sample
         │   ├── prepare-commit-msg.sample
         │   ├── pre-push.sample
         │   ├── pre-rebase.sample
         │   └── update.sample	
         ├── description
         ├── FETCH_HEAD  
         ├── COMMIT_EDITMSG		
    

    参考

    https://git-scm.com/book/zh/v2
  • 相关阅读:
    单模光纤与多模光纤的区别
    普通的单模光纤和单模光纤跳线是否可以达到万兆速度?
    原创:在局域网中,如何知道某个IP被占用 show arp
    如何知道局域网内哪些ip被占用----工具法Free IP Scanner
    如何知道局域网内哪些ip被占用
    科普知识普及
    电脑通电自动开机
    2.4G还是5G?带你选择最正确的路由器
    光纤收发器指示灯介绍
    100BASE-TX、100Base-FX等含义
  • 原文地址:https://www.cnblogs.com/ytwang/p/14953606.html
Copyright © 2011-2022 走看看