本人主要记录工作中常用的git 场景。
(1)场景一:拉取指定commitid的代码
需要将开发所用git库代码提交至正式云上,开发git库上已经commit多次,而在云上需要统计代码量,所以在云上需新建最原始的代码,提交后,再将最新代码提交至云上。针对上述场景,需要首先fetch开发库git第一次commitid对应的代码,提交至云上之后,然后在fetch最新commitid代码,然后在提交至云上,这两次提交就可以统计出代码量。
方法一操作如下:
# init
git init
# add a remote
git remote add [remote_name] [remote-url]
# fetch a commit (or branch or tag) of interest
git fetch [remote-url] [sha1-of-commit-of-interest]
# reset this repository's master branch to the commit of interest
git reset --hard FETCH_HEAD
在试验之后,上述操作有时会执行错误,显示如下 no such remote ref。 而在git lab 相应的commitid是存在的,具体原因还未搞明白。
如果上述方法无法操作成功,则采用方法二:
$ git clone [remote-url]
$ git reset --hard $commitid
首先clone 整个项目,然后在reset至某个commitid。
方法一有时会错误,经测方法二无问题,可执行。
(2)结合Gerrit
gerrit是免费的code review工具,所以关系如右所示,Git reomte ->gerrit -> 本地,本地push的代码首先push 到gerrit,gerrit进行Verified和code review通过之后,gerrit会push 到git远程仓库。
(1)在进行git push时 分支下面需具有commit-msg,
使用ls命令检查该文件是否存在:
$
cd
project_dir
$
ls
.git
/hooks/commit-msg
|
如果该文件不存在,则按照 git push 时产生的提示信息,获取该文件:
$
scp
-p -P 29418 liux@gerrit.xxxxx.com:hooks
/commit-msg
${gitdir}
/hooks/
|
上面的命令可以直接从 git push 产生的错误信息中复制出来.
如果要手敲该命令,别忘了把用户名换成自己的.
(2)打tag
git tag -a vxxxxx -m 'xxxxxxx'
git push origin --tags
(3)git push
由于所有开发都在dev分支上进行,所有进行push时需指定push 的branch。
git push origin dev:refs/for/dev