一、git客户端命令行的使用
1、创建本地用户并绑定ssh-key到gitlab
#在本地注册用户,这个用户随便创建它就是与git仓库连接的一个用户,不过最好喝git仓库用户一样有利于区分。
git config --global user.name "wenqiang1"
git config --global user.email "wenqiangit1@163.com"# 生成ssh-key并绑定gitlab
# ssh-keygen.exe -t rsa -C "wenqiangit1@163.com" -b 4096 # 生成ssh-key windows用法
# ssh-keygen -t rsa -C "gery_sunjian@163.com" -b 4096 # 生成ssh-key Mac用法
# ssh-keygen -t rsa # 生成ssh-key linux用法
# cat ~/.ssh/id_rsa.pub # 查看并复制公钥
登录github或gitlab——点击Settings——点击SSH and GPG keys——New SSH key——添加公钥
2、拉代码、提交代码到主分支(主分支用于直接上线)
(0) 本地测试git是否能通过github验证
$ ssh -T git@github.com
Hi wenqiang! You've successfully authenticated, but GitHub does not provide shell access.(1)方法一:如果web端已经创建了仓库,可以用下面的命令把web端的仓库克隆下来并在该仓库中创建和提交新的代码
git clone git@172.16.12.34:wenqiang1/2.git #将web端的项目克隆到本地
git clone -b 分支 git@github.com:clouddeepcn/SDP-lite.git
cd 2 #进入项目目录
git pull origin master #把远程仓库主分支的内容同步到本地保证远程仓库和本地数据一致
touch README.md #在本地创建新的文件
git add README.md #添加新的文件到本地暂存区域
git status #查看项目的提交状态
git commit -m "add README20200707" #将暂存区域的文件提交到本地仓库并做备注
git push -u origin master #本地仓库的文件提交到远程仓库的主分支(2)方法二:还有一种方法能把web端仓库拉下来,首先在web端创建一个空项目existing_folder
注意:仓库existing_folder和仓库2是不同名的同一个仓库
mkdir existing_folder #然后再本地也创建同样名字的目录
cd existing_folder #进入这个目录
git init #这个命令就可以把新创建的目录变成git仓库(本地仓库existing_folder和远程仓库2相当于1一仓库,他们里面放的是相同的文件)
git remote add origin git@172.16.12.34:wenqiang1/2.git #与web端的仓库建立连接,这一步就相当于克隆
git pull origin master #把远程仓库主分支的内容同步到本地保证远程仓库和本地数据一致
touch 123abc.txt #随便创建点东西
git add . #点表示把所有内容添加到本地暂存区域
git commit -m "all" #把暂存区的所有代码提交到本地仓库
git push -u origin master #最后把本地仓库的代码上传到web端远程仓库的主分支
3、创建子分支,并提交代码到子分支(子分支用于开发测试)
(1) 创建子分支
# git checkout -b dev # 创建一个dev子分支
# git checkout dev # 切换到子分支
# git branch -a # 查看所有分支,*号表示正在使用的分支
* devmasterremotes/origin/master(2) 提交代码到子分支
# cd /data/myproject-test # 进入仓库
# tuch aa # 创建一个文件
# git push -u origin dev # 将代码推送到远程仓库的子分支(3) 把所有分支都拉下来
# git fetch
(3.1)可以看到子分支里面多了一个aa文件,而master分支里面是没有aa文件的
4、合并分支:通过命令将dev合并到master主分支
(1) 先在dev分支创建一些文件并提交到子分支
# git checkout dev # 切换到子分支
# git branch # 查看当前工作在子分支
* devmaster
# touch 2222.txt # 创建文件并提交到远程仓库的子分支(此时远程仓库的dev有2222.txt master分支没有2222.txt)
# git add .
# git commit -m "2222.txt"(2) 切换到master分支,并更新代码到最新状态
# git checkout master
# git pull origin master (3) 将本地的dev子分支合并到本地的master主分支中
# git merge dev
Updating 2772fb0..a2b4d70
Fast-forward2222.txt | 01 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 2222.txt(4) 将本地的master分支代码提交到远程仓库的master分支上
# git add .
# git commit -m "master merge dev"
# git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To git@192.168.1.12:develpment/myproject-test.git2772fb0..a2b4d70 master -> master
Branch master set up to track remote branch master from origin.(5) 每次合并分支之后,都要把之前的子分支删掉,下次再创建新的子分支
# git branch -d dev #删除旧的子分支
4.1、直接在gitlab上合并子分支到master分支
(4.1)开发把远程仓库拉下来并创建子分支
# git clone git@192.168.1.12:develpment/myproject-test.git
# cd myproject-test/
# git checkout -b dev # 创建分支
# git branch # 查看当前所在分支
* devmaster
(4.2)创建一些文件并提交到子分支
# git pull origin master # 先把master分支的代码更新到dev分支,使dev分支代码保持最新状态
# touch ALEX.txt
# git add .
# git commit -m "ALEX.txt"
# git push -u origin dev # 把创建的新代码提交到dev分支
(4.3)此时dev分支有ALEX.txt 而master分支没有ALEX.txt
(4.4)使用开发账户登录gitlab提交分支合并请求(前提是master分支受保护的情况下才去这么做)
(4.4.1).选择项目仓库——点击【合并请求】
(4.4.2) 选择【新建合并请求】
(4.4.3)将dev分支合并到master分支并点击【比较分支后继续】,填写标题和描述,完成后选择【提交 合并请求】
(4.4.4)选择【提交 合并请求】后,会看到【Merge】按钮是灰色的,因为开发自己是不能给自己审核的,只能由他的主管或更高权限用户来审核
(4.4.5) 登录管理员账户、或开发总监账户去处理开发人员提交的合并请求
1>.点击项目仓库——选择【合并请求】
2>.点击【dev合并master 第1次】
3>.点击【Merge】就可以完成dev到master的合并了
4>.回到项目仓库就可以看到master分支已经有ALEX.txt文件了,并且dev分支已经被删除了(合并后开发在自己的服务器也要删除相应的dev分支)
5、checkout 删除本地文件与恢复
# 删除文件
(1)删除本地文件和远程仓库文件
git pull origin master #把远程仓库主分支的内容同步到本地保证远程仓库和本地数据一致
git rm creat_user1.sh #删除文件
git commit -m "删除了creat_user1.sh" #把现有的文件提交到本地仓库
git push -u origin master #把本地仓库同步到远程仓库# 恢复本地误删文件
(1)如果本地误删了文件远程版本库还有的话可以恢复
[root@localhost Shell]# rm -f creat_user1.sh #本地误删文件
[root@localhost Shell]# git checkout -- creat_user1.sh #恢复命令
[root@localhost Shell]# git checkout . #恢复左右文件到最初状态
6、回滚代码
(1) 查看之前提交的历史记录
# git log
commit 735fea6d66ea40b0b66e5fdc3e6e1b9dbeb4089a # 提交历史id
Author: wenqiang <wenqiangit@163.com>
Date: Tue Jun 23 07:26:18 2020 -0400 # 提交历史时间(2) 回滚到上个版本
# git reset --hard HEAD^ # 回滚到上个版本
# git reset --hard a014e8fa410289b62380a78ce7cf8db51a3ad6fb # 回滚到指定版本
--hard选项表示彻底将工作区、暂存区和版本库记录恢复到指定的版本库,HEAD^表示回滚到上一个版本,HEAD^^表示回滚到上上一个版本,以此类推,如果要回滚到上100个版本,可以使用HEAD~100(3) 将回滚后的版本强推到远程仓库
# git push -f origin master(4) 如果文件只是提交到了暂存区,还没有提交到远程版本库,可以通过如下命令将暂存区代码撤回
(1)touch 1.txt #创建了一个新的文体
(2)git add 1.txt #将这个文件提交到暂存区
(3)git status #查看提交状态
(3)git reset HEAD h.txt #将提交的内容撤回
7、拉代码脚本
#!/bin/bash
# 拉代码到tomcat站点目录# 进入本地git仓库
cd /root/myproject1if [[ $? -eq 0 ]]
then# 从远端git仓库拉去代码到本地仓库git pull origin master# 将本地代码推送到tomcat站点目录并替换\cp test1 /usr/local/apache-tomcat-8.5.55/webapps/ROOT/
fi
8、回滚脚本
#!/bin/bash
# git回滚代码到上个版本并推送到tomcat# 进入本地git仓库
cd /root/myproject1if [[ $? -eq 0 ]]
then# 回滚到上个版本,并将本地代码强制推到远程仓库git reset --hard HEAD^# git push -f origin master 这一步可以不做# 将回滚后的代码重新拉下来并推送到tomcat站点目录并替换git pull origin master\cp test2 /usr/local/apache-tomcat-8.5.55/webapps/ROOT/
fi
9、让windows下ssh-key既支持gitlab 又支持github
# 这里测试结果是id_rsa的文件不能删除,否则ssh -T gitlab不生效$ ls
SDP-lite/ config id_rsa id_rsa_github known_hosts
backup_id_rsa/ config.bak id_rsa.pub id_rsa_gitlab$ cp backup_id_rsa/id_rsa ./id_rsa_github
$ cp id_rsa ./id_rsa_gitlabcat ~/.ssh/config
#github
Host github.com
HostName github.com
User git
IdentityFile "C:\Users\redcore.000\.ssh\id_rsa_github"
ProxyCommand nc -v -x 40.125.172.218:1090 %h %p#gitlab
Host gitlab
HostName gitlab.clouddeep.cn
User git
IdentityFile "C:\Users\redcore.000\.ssh\id_rsa_gitlab"[redcore@mac-dev-11 ~/.ssh]$ ssh -T git@gitlab.clouddeep.cn
Welcome to GitLab, @qiang.wen!
[redcore@mac-dev-11 ~/.ssh]$ ssh -T git@github.com
Connection to github.com port 22 [tcp/ssh] succeeded!
Hi clouddeep-devops! You've successfully authenticated, but GitHub does not provide shell access.