Linux科技

git

2018-05-19  本文已影响3人  Miracle001
存储机制
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
上一篇 下一篇

猜你喜欢

热点阅读