Git tips one

in SCM

软件版本:

1
git version 2.10.1

Git克隆单个分支:

1
2
3
4
5
6
7
8
9
$ git clone 地址 —branch br1 —single-branch dir
只能看到单独的br1,不能checkout到其他分支。空间占用比较小,适合长期分支开发。
原理:
$ git remote -v
remote.origin.fetch=+refs/heads/br1:refs/remotes/origin/br1
恢复完整代码库:
$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
然后执行
$ git pull

Git对.gitignore文件处理:

1
2
3
4
5
6
已经增加到.gitignore文件里面的目录or文件会被git忽略。
如果本次需要修改一个忽略文件:
$ git status --ignored
--ignored -- show ignored files as well
$ git add -f
--force -f -- allow adding otherwise ignored files

Git commit相关:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 空提交,只在特殊情况下使用(产生一个新的commit点)
$ git commit
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
# 解决方法
$ git commit -m "empty commit" --allow-empty


# 不带message提交(慎用,message很重要)
$ git commit
Aborting commit due to empty commit message.
# 解决方法
$ git commit --allow-empty-message


把暂存区的变更合并到最新的版本里面,不会产生新的版本(同时可以更新log message);
$ git commit --amend
PS:已经进远端代码库的版本不允许使用--amend进行修改!!!

Git merge相关:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
conflict处理:
# 使用自己/他人的文件替换冲突文件
$ git checkout --ours conflict.file
$ git checkout --theirs conflict.file
# 增加冲突文件到版本库
$ git add conflict.file
$ git commit


查看merge commit点已经解决的冲突文件:
$ git log --cc
--cc -- combined diff format for merge commits


分支直接合并建议使用:git merge
同一分支dev合并 or Temp分支合并建议使用:git rebase 或者 git cherry-pick
PS:以上两种都可以合并代码workspace最终文件一样,但是对git来说有不同:merge是环形,rebase和cherry-pick是直线
PS:需要注意的是rebase会是自己和他人角色发生反转,解决conflict file的时候需要留心。

Git rm相关:

1
2
3
4
5
$ git rm weilong.txt
删除workspace和index里面的weilong.txt文件

$ git rm --cached weilong.txt
删除index里面的weilong.txt文件,workspace里面的文件保留

Git log相关:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ git log -5
查看最新的5次版本

$ git log --author=weilong.wang
查看weilong.wang提交的版本

$ git log --oneline
一行显示一个版本信息(简化显示版本信息)

$ git log -p
显示每个版本的具体修改

$ git log --numstat
显示每个版本 修改文件的行数(5 1 weilong.txt 这个文件本次增加了5行同时也删除了1行)

$ git log --since="1 month ago"
显示最近一个月的日志
$ git log --after="2016-07-01"
显示7月1号至今的日志
$ git log --before="2 days"
显示2天之前的日志
$ git log --until="2016-07-10T14:30"
显示7月10号14:30之前的日志


$ git log --graph
图状显示版本 (正常提交时线形的,merge是环形的)

可用于判断分支是否合并:
$ git log br1 ^master
显示只在分支br1不在master上的commit点
$ git log master ^br1
显示只在分支master不在br1分支上的commit点

logo

Comment and share

背景:

公司目前使用Gerrit作为代码库托管和Code review平台。 使用Jenkins作为自动化构建和持续集成平台。

流程设计:

logo

  1. Dev本地开发,然后上传patch到gerrit:
  • 同时触发Jenkins CR_Job来做build
  • 增加Code reviewers来做review
  1. 再上述都成功的基础上,reviewer点击+2:
  • 同时触发Jenkins Submit_Job来做build和test:
    • 如果成功,自动合并本次patch到代码库
    • 如果失败,返回-1
  1. Nightly test Job:
  • 每晚20:00触发,获取当前最新的代码进行build和test

测试分级:

  • CR_Job:
    • 获取触发patch的代码,合并最新分支代码,进行build
    • 快速反馈,主要检查patch合并是否有冲突和build是否能跑通
  • Submit_Job:
    • 获取触发patch的代码,合并最新的分支代码,进行build和测试
    • 根据每天代码提交次数来确定时间和test cases
  • Nightly_Job:
    • 获取当前最新代码进行build和test
    • 一般跑12h,第二天早上出测试报告邮件

软件环境:

软件 版本
Jenkins 1.567
Gerrit 2.8.6
  • Jenkins插件:
插件名 版本 作用
Multijob plugin 2.11.1 定义pipeline
Gerrit Trigger 1.13 监控Gerrit event

搭建步骤:

  1. 安装配置Jenkins Gerrit Trigger插件:官方wiki
    logo
  2. 安装Jenkins Multijob plugin:官方wiki
    logo
  3. 配置CR_Job:
    logo
  4. 配置Submit_job:
    logo
  5. 配置Nightly_Job:
    logo

PS

  1. 以上内容都是基于公司研发现状定制的,建议各位根据自己的情况进行定制。
  2. 因为历史遗留原因,当前使用的版本比较旧。 例如如果升级到jenkins2.x版本的话pipeline就不需要借助插件来实现了。

Comment and share

  • page 1 of 1
Author's picture

Weilong

    Write something about work-life:

PM


Shenzhen