git
2018-05-19 本文已影响3人
Miracle001
存储机制

组件比较

区域划分

介绍
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

图2:文件修改--hash码变化

图3:区域

图4:merge

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:自己合并和推送

图2:专门有人负责合并

图3:变基

图4:引用

5:中央仓库dictator

6:中央仓库integration manager

中央仓库 如上图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

图2

图3

图4
