GIT常用命令for QA

1. FE环境手动拉代码

git init  -初始化git就好了
或者手动拉FE代码
服务端手动pull代码
将目标文件赋予git文件夹权限
cd /data/beta   进入FE根目录
sudo rm -rf ssweb7001   删除老代码
将最新master代码 copy到新建ssweb7001中
sudo cp -rf /data/beta/sswebByHand/FE_Susuan ssweb7001    //sswebByHand放的master代码。拷贝master代码到FE测试环境
cd /data/beta/ssweb7001
sudo git checkout master    //切换到master分支
sudo git pull   检查更新master最新代码
sudo git branch -a  显示远程所有分支
sudo git remote update —一般不会出现这种情况
sudo git branch p-learning-report remotes/origin/p-learning-report   把远程分支拉到本地
sudo git branch  -查看有没有提测lishan分支
sudo git checkout p-learning-report 切换分支
或者git checkout -b p-learning-report origin/p-learning-report    切换到提测分支
sudo git pull origin p-learning-report 检查更新
git branch oral-english remotes/origin/oral-english
cd ..
授权
sudo chgrp -R build ssweb7001
sudo chown -R build ssweb7001或者
sudo chown -R  build:build ssweb7001
如果存在那个分支 一般是先切分支再拉代码 要是分支不在 就得先拉分支再切分支
如遇分支写错,要删除分支
sudo git branch -d remotes/origin/BBK
如遇
fatal: Not a git repository (or any parent up to mount point /data)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
[-] 21:05:37 error(@567): /usr/bin/git fetch 执行失败。
原因:知道原因了  因为之前拉代码失败 会残留一些文件,再拉就会这样,删了重新拉就行。需要手动删掉代码目录,重新git clone 


2.QA环境提交Python代码
添加文件到change
git add . // 添加当前目录所有文件
git add 指定文件/目录
提交到本地版本库
git commit -m '注释'
提交到远程仓库
git push origin 分支名
查看提交状态
git status
git status

提交代码之前git pull 从分支拉取最新的代码,如果有冲突需要解决,删除<<<<<(
<<<<<<< HEAD
=======

>>>>>>> 28ed2608dbc97aea773f3fef616ad366265bbb58),
如果同时修改了同一个文件,且为新增,不冲突,可以都保留,即如果同时修改了配置文件保留2份。再运行代码保证没错
git status --显示工作目录和暂存区的状态。此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息
git add src/SuiteAndCases/Parent/cases_suite_parentuser/case_userRegisters.py --新增文件直接add
(-- git add -A 提交所有变化
-- git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
-- git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git status --没有已经add的文件
git commit src/SuiteAndCases/Parent/cases_suite_parentuser/ -m 'Update' --将本地修改保存到本地仓库中
git commit src/SusuanOperations/Parent -m 'Update' --提交此路径下所有的代码文件
git commit src/SusuanRequests/Parent/userRequests.py -m 'Update' --提交单个文件
git commit src/casePath.py -m 'Update'
git commit src/caseRegister -m 'Update'
git commit testConfig.py -m 'Update'
git commit -m 'update' --提交所有文件

可以直接使用git commit -am "<message>",将所有修改,但未进stage的改动加入stage,并记录commit信息。(某种程度上相当于git add和git commit -m的组合技,前提是被改动文件已经是tracked)

git status --查看本地未提交文件
如遇

Untracked files:
(use "git add <file>..." to include in what will be committed)

"src/SuiteAndCases/Parent/cases_suite_parentuser/E:\\git\\SusuanApiAutoTest-pyunit\\src\\logs"

用git clean -f   解决

git checkout -- src/SusuanRequests/Student/__init__.py  放弃提交某个文件

git show origin

或git push xxx xxx -force 强推

先pull再push,pull相当于从远程先做git fetch,再执行git merge :取回远程主机某个分支的更新,再与本地的指定分支合并。(vim模式保存退出,没有conflict的冲突git自动merge)

git pull origin student --从远程分支拉取最新的代码
git push origin student --将本地的student分支推送到origin主机的student分支。如果student不存在,则会被新建
git commit -am'Merge Master'   --保存退出,不需要新增内容 
git status
git reset --hard HEAD
git log
也可以查询版本 :git log pretty =oneline
显示所有提交版本记录,选择 id
git branch  --显示本地所有分支
git branch -a --查看所有本地分支和远程分支
git branch -r --只查看远程分支
git remote show origin --查看remote地址,远程分支,还有本地分支与之相对应关系等信息
如遇python clear read-only status
sudo chown -R  qa:staff ./

 

 

如遇git pull失败 ,需要把远程分支明的参数带上

git pull origin operation/1.0.0

git remote set-url origin [email protected]:QAls/APInterfaceFrame.git    当前路径代码绑定到某内容仓库

git remote update --prune  

 

3.RD合并master

git checkout master   切到master分支

git pull origin master   更新本地master代码 保证与线上一致

git checkout featureA   切换到提测分支

git pull origin featureA   更新提测分支代码

git merge master   合master

git push origin featureA --将本地的提测分支推送到origin主机的提测分支。如果提测不存在,则会被新建

 

4. 开发环境基于master打新分支并编译test

cd /data/www/aiclassapi/tool

git checkout master

git pull origin master   更新本地master代码

git checkout -b qatest06   

      git branch创建分支,但保留在已签出的当前分支中。

      git checkout -b创建一个分支并检查它。

      它是以下简称:

      git branch name

      git checkout name

git push origin qatest06:qatest06

cd /data/www/aiclassapi/tool

sh backoperation_build.sh test

git status

git add build/

git status

git commit -m 'add newest testbuild'

git push origin qatest06

 

5.其他

git 命令有时候失败,要用ssh了,https协议不行

虚拟机里git配置文件在  cd ~ 

vim .gitconfig

 

6.其他RD的wiki也可以参考,以下为RD链接

关于git的使用

Git 使用流程:
在本地操作git:
git branch 列出所有分支
git checkout -b dev_new_feature 创建并切换到新的分支,不要直接再master上做提交修改。在自己的分支上做修改。
git config --global user.name 'yourname' 配置操作用户
git config --global user.email '[email protected]'
git config -l 查看是否添加成功
git add .
git commit -m'注释'
git push origin dev_new_feature 推送到远程具体分支
-------------|||
在服务器上操作git:
git branch 列出分支
git branch -D 强制删除这里的一个分支
git checkout -b dev_new_feature origin/dev_new_feature 取之前在本地操作新建的远程分支并在服务器端分化一个新分支。 
git pull origin dev_new_feature 拉取远程这个分支

认知:测试服务器只是作为一个本地调试预览的环境。具体Git的提交和merge可以不用在服务器处理。
通过nginx配置找到下面的每个用户的配置地址:
 /data/www/wangjn/vhosts 每个人配置自己的分支对外调试的端口。
shark项目的调试地址:
http://shark.heavi.cn:端口号/index.php

 

Git的小技巧

vim ~/.gitconfig 添加一些别名。别名操作可以提高开发效率。

[alias]

st = status

ci = commit

br = branch

co = checkout

df = diff

ss = stash

ssp = stash pop

在susuan_server下切换到一个新并行开发的分支上

git checkout master 切到主分支

git branch -r 远程分支名

git pull  origin dev_new_english_homework_by_lyz 拉取远程这个分支到本地

git branch --set-upstream-to=origin/dev_new_english_homework_by_lyz 避免每次提交都加远程分支名。

所以上面那句话就可以直接git pull

 

 

1、pipeline.go

/**

采用该模式处理传入的方法,统一的对error进行处理

*/

其中Pipeline()方法按照顺序执行func,而PipelineWith(interface{})方法按照顺序将前一个方法的返回值作为参数传给后一个方法

这套模式主要也可以保证方法调用的顺序

2、在工程根目录下 make一下 成功时会创建一个exe文件

3、service.go 

InitService()方法将gRPC提供服务的对象先创建好,避免真正请求时再去创建

 

4、functional_test 下的 type_test.go 是用来提供HTTP协议的gRPC测试的,省去创建gRPC客户端的麻烦

 

5、使用make编译之后(执行./proto.sh)会产生exe文件,exe文件添加启动参数 

-config D:/meiqia/src/git.meiqia.com/business_platform/territory/config_it.toml

使用上述参数执行toml文件路径

 

6、不要使用反射  起名尽量简短易懂

 

7、ioc包下面的ServerContainer,这个包中维护了一个ServerContainer对象,实现类似单例的功能,因为在启动服务的过程

中创建好的这些服务对象在服务周期中将保持不变,在其他地方可以直接调用ioc对外提供的get方法来获取需要的服务对象

 

8、gRPC对外提供的方法在service.pb.go的_TerritoryService_serviceDesc结构体中

server/interceptor下的interceptor.go为拦截器的实现类

对外提供服务的handler方法实现是在service.proto中

服务器启动grpc时会阻塞在 Serve()方法

实际上service.pb.go这个go源文件是编译.proto文件之后产生的grpc的go源码

 

9、git常用命令  fork在gitlab页面进行操作

git log               可以查看仓库版本号 通过commit 后面的版本号可以还原到指定版本

git reset --hard 版本号       还原到指定的版本号

git pull origin master        可以将origin仓库的master版本代码进行更新   

git remote cd . 别名 git仓库地址 ----执行这个命令的时候注意需要先cd到项目路径下

查看配置 vim .git/config

git remote update origin --prune    -----更新远程分支列表

 

合并其他人提交的代码

git checkout master         # 切换到本地的master分支                                                            

git fetch upstream          # 拉取upstream最新代码                                   

git rebase upstream/master      # 合并到本地的master分支  

                  # 这时可能会出现代码冲突,通过 git status 来查看冲突的代码,在ide上进行合并修改然后使用

                  # git add + 合并冲突后的文件  git commit --amend # 更新本地的本次commit,不产生新的commit                                    

git push origin master       # push到github上的自己fork之后的master分支  --force  将强制覆盖

 

合并多个分支为一个可以使用 git merge --squash  分支名

 

还原某一个文件

git log fileA  拿到要还原到的版本号

git checkout 版本号 fileA

git checkout . 回滚当前目录下所有文件

 

git branch fix_xxx

git checkout fix_xxx

git add xxx

git commit -m "xxx"

git push origin fix_xxx     -------提交到远程分支 首次提交时  fix_xxx:fix_xxx可以创建远程分支

git checkout -b fix_xxx  origin/远程分支名x  -------新建本地分支并切换/从远程拉取分支新建到本地

 

git remote set-url origin [url]  -----修改origin地址

git remote rm origin

git remote add origin [url]

 

git fetch --all       -------远程覆盖本地  下载远程库的内容,git reset 把HEAD指向刚刚下载的最新的版本

git reset --hard upstream/master

 

 

git reset HEAD .         ----撤销所有的git add

git reset HEAD -filename     ----撤销某个git add

git add .               ----将文件夹下修改的内容全部add

 

--删除远程分支

git branch -r -d origin/branch-name  

git push origin :branch-name  

 

git tag -a v1.2 -m "version 1.2"

git push --tags

 

git去除idea目录  注意下面origin master需要修改为对应的分支名  

        git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch .idea' --prune-empty --tag-name-filter cat -- --all

        git push origin master --force           

        rm -rf .git/refs/original/

        git reflog expire --expire=now --all

        git gc --prune=now

        git gc --aggressive --prune=now

使用.ignore插件  增加.gitignore文件来过滤不需要上传的文件

 

 

10、 go的单元测试命令 run后面为方法名 

go test -cover -args -config /opt/env/gopath_meiqia/src/git.meiqia.com/business_platform/territory/conf/config_it.toml -run "TestCreateModelByModel"

 d:/meiqia/src/git.meiqia.com/business_platform/territory/conf/config_it.toml

有时候 -run找不到的 使用-test.run

 

11、delve 调试时的命令

p    变量名可以查看变量值

locals 查看局部变量

ls   可查看当前文件

stack  查看栈

help  可以查看各种帮助

 

12、mysql 严格模式下对空值的控制较严,比如时间类型的值当插入数据时如果复制空可能会导致数据插入失败

 

13、ioc包中GRPCJudgeClient 是用来校验权限的rpc服务客户端,在gRPC接口文档中有介绍需要校验权限的接口

 

14、ssh-keygen -t rsa -C "[email protected]"  生成ssh密钥在/c/Users/vitane/.ssh/id_rsa.pub

                          在git bash中路径为/c/WINDOWS/system32/config/systemprofile/.ssh/id_rsa

ssh -vT [email protected]               可以进行一下测试并打印debug日志

git config --global user.name "zhuangyanxu"

git config --global user.email "[email protected]"

 

--------------------------------win系统使用git bash的时候要注意很多问题可能是由于路径的差别导致的---------------------------------------

 

type %userprofile%\.ssh\id_rsa.pub      win查看ssh密钥

 

 

15、查看IP是否翻墙可以使用

curl http://httpbin.org/ip

 

16、google account [email protected]

 

17、搭建 go test 覆盖率环境  使用https://github.com/axw/gocov   使用gocov test 命令写在travis里,输出到slack

 

18、docker打包运行命令   docker build需要在Dockerfile 目录下执行

 make 

 以下命令执行时可能需要使用 sudo

 docker build -t search:v1 .      

 docker images

 docker run -p 50080:50080 -d search:v1

 docker ps -a       // -a表示查看所有容器,不加参数表示查看正在运行的容器-平 

 docker kill/stop imagename 

 docker logs imagename  

 docker rmi -f imageid

 

 docker run -d -p 9411:9411 openzipkin/zipkin

 

 运行中的docker清除日志   

   Docker ps -a   ------------拿到Container ID

   docker inspect Container ID |grep log   ------------进入容器

   找到log 然后cd到log-json.log

       cat /dev/null > /var/log/......log-json.lgog

 

 glide get --all-dependencies -s -v github.com/go-redis/redis

 glide 时有的依赖包可能需要权限才能下载

 glide 时需要设置GOPATH GOPATH中的包如果不是最新的可能会对需要引入的包产生影响

 glide cc  清楚缓存   当glide install时手动更改lock文件会提示warn

  godeps 

 

 类似protoc-gen-grpc-gateway.exe这种执行文件可以在grpc源文件protoc-gen-grpc-gateway目录下执行go install创建

 

 docker操作MySQL数据库

 docker exec -it dev-mysql bash

 show variables like 'character_set%';   ------------查看默认字符集    创建database时记得指定字符集 

 ------------临时修改字符集

 set character_set_database=utf8;        

 set character_set_client=utf8; 

 set character_set_connection=utf8; 

 set character_set_results=utf8; 

 

 grep -C 前后n行  -A 前n行 -B 后n行

 

19、本地修改

 在windows系统使用git-bash执行脚本时,比如makefile 只有在git-bash中可以模拟linux的特殊符号,执行的脚本中如果还是按照linux特殊

 符号来执行则会报错,比如设置PATH时,linux脚本使用: 而windows使用;  这个时候脚本中的:改成; 才能成功执行

 export CURDIR=/d/meiqia/src/git.meiqia.com/business_platform/territory

 export GOPATH=/d/gopath:/d/meiqia 

 export VENDOR_PATH="D:/gopath/src"

 export VENDOR_PATH=/home/zyx/workspace/gopath/src

 export VENDOR_PATH=/home/zyx/workspace/meiqia/src/git.meiqia.com/business_platform/territory/vendor/

 export CURDIR=/home/zyx/workspace/meiqia/src/git.meiqia.com/business_platform/territory

 

 export CURDIR=/home/zyx/workspace/meiqia/src/git.meiqia.com/business_platform/territory/stand_alone/simular

 export CURDIR=/home/meiqia/territory/stand_alone/simular

 

 go install  产生需要的二进制到gopath/bin下面    有时候需要添加包名或者到main方法下执行

 

 -------测试环境APP10

 export GOROOT=/home/test/go

 export GOPATH=/home/test/gopath

 export CURDIR=/home/test/territory

 export VENDOR_PATH=/home/test/gopath/src

 export PATH=$GOROOT/bin:$PATH

 

  

 

 

 

 

 -----------编译环境meiqia用户

 export CURDIR=/home/meiqia/gopath/src/git.meiqia.com/business_platform/territory

 export VENDOR_PATH=/home/meiqia/gopath/src

 

 /home/zyx/workspace/meiqia/src/git.meiqia.com/business_platform/territory/token_ecdsa_pub.pem

 

git config --global user.email "[email protected]"

git config --global user.name "zhuangyanxu"

 

 

20、本地处理冲突

 git fetch upstream master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp

 

 git diff temp//比较master分支和temp分支的不同

 

 git merge temp//合并temp分支到master分支

 

 git branch -d temp//删除temp

 

21、ubuntu安装deb文件

 sudo dpkg -i xxx.deb 

自动下载依赖为 sudo apt-get install -f

 

22、

dpkg -l | grep qq(查出安装的软件)

使用 sudo dpkg --purge xxx(这里xxx写查出来的软件包名字)

 

23、

territory更新pb之后需要编译一下

新加/data/etc/supervisor/conf.d/territory.conf 配置文件

/date/logs/supervisor    日志目录

/data/apps/territory     需要给territory.exe权限 chmod +x territory

aws s3 cp --recursive bin s3://meiqia/crm-module/territory/bin      编译后上传

aws s3 sync s3://meiqia/crm-module/territory/bin bin                  部署的服务器下载

supervisorctl restart territory

supervisorctl update 修改配置文件需要执行

 

注意~~~ 每次更新时候记得拉一下依赖的组件库

 

24、MySQL

  mysql -h10.102.1.13 -uterritory -pvuoh4oPIb85k5lovToXP -Dterritory            ---------测试环境数据库

  mysql -h10.102.1.13 -ujudge -pbpqJQYNGOxEEQSD1FhTc -Djudge           --------注意-u    -p   后面带的是用户名和密码并且中间没有空格

  

  mysql -h127.0.0.1 -uterritory -pvuoh4oPIb85k5lovToXP -Dterritory 

  mysql -h127.0.0.1 -utri -pY3z4e7NEhi55DjLFA0Xv -D00000000000000000000000000000000  

  mysql -h127.0.0.1 -ujudge -pbpqJQYNGOxEEQSD1FhTc -Djudge

  mysql -h127.0.0.1 -utenant -p6jHi2jnj324p0edL26XG -Dtenant

  

  mysql -hhub.meiqia.com-devops-mysql -uroot -p -Dterritory_test

  

  /etc/init.d/mysql start

  

error 1055:

select version(), @@sql_mode;

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

  

  error 1205 Lock wait timeout exceeded

   show full processlist;  

   然后kill掉相应线程ID

   

   mysql 分页查询时,如果limit 10000,10 会扫描 10010行数据,可以在SQL中添加ID排序并计算出要扫面的起始,

   比如  limit 10000,10   变为   auto_id > 10000 limit 0, 20

   

 25、循环中通过闭包传递给go 协程的变量,可能会导致前面的协程使用该变量时其已经变成了后面循环中的值

 for _, f := range fileNames {

  go func(f string){

  }(f)

  //这种方式可以避免问题        go func(){do(f)}   这种会产生上述问题           

 }

 

26、记得修改pb文件之后需要更新glide的版本号

 

27、GOOS=darwin GOARCH=amd64 go build -o 别名    入口.go             ---------Linux下编译Mac可执行文件

 

28、要注意接口和数据库的命名规范和一致性,这两项的修改会造成较多的问题

 

29、Ubuntu打开其他类型文件命令 xdg-open

 

30、

[pprof]

cpuFile = "cpu.prof"

memFile = "mem.prof"

memRate = 524288

goroutineFile = "goroutine.prof"

goroutineDebug = 2

threadCreateFile = "threadcreate.prof"

threadCreateDebug = 2

blockFile = "block.prof"

blockRate = 1

blockDebug = 2

heapFile = "heap.prof"

heapDebug = 2

 

31、上传文件

target:   

sudo nc -l 12345 | tar -zxvf -      

source:  

sudo tar -zcvf - territory | nc 10.102.3.28 12345

 

32、查看unit test CPU和memory

go-torch

 

33、python generate.py -include territory go erro > outer.go

sudo ln -s /usr/bin/python3.5 /usr/bin/python

sudo apt-get install ubuntu-minimal ubuntu-standard ubuntu-desktop

 

34、proto: duplicate proto type registered: pb.Empty    可能是pb定义的冲突,引入时用别名引入

使用glide时注意 gopath的影响

 

 

35、Nginx

/usr/local/nginx/conf/vhost/   域名

 

编译支持ssl的Nginx  make install会覆盖所有配置  要注意

./configure --prefix=/usr/local/nginx --with-http_ssl_module

make

 

cp /usr/local/nginx/sbin/nginx ~/

cp objs/nginx /usr/local/nginx/sbin/     //新编译出来的时候的路径

 

 

36、比较二进制

md5sum filename

猜你喜欢

转载自blog.csdn.net/weixin_42498050/article/details/81037572
QA