<<<<<<< HEAD
=======
>>>>>>> 28ed2608dbc97aea773f3fef616ad366265bbb58),
如果同时修改了同一个文件,且为新增,不冲突,可以都保留,即如果同时修改了配置文件保留2份。再运行代码保证没错
可以直接使用git commit -am "<message>",将所有修改,但未进stage的改动加入stage,并记录commit信息。(某种程度上相当于git add和git commit -m的组合技,前提是被改动文件已经是tracked)
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 push xxx xxx -force 强推
先pull再push,pull相当于从远程先做git fetch,再执行git merge :取回远程主机某个分支的更新,再与本地的指定分支合并。(vim模式保存退出,没有conflict的冲突git自动merge)
如遇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
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 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是否翻墙可以使用
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