21054

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 "shou ye

" > 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 阿里云时间服务

来源:博客园

作者:SZ_文彬

链接:https://www.cnblogs.com/leiwenbin627/p/11425605.html

Recommend