git
git分布式版本管理系统
gitlab git私库解决方案
GitHub git公有库解决方案
git安装
依赖安装:yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
tar xf git-2.7.4.tar.gz
cd git-2.7.4
make prefix=/usr/local/git all
make prefix=/usr/local/git install
rm -rf /usr/bin/git
ln -s /usr/local/git/bin/git /usr/bin/git
git --version
初始化
mkdir test
cd test 目录将会被版本控制
git init
git config --global user.name "lwb" 添加名字
git config --global user.email 346978526@qq.com 添加邮箱
git config --list 查看配置信息
git log
四个区域:远程仓库 本地仓库 暂存区域 工作目录
四种状态:untracked unmodified modified staged
untracked:未被追踪的文件 即新文件 在工作目录 本地目录
unmodified:未被修改状态 在本地仓库
modified: 已修改状态 拉回工作目录
staged:暂存区文件 在暂存区域
常用命令:
git add 加入暂存(索引区)
git status 查看状态
git status -s 状态概览
git diff 对比 尚未暂存的文件
git diff --staged 暂存区文件对比
git commit 提交更新
git rest 回滚
git rm 从版本库中删除文件
git rm --cached 从暂存区中移除
git mv 相当于mv git rm git add三个命令
测试:
vim index.html
git status 有一个未被追踪的文件 index.html 在工作目录
git add index.html 加到暂存区
git commit -m "first commit" 所有的文件提交到本地仓库 -m注释
git log看一下操作日志
touch pay.html
vim pay.html 在工作目录
git add pay.html 加入到暂存区
git rm --cached pay.html 从暂存区删除退回到工作区域
分支管理
创建分支 分支名为about: git branch about
切换分支:git checkout about
查看:git status
touch about.html
vim about.html
git add .
git status
git commit -m 'about'
git log 会发现有3次提交
git checkout master 切回master还是只有2次提交
git log
git branch 查看工作在哪个分支
git checkout about 切回about分支
git branch -v 详细查看分支
git branch -d about 删除about分支
切回master
git merge about master 将about分支的提交merge合并过master来
git branch --merged 查看哪些分支已经被merged过来了
git branch --no-merged 查看没被merged过来的分支
测试
git branch test
git checkout test
vim test.html
git add ./
git commit -m 'test commit' ./
git log
git checkout master
git branch --no-merged
git高级管理
git checkout --file.txt 撤销对文件的修改
git checkout master
vim index.html 修改
git status 修改之后会放到工作区
git checkout -- index.html 撤销刚才的修改
git status 工作区已经没有文件了
cat index.html 刚才的修改也撤销了
git reset回滚本地仓库文件 commit级的reset
git reset --hard 5d37841cd7ca953bb 本地仓库回滚到id:5d37841cd7ca953bb
参数: --hard 工作目录和暂存区跟着本地仓库一起回滚
-- soft 缓冲区和工作目录都不会改变
--mixed 默认选项,工作目录不会回滚,缓冲区和本地仓库会回滚
git log 回滚之前的commit已经没有
文件级的reset
git reset foo.py
将当前在缓存区的foo.py移除出去
git reflog 回滚到指针
git checkout 692a770 切换到 four commit指针时刻,
git branch reset 建分支 建好之后指针在 four commit
git stutas (到了four commit指针)
git checkout reset 切到reset分支 此时reset也到four commit的提交
git log
git checkout master
git log 还是 second commit
git merge reset 同步merge到reset分支的指针
git log master分支已经merge到reset了
git远程:
git add git commit git push
workspace工作区 ------> index暂存区 ------------> repository本地仓库 ------------>remote 远程仓库
git fetch/clone checkout版本回滚 reset
remote 远程仓库 -------------------> repository 本地仓--------------> workspace 工作区
git pull下载
remote 远程仓库 ------------> workspace工作区
cd ~
git clone https://github.com/guohongze/scripts.git 远程remote仓库pull下来 初始化
cd scripts/
git status
vim README.md
git add ./ 放到缓存区
git commit -m 'readme update' . 提交到本地仓库
git remote -v 查看远程仓信息
origin https://github.com/guohongze/scripts.git (fetch)
远程库名简写 远程仓库名
git push origin master 上传到远程仓库
远程仓库名 master分支
git pull 拿下来会合并到当前分支
git fetch 代码拿下来不会合并到当前分支
cd test
git remote -v 没有远程信息
git remote add origin http://192.168.81.30/lwb.git 添加远程仓库
git remote -v 已经加上远程仓库
git remote add gitlab http://192.168.81.30/lwb.git 可以加上多个远程仓库
git remote -v
git push gitlab test
远程仓库名简写 分支为test
echo "# scripts" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/leiwenbin627/scripts.git
git push -u origin master
添加tag
git tag --help
git tag 查询tag
git tag -a v1.0 -m "feature finished” 给当前指针添加tag
tag为 v1.0 -m:注释
gitlab安装
基于git的源码托管解决方案 基于tuby on rails开发 集成了nginx postSQL reis sidekiq 等组件
镜像来源 https://mirrors.tuna.tsinghua.edu.cn/
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
安装依赖:yum install curl policycoreutils openssh-server openssh-clients -y
systemctl enable sshd
systemctl start sshd
yum install postfix -y
systemctl start postfix
systemctl enable postfix
rpm -ivh gitlab-ce-8.9.11-ce.0.el7.x86_64.rpm
改配置文件
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.81.20'
gitlab-ctl show-config 验证配置文件
gitlab-ctl restart 重启
gitlab-ctl reconfigure 重置配置文件并启动
登录
192.168.81.20:80 密码随便设置,用户为root
主控命令
gitlab-ctl --help
gitlab-ctl status/start/stop/restart
gitlab-ctl tail nginx 看日志
/var/log/gitlab/ 日志路径
组件:
nginx:
gitlab-shell 处理git命令和修改authorized keys
gitlab-workhorse 反向代理服务器
logrotate 日志管理工具
postgresql 数据库
redis 缓存
sidekip: 执行后台任务 异步
unicorn gitlab rails运用托管在上面的服务
目录
/var/opt/gitlab/git-data/repositories/root/ 库默认存储目录
/var/opt/gitlab/ 程序文件
创建工程
扳手--->new group -->app01--->private --->create 创建app01组
private:需要授权才能访问项目
internal:登录gitlab系统的人能访问项目
public:能访问gitlab都能访问项目
组的访问形式:http://192.168.81.20/java/app1.git
ssh git@192.168.81.20:java/app1.git
组 -->项目
组 -->成员user
扳手 --->project 创建项目 java
扳手 -->new user ---> 创建pm dev1 dev2
权限: 左边 ---->profile settings -->ssh key
开发者dev1/dev2的权限仅限于项目里的developer, 项目管理员pm权限在组里group为master
打通linux
cd .ssh/
ssh-keygen
cat id_rsa.pub 拷贝公钥 粘贴到key里
选择group -->选择 dev1 角色:Developer dev2也加进去,角色developer dev1/dev2权限就在java组里
选择 project -->选择 project manage access --> pm加成master dev1/dev2加成developer -->add user to project
添加密码: user -->dev1 -->edit-->password添加密码 dev2 pm都要加密码 这是加的初始密码 用户登进的时候要改密码 实际环境中用ldap验证
账号登录-->添加key (如果组里面添加了key就不需要加了)
测试 git clone git@192.168.81.20:java/app1.git
上传代码
先用root建master
root登系统 ,选择project,点+号-->new file 创建提交。master分支出现
回到 dev的linux系统上,用git pull 拉下分支
打通windows
windows安装:
选第二个 windows选项
安装完之后在一个目录里面打开 git bash here
比如:/d/job
创建秘钥ssh-keygen 秘钥对在C:\Users\Administrator\.ssh
将公钥粘贴给dev2的key
然后在window目录里执行 git clone git@192.168.81.20:java/app1.git 然后进入的clone 下来的目录进行操作 git branch
deploy key
只能下载代码,不能上传代码,给jenkins用的,Jenkins只下载代码,不上传代码
通过root登录-->扳手--->下面小齿轮
做一个开发计划
项目:app1 版本v1.0
需求: 首页 新闻 支付 关于
开发者: dev1开发首页 新闻
dev2开发支付 关于
完成日期:首页 8.29日
新闻 8.30
支付 8.31
关于 8.30
先重置pm的密码,然后用pm账号登录管理分配开发计划
左边 milestones -->new milestones --> java/app01
title:官网v1.0 日期9.1 -->create milestones
new issue --》首页 ---》日期 8.29 开发者 dev1 -->submit提交 然后都加进去
然后用 dev1登录系统可以看到任务分配下来了 点小铃铛
然后准备开发
到app1目录下
git checkout -b shouye 创建并切换到分支
echo "<h1>shou ye</h1>" > index.html 模拟开发首页
git add .
git commit -m 'shou ye commit 1' 开发完成传到本地仓库
git push origin shouye 传到gitlab
然后登录gitlab查看reposity 在点branchs 可以看到分支和提交情况
合并到master
merge request --> assignee选pm mileston选官网v1.0 -->submit提交merge
然后用pm登gitlab 查看 点小铃铛 --->accept merge request 代码合并到主干master
然后点repository -->commits 查看提交情况 repository ---> branches看分支情况
开发完,用dev1 登录系统, issues -->首页 -->点 mark done 已完成
用pm登录查看, 点击mailstone 可以看到进度进了一个 点project --》issues -->点首页 --》点close issue
继续开发第二个任务
git checkout master
git log
git pull 更新dev2开发者主干master
git log
开始开发
git checkout -b news 创建分支并切换到分支
echo "news center" > news.html 开发中
git add . 提交
git commit -m "close #2" 提交到本地仓库 close #2意思是merge完之后自行关闭issues
git push origin news 提交到gitlab
用开发者dev1登录gitlab
点projects -->create merge request -->submit提交merge
用 pm登录gitlab--->projects-->merge requests--->accept merge
在点repository -->commits可看到提交情况
然后 project --> 下面点branches可看到shouye 和news都合并来了,然后再看 issues 可看到新闻自己关闭了
只有master 才能pull合并到主干gitlab
git checkout master 切换到master 分支
git pull 合并gitlab主干
备份管理
vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" 备份路径,可修改
gitlab_rails['backup_keep_time'] = 604800 保留604800秒的数据,即保留7天的数据,
mkdir -p /data/backups/gitlab 自动给git权限
gitlab-ctl reconfigure 让修改的配置生效
gitlab-ctl restart
定时备份
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
date -d @1566979103 date -d翻译时间戳
恢复
删项目测试 扳手-->edit project ---> remove project
恢复过程
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1566979103(备份的时间戳)
gitlab-ctl restart
代码存放:/var/opt/gitlab/git-data/repositories
邮件配置
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '346978526@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "346978526@qq.com"
gitlab_rails['smtp_password'] = "she5216600she521"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
source tree
路径: app1的ssh路径
在source tree上开发
点分支 about
在app1目录里创建about.html
然后再看sourcetree
点about.html 暂存
sourcetree -->工具 --> 一般 配上名字 dev2
点提交 加注释 close #4
然后pm登录gitlab
project -->app1 -->tag -->new tag -->v1.0 -->create tag
repository --> tags 可以看到发布的版本
sourcetree -->选master--> 拉取origin/master
ntpdate times.aliyun.com 阿里云时间服务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器