1、每次合入代码提单到phabricator时,需要使用arc小助手新建一个分支,
arc branch GerritWarning
如果先前自己用git branch pha创建的分支pha,在GerritWarning分支上将pha分支的改动合并到要提交的分支上来:
git merge pha
如果在创建pha分支之后,dev分支有过pull操作。由于git 的 commit是按照时间先后顺序来排,此时可以将pha分支自己的提交回退,
git reset HEAD~1
然后重行提交
git commt -am “ message ”
使得自己的commit是最近的,然后切换到GerritWarning分支,将pha分支的内容合并进来,此时自己的提交在GerritWarning分支是是最近的。
2、git 和 gerrit 搭配使用时,push代码时提示:
Gerrit: remote rejected (you are not allowed to upload merges) even though I allowed “Push merge commit” 推送代码失败。此时
出现此问题,是 gerrit 服务器不允许开发线有分叉,只能保持一条主线。reset 到自己提交的节点,执行
git rebase
再手动解决冲突,然后
git add + 解决了冲突的文件
接着
git rebase --continue
最后重新push即可,注意,git rebase出现的冲突解决之后不能执行git commit,而是用git rebase --continue
总之,使用rebase 保持一条线,在知道gerrit的该问题时,在pull的过程中,可以指定合并策略:
git pull --rebase
3、回退指定文件到某一版本
git log hello.py
查看文件的更改commit,找到需要回退的版本的SHA(可使用git log 加上筛选条件来查找).
git reset SHA hello.py
此时工作区的代码文件并没有回退,回退的是暂存区的,checkout出来即可。
git checkout hello.py
此时hello.py即就是回退到SHA的版本中。
方法二:查看到ID之后,直接git checkout SHA hello.py即可,如果是某次更改之前,可以git checkout SHA~1 hello.py
对于路径或者单文件来说,checkout == reset --hard (如果此时reset --hard能使用,只是这么个意思)
将linux 路径共享给windows 的方法:
1. 目录共享(可直接在window下访问)
1) 修改 /etc/samba/ smb.conf 文件 配置,增加需要共享的目录配置
[zhanghang]
comment = zhanghang
path = /home/zhanghang
writable = yes
2)重启samba 服务器
sudo /etc/init.d/smbd restart
2、添加 git 仓库
在linux自己用户目录下创建目录UTCA
mkdir UTCA
cd UTCA
git init //初始化仓库
修改配置文件,将.git/config文件的最后添加
[receive]
denyCurrentBranch = ignore
在本机git bash中添加远端仓库:
git remote add UTCA //10.11.157.147/zhanghang/code/SDR_CODE/UTCA
//add后的UTCA表示仓库名,可以任意取
将本机的代码同步到远端仓库:
git push UTCA localBranch:remoteBranch
//将本地分支代码同步到远端分支remoteBranch(名称任意取,建议与本地保持一致)
git remote -vv //查看远端仓库的信息,直接clone下来的代码,默认的远端仓库名origin
应该可以看到两个远端仓库
UTCA //10.11.157.147/zhanghang/code/SDR_CODE/UTCA (fetch)
UTCA //10.11.157.147/zhanghang/code/SDR_CODE/UTCA (push)
origin ssh://[email protected]:29418/sdr/UTCA (fetch)
origin ssh://[email protected]:29418/sdr/UTCA (push)
远端仓库此时有remoteBranch和master分支(git branch此时看不到master分支,maseter分支下没有任何东西)
git status可以看到remoteBranch分支
git checkout remoteBranch //从仓库里检出所有代码到当前工作区
之后改动只需在本地commit之后,执行
git push UTCA localBranch:remoteBranch //然后在linux上编译
注意:如果远端仓库正好在要push的分支,在本地执行push操作之后,远端的工作区不会显示推送的内容,
而是保存原来的内容,所以此时在远端上使用git status查看push中的修改文件会是暂存区中修改状态。
执行 git reset --hard HEAD 即可将推送的内容同步到工作区。
[diff]
tool = araxis
[difftool "araxis"]
path = D:\\Program Files\\Araxis\\Araxis Merge\\Compare.exe
[merge]
tool = araxis
[mergetool "araxis"]
path = D:\\Program Files\\Araxis\\Araxis Merge\\Compare.exe
[mergetool]
keepBackup = false
之后只用执行 git difftool 和 git mergetool
注意remote local的排列顺序,remote表示要merge进来的,local表示当前的工作目录
然后就可以用git difftool比较两个节点之间的差异了:
git difftool sha1 sha2
或者连个节点中某个文件的差异:git difftool sha1 sha2 filename
filename 支持将文件拖入到git bash里边,能够自动转换为相应的绝对路径。
当merge有冲突时,使用git mergetool自动打开冲突的文件,进行手动的合并操作。
有时候需要通过连接终端来连接服务器上来看代码,这时候就只能全文本操作了。
在windows上,git的默认编辑工具也是vim,配置文件为:D:\Program Files\Git\etc\vimrc
默认的不显示行号,需要添加行号:
set nu
默认的行号的显示颜色为黄色,比较模糊难看,重新配置:
highlight LineNr ctermfg=darkblue #将前景色配置为深蓝色
将当前行设置为绿色:
set cursorline
highlight CursorLine ctermbg=green
将当前光标所在的列也设置为绿色,这样光标就在十字的交汇处:
set cursorcolumn
highlight CursorColumn ctermbg=green
使用vimdiff 选择窗口作为当前的窗口:ctrl + w + w.
]c 跳到下一个不同处,[c 跳到上一个不同处。
qa 关闭所有的窗口退出。
四、gerrit服务器与git
git服务器上下载代码,最好用git协议,而且在使用
ssh-keygen -t rsa -C "[email protected]" 生成密钥时,最好把密码留为空,这样每次合入代码不需要输入密码,比较方便。
如果使用htttp协议,需要每次都输入密码,比较麻烦。这个密码在gerrit 的 Http PassWord 项的 PassWord里边,是个可以随时更改的密码,支持复制。