一、Git常用命令总结
1. git本地仓库创建并初始化
mkdir learngit && cd learngit #创建一个文件夹作为版本库
git init #将该文件初始化为git本地管理仓库
git add 文件名/ . #将一个文件添加到暂存区
git commit -m "文件说明" #将文件提交到仓库
git status #查看git当前状态
git diff 文件名 #比较文件和修改了哪些内容
git branch name #本地创建分支
git checkout name #切换分支
2. git提交相关命令
#本地仓库与远程仓库关联
git remote add origin git@github.com:shallum1123/远程仓库名.git
#将本地仓库内容推送到远程仓库
git push -u origin master
#push失败,则进行拉取关联
#若未和远程仓库关联则使用此命令
git pull origin master --allow-unrelated-histories
#将远程仓库克隆到本地(任意目录下直接拉)
git clone git@github.com:shallum1123/远程仓库名.git
git clone -b 分支名称 git@github.com:shallum1123/远程仓库名.git
#查看文档当前版本的内容
cat readme.txt
#查看由近到远的提交版本日志
git log || git log --pretty=oneline
#回退到上一个版本
git reset --hard HEAD^
#回退到指定id版本
git reset --hard 版本id
#查看记录的每次git命令
git reflog
3. GitHub中配置ssh key
GitHub配置SSH Key的目的是为了帮助我们在通过git提交代码是,不需要繁琐的验证过程,简化操作流程。
# 1. 设置git的username 和 email
git config --global user.name "zyl"
git config --global user.email "shallum1123@163.com"
# 2.没有SSH Key,则需要先生成一下 :生成ssh密钥
ssh-keygen -t rsa -C "shallum1123@163.com"
# 3. id_rsa.pub内容copy到github 的ssh keys中
# 4. 验证ssh 修改
ssh -T git@github.com
# Hi shallum1123! You've successfully authenticated, but GitHub does not provide shell access.说明连接成功
查看git用户配置信息
git config user.name
git config user.email
# 使用list参数可以查看配置信息,配合local和global可以针对性的查看。
git config --list
# 对当前仓库有效
git config --list --local
# 对当前用户所有仓库有效
git config --list --global
global 配置写入/.gitconfig 文件,local 写入当前仓库下.git/config文件,local优先级高于global
4. Git Merage
# 切换到需要合并到的分支
git checkout master
#合并分支到当前分支
git merge dev
#存在冲突 强制覆盖,慎用 --force
git push origin dev --force
#git checkout remotes/anodlink/anodlink_dev
#远程仓库master分支下载到本地并存为tmp分支
git fetch origin master:tmp
# 查看不同
git diff tmp
#合并 删除分支
git merge tmp
5. Git Push 撤回
# 查看历史commits
git reflog
# 改变HEAD 指向
git reset
# 仅改变HEAD指向
git reset --soft
# 回退代码版本
git reset --hard 版本号
git reset --hard HEAD~1
# 当前分支版本低于远程版本强制push
git push origin 分支 --force
6. idea ignore文件上传设置
# 1. 在settings - plugins下搜索.ignore插件,安装后并重启idea
# 2. 右键项目添加.ignore文件 并添加或略文件名
# 3. 清理git 缓存
git rm -r --cached .
# 4.将 .ignore文件提交到git远端服务
本地新建分支后,直接执行 git push -u origin 同本地分支名 会在远程新建分支。
7. Git-GitHub协同开发统一规范
本地操作
本地新建分支名 dev_姓名 (dev_zhaoyonglong )
git branch dev_zhaoyonglong
git checkout dev_zhaoyonglong
# 开发结束提交代码到远程命令
git add .
git commit -m "message"
git push -u origin dev_zhaoyonglong
在github上你的分支下会出现compare& pull request 让你合并到指定分支的请求
点击compare后到下面的界面,左边master分支是你需要合并到的分支,目前我们的主分支是develop20200616
注意,不要在master分支上操作,右边是你自己的分支
二、Git私有仓库搭建
一、yum安装git
配置环境需要有ssh
su root
yum install openssh.x86_64
ssh -v
yum install -y git
git version
#添加git用户(非必须)
cat /etc/group | grep git #检查mysql组和用户是否存在,如无创建,
cat /etc/passwd | grep git
useradd git
passwd git
#useradd -r -g git -s /bin/false git
#删除用户
userdel -r git
#查看git用户创建成功否
cd /home && ls -al
卸载git
rpm -qa | grep git
rpm -e git
# yum 卸载
yum remove git
二、配置Git 的SSH访问
在git用户下操作
su git
cd /home/git
mkdir .ssh
cd .ssh
touch authorized_keys
# 设置权限
chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys
客户端生成ssh私钥上传服务器
查看本地(代码编写系统)是否存在以下目录(C:\Users\Shallum\ .ssh)
.ssh
├── id_rsa
└── id_rsa.pub
ssh-keygen -t rsa
#一直回车默认
将.ssh 文件上传到服务器新建的.ssh目录
#将私钥文件内容追加到authorized_keys文件
cat id_rsa.pub >> authorized_keys
git服务器打开RSA认证
su root
vi /etc/ssh/sshd_config
#下面3个打开注释或添加
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys #我的存在
本地客户端验证连接
ssh git@192.168.71.133
#注:如果提示需要密码,请检测公钥是否配置成功或RSA是否开启
三、服务器端创建git仓库
su git
cd /home/
#将git目录设置成为git用户所有
chown git:git git
#创建git仓库
mkdir repository.git
#将仓库设置为git用户所有
chown -R git:git repository.git
#进入仓库 初始化git仓库 --bare 创建裸仓库
git init --bare
#git仓库地址
git@192.168.1.100:/home/git/repository/Kevin_maven.git
#如果出现push不上去,在远程仓库在/.git/config 文件添加
[receive]
denyCurrentBranch = ignore
在ecplise上连接私有git仓库
refs/heads/* refs/remotes/origin/*
在idea上连接私有git仓库
#若从远程检出项目到本地 vcs --> Get from Version Control——>输入远程url(git@192.168.71.133:/home/git/repository/two.git) 和放置目录
git@49.233.195.230:/home/git/repository.git
1.setttings-->git-->Path:确认git的安装目录--/bin/git.exe
2.VCS -->Import into Version Control --> Creat Git Repository-->选择项目根目录作为仓库
3.在远程仓库初始化和本地仓库同名的远程仓库
4.将项目做基本的add和commit后 右键-->Git-->repository-->选择操作,输入url
例如:git@192.168.71.133:/home/git/repository/Game.git
新建分支:右下角 git -->New Branch
切换分支:
Git Bash命令上传文件到私有git仓库
#可以进行clone-- git clone 用户名@服务器IP:/相对用户根目录的git仓库绝对路径/git仓库名.git
git clone git@192.168.71.133:/home/git/repository/two.git
#git remote add origin https://github.com/shallum1123/Game.git
git remote add origin git@192.168.71.133:/home/git/repository/Game.git
git push -u origin master
#若未和远程仓库关联则使用此命令
git pull origin master --allow-unrelated-histories
四、Git版本控制以及冲突解决
Git Bash 命令操作
#查看历史提交记录
git log
git log --oneline #简介
#指定作者和查看提交记录数
git log --author=shallum1123 --oneline -5
#项目完结打签
git tag -a v0.1.0 -m "说明"
#根据版本号追加标签
git tag -a v0.2.0 85fc7e7
#根据标签查看提交记录
git tag
git log --oneline --decorate --graph#显示标签
git show v0.1.0
git show '版本号'
#创建分支
git branch dev
#切换到分支
git checkout dev
#合并到主分支
#永久删除远程仓库不需要文件
cd/到本地仓库目录文件
git pull origin master
dir #查看有哪些文件
git rm -r --cached xiti #删除 xiti 文件夹
git commit -m "删除了xiti文件夹" #提交,说明删除了xiti文件夹
git push origin master #将本次更改更新到github上
三、私有仓库操作
git仓库
重庆安道亿联供应链项目git仓库:
远程仓库名:origin
frame 项目仓库地址
user@49.233.195.230:/home/user/repository/frame.git
主分支:master
开发分支:anodlink_dev
个人分支:dev_名
远程仓库名:origin
business 项目仓库地址
user@49.233.195.230:/home/user/repository/business.git
主分支:master
开发分支:anodlink_dev
个人分支:dev_名
提交代码相关操作流程:
#关联仓库
git remote add origin user@49.233.195.230:/home/user/repository/business.git
git remote add origin user@49.233.195.230:/home/user/repository/frame.git
git remote add adtweb user@49.233.195.230:/home/user/repository/adt_web.git
#第一次强制推送
git push anodlink anodlink_dev --force
#强制覆盖
git pull anodlink anodlink_dev --allow-unrelated-histories
问题:
warning: remote HEAD refers to nonexistent ref, unable to checkout
解决:
git branch #输出空
git branch -a #输出 remotes/anodlink/anodlink_dev
git checkout remotes/anodlink/anodlink_dev # checkout的是git branch -a输出的内容
#接着创建分支:
git checkout -b remotes/anodlink/anodlink_dev
git branch #可以看到输出*remotes/anodlink/anodlink_dev,不再为空
git branch -m remotes/anodlink/anodlink_dev master #重命名分支叫master
git show-ref #命令查看也能看到head了
四、git删除远程仓库
git remote #查看远程仓库
git remote rm origin #删除仓库别名
git branch -d dev #删除本地分支
git branch -D 分支名 #强制
git push origin --delete 分支名 # 删除远程分支
五、远程覆盖本地仓库
git fetch --all && git reset --hard origin/anodlink_dev && git pull origin anodlink_dev
# 把远程仓库和本地同步,消除差异
git pull origin master --allow-unrelated-histories
#强制推送到远程
git push -f origin master
# 平台系统 代码仓库
user@49.233.195.230:/home/user/repository/v1.1/frame.git
# 业务系统 代码仓库
user@49.233.195.230:/home/user/repository/v1.1/business.git
# 前端代码仓库
user@49.233.195.230:/home/user/repository/v1.1/adt_web.git
# 开发需求-详设-规范文档仓库
user@49.233.195.230:/home/user/repository/v1.1/doc.git
四、Gogs安装
- 环境需要:安装git 和mysql
- 配置mysql -为Gogs添加一个mysql用户
--创建一个用户名为'gogs',密码为'1qaz2wsx!@'的用户。
create user 'gogs'@'%' identified by '1qaz2wsx!@';
--赋予gogs用户所有权限
grant all privileges on gogs.* to 'gogs'@'%';
flush privileges;
--变更加密方式
alter user 'gogs'@'%' identified with mysql_native_password by '1qaz2wsx!@';
下载配置权限
wget https://dl.gogs.io/0.11.91/gogs_0.11.91_linux_amd64.tar.gz
wget https://dl.gogs.io/0.11.34/linux_amd64.tar.gz
# 或者官网下载
https://gogs.io/docs/installation
# 给用户分配权限
chown git:git /home/git/**
# 解压
tar -xf linux_amd64.tar.gz -C /home/git
# 配置守护进程
cp scripts/systemd/gogs.service /etc/systemd/system
sudo systemctl start gogs.service # 启动服务
# 如果需要开机启动话执行:
sudo systemctl enable gogs.service
# 查看服务运行状态
sudo systemctl status gogs.service
# 账户
adt
1qaz2wsx!@
#修改权限
sudo chmod -R 700 /home/git/gogs
sudo chown -R git:git /home/git/gogs
# 注意开启3000端口在访问
http://49.233.18.80:3000
新建git用户
useradd git
passwd git #gogs1234
# 将仓库设置为git用户
visudo
git ALL=(ALL) NOPASSWD: ALL
chown -R git:git repositories/
在网页访问设置后登录新建仓库后的操作
# 新建的仓库地址
git@49.233.189.80:zyc/business.git
git remote add origin git@49.233.189.80:zyc/business.git
git push -u origin master
五、Git 版本控制规范
项目v1.0版本开发完成后就行打版(管理员设置dev-1.0分支禁止提交项目,只允许下拉),项目升级基于1.0开发1.1版本时需要打基线(管理员创建1.1分支,并将1.0项目复制到1.1分支)
为规范源代码版本管理,现将各分支表述如下:
1.master分支
存放的应该是随时可供在生产环境中部署的代码
当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,都有对应的版本号标签(TAG)。
分支命名:master
该分支,由管理员负责维护,其它人只有拉取权限。来自于release分支的合并,供发版使用
生命周期:伴随着整个项目的生命周期,项目结束时结束。
2.develop分支
develop分支是每次迭代版本的共有开发分支,从最新的master分支派生(管理员操作)
当develop分支上的代码已实现了软件需求说明书中所有的功能,派生出release分支(管理员操作)
分支命名:dev-版本号
该分支,由开发人员在各自的feature分支开发完成后,合并至该分支。
生命周期:一个阶段功能开发开始到本阶段结束
3.release分支
从develop分支派生(管理员操作)
测试环境中出现的bug,统一在该分支下进行修改,并推送至远程分支。修改内容必须合并回develop分支和master分支。
分支命名惯例:release-版本号
生命周期:一个阶段功能开发结束开始,完成阶段功能测试并修复所有发现bug,合并会develop分支结束。
4.feature分支
在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回develop分支
分支命名惯例:feature-姓名全拼-分支说明-日期 / feature-分支说明-日期
例:接到一个开发关于cc视频点播替换的任务,你需要从develop分支拉出一个分支,并命名为:release-yhm-ccVideo-20200827。然后在该分支下进行开发,开发结束,将该分支合并至develop分支(此时的代码必须为可运行的,不能影响到他人),合并完成删掉该特性分支。
开发人员的每一个新功能开发都应该在该类分支下进行。
生命周期:开发一个新功能开始,完成新功能开发并合并回develop分支结束。
5.hotfixes分支
在master分支发现bug时,在master的分支上派生出一个hotfixes分支,修改完成后,合并至master分支以及develop分支,合并完成,删除该hotfixes分支。
分支命名惯例:hotfixes-姓名全拼-分支说明-日期
示例:hotfixes-yhm-cclivebug-20200827
生命周期:发现master分支bug开始,完成master分支bug结束。
综上,开发人员需要操作的分支如下:
feature分支 (开发使用)
release分支 (测试中出现的bug修改)
hotfixes分支 (master中出现的bug修改)
整个流程可以下图展示