git
1、what
Git 是一个开源的分布式版本控制系统。同时还是内容管理系统,工作管理系统等。
git 分布式 —没有中心代码库,所有机器之间的地位同等(每台机器上都有相同的代码)
2、why
2.1 git
优点:
- 分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
- git的分支模型十分轻量,速度快。
- 可离线传输
缺点:
- 每个开发人员都拥有所有的代码,不利于核心代码的保密
2.2 svn
有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的成员通过客户端连接到这台服务器,进行文件上传和更新。
优点:
- 使用简单,比较符合我们的常规思维
- 同步代码比较简单,只要一步操作即可。
缺点:
- 丢失数据的风险:如果版本库的服务器磁盘发生故障等,你不能保证所有的数据已经 有人提取出来了
- 网络中断的情况下,协作就无法进行了,因为无法连接服务器进行上传和更新。
3、相关概念
1.工作区(Working Directory): 存放git版本仓库的目录就是工作区(放源代码的地方)
2.暂存区: Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,(会将代码添加到缓存区,没有问 题之后在提交到版本库)
3.版本库(Repository): 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
4.HEAD:指向你最近一次提交后的结果。(现在是哪个版本,头就会指向这个版本)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DKlnxW1J-1608717254155)(C:\Users\fint\AppData\Roaming\Typora\typora-user-images\image-20201218152024083.png)]
4、how
4.1 安装
# yum -y install git
4.2 配置
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件。- 当前项目的 Git 目录中的配置文件(也就是工作目录中的
.git/config
文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
# git config --global user.email "123@qq.com"
# git config --global user.name "tmli"
# git config --list //查看全局配置
user.email=123@qq.com
user.name=tmli
color.ui=true
4.3 创建仓库(git服务器)
通过git init命令把这个目录变成Git可以管理的仓库
第1种情况:可以改代码,还能上传到别人的机器,别人也能从你这里下载但是别人不能上传代码到你的机器上。
第2种情况:只是为了上传代码用,别人从这台机器上下载代码也可以上传代码到这台机器上,经常用于核心代码库。
创建裸库: 适用于作为远程中心仓库使用 创建裸库才可以从别处push(传)代码过来,使用–bare参数
[root@zabbix_server git_version_repo]# git init --bare git_test1
初始化空的 Git 版本库于 /mnt/git_version_repo/git_test1/
4.4 基本操作
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ijRp2J8W-1608717254158)(C:\Users\fint\AppData\Roaming\Typora\typora-user-images\image-20201221151858820.png)]
- workspace:工作区
- staging area:暂存区/缓存区
- local repository:或本地仓库
- remote repository:远程仓库
4.4.1 创建仓库命令
命令 | 说明 |
---|---|
git init | 初始化仓库 |
git clone | 远程拷贝仓库 |
#拷贝远程仓库到本地
git clone username@ip:仓库路径
4.4.2 提交与修改
命令 | 说明 |
---|---|
git add | 添加文件到暂存区 |
git status | 查看仓库状态,显示有变更的文件 |
git diff | 比较文件的不同,即暂存区和工作区的差异。 |
git commit | 提交暂存区到本地仓库。 |
git reset | 回退版本。 |
git rm | 删除工作区文件。 |
git mv | 移动或重命名工作区文件。 |
touch test1
git add test1 //添加文件到暂存区
git commit -m "test1" //-m 给提交得版本做标记
git status //查看仓库状态,显示有无变更的文件
git reset --hard dd66ff //版本号可以用git log 命令查看
4.4.3 查看日志
命令 | 说明 |
---|---|
git log | 查看历史提交记录 |
git blame | 以列表形式查看指定文件的历史修改记录 |
4.4.4 远程操作
命令 | 说明 |
---|---|
git remote | 远程仓库操作 |
git fetch | 从远程获取代码库 |
git pull | 下载远程代码并合并 |
git push | 上传远程代码并合并 |
git push origin master //上传到中心仓库master分支,需要用户对中心仓库有多有权限
4.4.5 分支管理
命令 | 说明 |
---|---|
git branch | 管理分支 |
git checkout | 切换分支 |
git merge | 合并分支 |
git branch dev #创建分支
git branch #查看分支。
git checkout dev #切换分支
git merge dev #把 dev 分支的工作成果合并到 master 分支上
5、部署gitlab服务
5.1 what
Gitlab 是一个提供代码托管、提交审核和问题跟踪的代码管理平台。
5.2 why
5.3 基础架构
- Nginx:静态web服务器。
- gitlab-shell:用于处理Git命令和修改authorized keys列表。(Ruby)
- gitlab-workhorse: 轻量级的反向代理服务器。(go)
GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。
- logrotate:日志文件管理工具。
- postgresql:数据库。
- redis:缓存数据库。
- sidekiq:用于在后台执行队列任务(异步执行)。(Ruby)
- unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby Web Server,主要使用Ruby编写)
5.4 安装
1、配置源
vim /etc/yum.repos.d/gitlab_gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
yum makecache
2、安装依赖
yum install -y postfix curl policycoreutils-python openssh-server
systemctl start sshd postfix
systemctl enable sshd postfix
3、安装gitlab-ce
yum install -y gitlab-ce
3、配置
vim /etc/gitlab/gitlab.rb
...
#外部访问url(经过编译后,自动将这个配置编译到nginx配置,nginx就无需配置了)
external_url 'http://ip'
#默认值就是8080。如果端口被占用,可将8080修改为其它(例如:9090)
unicorn['port'] = 8080
#设置地区
gitlab_rails['time_zone'] = 'Asia/Shanghai'
...
4、初始化Gitlab
gitlab-ctl reconfigure #重新加载,需要等很长时间
5、启动gitlab
git
测试访问:http://ip
密码查看 /etc/gitlab/initial_root_password