git

作者: Miracle001 | 来源:发表于2018-05-19 09:08 被阅读3次
    存储机制
    image.png
    组件比较
    image.png
    区域划分
    image.png
    介绍
    directory content management system--DCMS
    tree history storage system
    stupid content tracker
    a toolkit
    the plumbing  低级命令
    the porcelain  高级命令--经常使用--功能强大
    not subversion  不是SVN
    not an evolution
    
    
    如何工作
    git directory
    .git  GET_DIR
    config file
    hooks  侦听器,关键事件发生,把此hooks激活
    index  工作目录--仓库对应关系
    object database
    references  引用  名字--章节关系
    
    对象存储
    数据和元数据在一起  
    loose format  packed format
    不同版本--增量形式保存
    
    4 types of git objects  下图1
    tree  保存目录的层级结构
    blob  保存目录下的文件内容
    commit  保存生成的快照  保存:提交时间/作者/状态+大小/类型+...
    tag  保存快照的符号引用--名字(否则,都是hash码,引用不便)
    
    node1
    yum -y install git
    git --version
    mkdir ops; cd ops/  创建工作目录(接下来的操作都在工作目录进行)
    git init  初始化
    ll -a; ls .git/
    vim chapter1.txt  创建新文件
      Welcome to Linux!
    git status  必须运行在工作目录ops/
    tree .git/
    git add chapter1.txt
    tree .git/  显示objects增加2个文件:hash码格式文件(取前两个字符)+index(第一次add添加)
    vim chapter1.txt  修改
      Welcome to Linux!
      How are you?
    git status  显示文件被修改是否提交
    git add chapter1.txt  
    tree .git/  显示objects增加了第二个hash码文件
    文件修改--hash码变化  如下图2
    
    区域划分  如下图3
    ops/工作目录下
    git config -l  git的配置文件(提交--保存名字+邮箱地址)
    git config --global user.name csn  设置name
    git config --global user.email csn@.fgq.com  设置邮箱
    git config -l  查看配置
    man git-config
    man git-commit
      -F <file>
      -m <msg>  文件修改的原因
    git commit -m "Version 0.0.1"
    man git-log
    git log  显示提交的日志信息
    ls .git/refs/heads/  master--分支名称
    cat .git/HEAD  指向 refs/heads/master
    man git-tag
      -a  创建不签名的标签
      -s  创建gpg签名的标签
    git tag v0.1(标签) 593cbf5599abca16ad70ba971c70dc9f43b3a0b6(commit hash码)
    git tag -l  
    ls .git/refs/tags/  出现标签名
    tree .git/objects/  其中一个是标签的hash码
    
    
    剪出--创建/合并分支
    hotfix  修复bug--可能合并到主干or不同道路走下去
    git checkout  剪出--切换分支
    把expetiment合并到mater上,experiment就终止了  如下图4
    即:把分支合并到主干上
    merge:分支修改某行,主干删除该行,此时,需要人工介入
    例:
    ops/工作目录下
    mkdir chapters 
    mkdir tests
    vim chapters/new_chapter1.txt
      new_chapter1 content
    git add .  包含当前目录下的所有文件
      子目录有文件则一起add--chapters/
      子目录无文件则不会创建objects--tests
    git status  显示chapters/new_chapter1.txt,未显示tests/
    git commit -t v0.0.2 -m 'version 0.0.2'  
      -t  直接设定tags
    git checkout -b story2  剪出新分支,并切换至新分支
    ls .git/refs/heads/  story2分支
    git branch  显示分支,星号*开头为当前分支
    git checkout master  切换至master分支
    git branch
    git checkout story2
    vim tests/test.txt
      test file
    git status; git add .
    git status; git commit
    git commit -m 'version v0.0.3-story2'; git log; ls  显示3个提交
    git checkout master; git log ; ls  显示2个提交,没有tests目录
      (切换至不同分支,虽然在ops/相同工作目录下,但目录下内容不会相同)
    vim chapter2.txt
      chapter2
    git add .
    git commit -m 'Version 0.0.3'
    git log
    git branch
    合并--把其他分支合并到当前分支上
    git merge story2 -m 'Version 0.0.5'
    git log  story2的版本信息出现
    git branch; git checkuot story2  还能显示story2分支,仍可切换了
    
    
    图1:4 types of git object
    image.png
    图2:文件修改--hash码变化
    image.png
    图3:区域
    image.png
    图4:merge
    image.png
    remotes  远程分支
    从0开始--初始化:git init
    接收别人:git clone
    https://github.com/yeehot/tomcat8-session-msm --> 点击"Clone or Download" --> 复制网址
    根目录下,不在ops/下
    git clone https://github.com/yeehot/tomcat8-session-msm.git
    
    push推送
    快速合并  取的内容包含了自己的代码  安全覆盖
    git fetch 拖到本地不合并,自己手动合并
    git pull  拖到本地,直接合并
    
    合并1--自己合并推送  如下图1
    合并2--远程(专门有人负责合并)  如下图2
    rebasing  变基  如下图3
    引用  如下图4
    
    
    
    ops/工作目录下
    定义临时文件不添加到仓库
    vim .gitignore  
      myignore.txt
      也可使用统配符--匹配一批--具体参考文档
    vim myignore.txt
      Do not add repo!
    git add .
    git status  显示.gitignore可以提交为object,但是没有显示myignore.txt(设置生效)
    
    
    图1:自己合并和推送
    image.png
    图2:专门有人负责合并
    image.png
    图3:变基
    image.png
    图4:引用
    image.png
    5:中央仓库dictator
    image.png
    6:中央仓库integration manager
    image.png
    中央仓库  如上图5和6
    
    
    node1  192.168.1.8
    node2  192.168.1.5
    vim /etc/hosts
    192.168.1.5  node2.fgq.com
    192.168.1.8  node1.fgq.com
    
    node1
    yum info git-daemon
    yum -y install git-daemon
    rpm -ql git-daemon
      /usr/lib/systemd/system/git.socket  socket服务托管给systemd
      /var/lib/git  工作目录
    systemctl start git.socket;  ss -ntlp  9418端口
    cp -r ops/.git /var/lib/git/ops.git  
      .git目录复制到git协议的根目录下,命名为"项目名.git"(非隐藏目录)
    ll /var/lib/git/ops.git
    
    node2
    yum -y install git
    git help clone
    git clone git://192.168.1.8/ops.git
    ls -a ops/  自动剪出且.git/目录还在
    cd ops/
    git branch
    cat .git/refs/remotes/origin/HEAD  记录远程分支信息
    git remote
    两个分支:master本地分支  origin远程分支
    git config -l
    vim chapter3.txt
      chapter3 content
    git config --global user.name frr
    git config --global user.email frr@fgq.com
    git log
    git add .
    git commit -t v0.0.6 -m 'Version 0.0.6'
    git log
    
    git config -l
    "remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*"  映射关系
    cat .git/refs/remotes/origin/HEAD  记录远程分支信息
    ls .git/refs/heads/
    man git-push
    git help push
    git remote -v  
    
    git config --global user.name 'fgq'
    git config --global user.email 'fgq_qianggedu@163.com'
    git config -l
    git push origin master
      请输入账号和密码
      Username for 'https://gitee.com': fgq_qianggedu
      Password for 'https://fgq@gitee.com':
    即可push完成
    
    
      git pull:git fetch, git merge
      git push
    ssh劣势--需要知道对应主机的密码
    
    通过http/https协议  具体参考文档
      安装httpd
      提供认证功能--basic认证--账号和密码
      为httpd提供虚拟主机--支持网上传输文件--条件限制:传输至哪个目录中
      man git-http-backend  解释安装完httpd后,具体如何配置成可以网上传输文件的服务
      简单在公司内部使用,这样可以--比较麻烦
      更佳的方式--github
    
    
    github
    https://github.com/
    账号和密码登陆
    https://github.com/yeehot/tomcat8-session-msm 别人示例--会用即可
    --> 点击"Clone or Download" 
    --> 复制网址--两种方式(Use HTTPS/SSH--有标识符)
    方式1:Use HTTPS
    git clone https://github.com/yeehot/tomcat8-session-msm.git
    cd /tomcat8-session-msm
    假设已经做了一些修改--vim file--开始推送
    git push origin master  把master(本地分支)推送为origin(远程分支)
      需要输入账号和密码--认证通过--就可以把文件推送上去了
      Username for 'https://github.com':...
    方式2:Use SSH
    git@github.com:yeehot/tomcat8-session-msm.git
    ssh-keygen -t rsa -P ''  生成一组密钥
    把密钥id_rsa.pub内容复制到远程服务器上如下图1和2和3
    所有内容都在命令行下进行--不方便
    更佳方案--gitlab
    
    node1
    gitlab
    下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
    rz  上传gitlab-ce-10.7.3-ce.0.el7.x86_64.rpm
    rpm -ivh gitlab-ce-10.7.3-ce.0.el7.x86_64.rpm
    gitlab-ctl reconfigure
    gitlab-ctl status
    ss -ntl  80/8080端口
    浏览器:192.168.1.8
    第一次登陆账号root,密码:5iveL!fe
    
    
    
    图1
    image.png
    图2
    image.png
    图3
    image.png
    图4
    image.png

    相关文章

      网友评论

        本文标题:git

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