git理解

作者: jameiShi | 来源:发表于2018-04-23 18:25 被阅读5次

    • 内部原理
    • 实例
    • git命令

    内部原理

    当git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎所有 Git 存储和操作的对象

    git 目录.png
    description 文件仅供 GitWeb 程序使用,我们无需关心;
    config 文件包含项目特有的配置选项;
    info 目录包含一个全局性排除(global exclude)文件,用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns);
    hooks 目录包含客户端或服务端的钩子脚本(hook scripts),

    核心组成部分HEAD 文件、index 文件、objects 目录、refs 目录。
    objects 目录存储所有数据内容;
    refs 目录存储指向数据(分支)的提交对象的指针;
    HEAD 文件指示目前被检出的分支;
    index 文件保存暂存区信息。

    git 图.png
    • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
    • 当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
    • 当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。
    • 当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

    实例

    需求一:我们需要在本地创建一个代码仓库,然后还需要一个远程的代码仓库,然后把两者链接起来,给代码打上一个 tag, 然后删掉

    注意:这里 git 的安装配置就省略了
    方案一:(从远程仓库直接克隆岛本地然后打 tag)

    //1.在本地通过终端打开一个目录:
    cd /Users/shijianmei/Documents/github/gittest
    
    //2.在 github 上创建一个远程仓库,并 clone 到本地
    git clone git@github.com:shijianmei/gittest.git
    
    //3.在本地添加两个文件并提交到服务器端
    git touch Person.h Person.m
    git add .
    git commit -m '添加了 person 类'
    git push 
    
    //4.添加版本号并推送到远程仓库
    git tag '0.0.1'
    git push --tags
    
    //5.删除版本号并同步到远程仓库
    git tag --delete 0.0.1
    git push origin :0.0.1
    

    方案二:(本地初始化一个代码仓库,和远程仓库进行链接,再打 tag)

    //1.在本地通过终端打开一个目录:
    cd /Users/shijianmei/Documents/github/gittest
    
    //2.在 github 上创建一个远程仓库,并在本地设置
    https://github.com/shijianmei/gittest.git(可以通过 github 或者其它)
    
    //3.本地git 库初始化及关联远程仓库并
    git init 
    //4设置关联到已创建好的远程仓库地址
    git remote add origin  https://github.com/shijianmei/gittest.git
    
    //5.拉取远程仓库的文件到本地
    git pull origin master
    
    //6.在本地添加两个文件并提交到服务器端
    git touch Person.h Person.m
    git add .
    git commit -m '添加了 person 类'
    
    //7.推送到远程仓库(这里需要添加上具体分支)
    git push origin master
    
    //8.添加版本号并推送到远程仓库
    git tag '0.0.1'
    git push --tags
    
    //9.删除版本号并同步到远程仓库
    git tag --delete 0.0.1
    git push origin :0.0.1
    

    注意:在方案二遇到问题:refusing to merge unrelated histories

    git pull --rebase origin master 
    git push -u origin master即可完成代码上传到github
    

    git 命令简化

    git 添加别名的方式,打开~/.gitconfig文件在其末尾添加:
    在命令行输入以下命令:
    1、进到根目录
    cd ~/
    2、打开.gitconfig,
    vi ~/.gitconfig

      a = add
      b = branch
      c = commit
      d = diff
      l = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset | %C(bold)%an' --abbrev-commit --date=relative
      r = reset
      aa = add .
      ba = branch -a
      ca = commit -a
      cc = commit -a -m
      cl = clone
      cm = commit -m
      co = checkout
      cp = cherry-pick
      nb = checkout -b
      pl = pull
      ps = push origin master
      st = status
    

    git st 和 git status 等同效果
    3、修改完后保存退出就可以了

    参考:
    https://git-scm.com/book/zh/v1
    https://github.com/git/git
    http://www.runoob.com/git/git-tutorial.html

    相关文章

      网友评论

          本文标题:git理解

          本文链接:https://www.haomeiwen.com/subject/siaqlftx.html