Gerrit的日常

Dovar_66發表於2018-12-20

Gerrit是什麼?

Gerrit實際上一個Git伺服器,它為在其伺服器上託管的Git倉庫提供一系列許可權控制,以及一個用來做Code Review的Web前臺頁面。當然,其主要功能就是用來做Code Review.

如何配置Gerrit使用的SSH

1.使用gitbash檢視是否已經有了ssh金鑰:cd ~/.ssh

2.生成ssh金鑰:

$ ssh-keygen -t rsa -C “你想設定的使用者名稱”複製程式碼

3.生成金鑰後要求設定密碼,可按Enter鍵跳過

4.登入你的Gerrit網站,將生成的.ssh資料夾下的公鑰id_rsa.pub中的內容貼上到setting–SSH Public Keys中即可

Gerrit的日常

5.你可能還需要給ssh新增一個無格式的配置檔案config

Gerrit的日常

config檔案中具體需要寫入什麼配置請詢問你們搭建gerrit服務的同事。完成後你就可以正常使用Gerrit了.

Gerrit的日常使用

使用git命令拉取程式碼,git命令從gerrit專案中獲取,獲取clone地址時選中“clone with commit-msg hook”和“SSH”。開啟gitbash進行程式碼下載。

Gerrit的日常

下載完成後注意檢查commit-msg檔案是否下載成功,如果沒下載到,請自行前往gerrit下載,並放到專案目錄下,如下圖

Gerrit的日常

commit-msg檔案是用於為每次commit自動生成唯一的changeId。

Push命令:git push origin Head:refs/for/branch 這裡的branch是指你想要提交到的分支名

Gerrit使用中可能遇到的問題

  • gerrit通過給每個獨立的commit加上一個唯一的changId來保證有序的程式碼提交和review,多次commit攜帶相同的changid視為對同一次commit的修改,如果commit沒有攜帶changid的話則無法push成功,所以當push失敗的時候第一件事應該是檢查當前的commit是否都帶有changid。如果僅最後一次commit沒有changid,可使用git commit –amend,此命令的作用就是將最新一次commit指向上一次帶有changid的commit,如果含多條commit都沒有changid的話,可以checkout這些commit然後逐條新增changid,或者rebase到最後一次有效的commit然後重新編輯提交.

  • 由於某次commit攜帶的使用者資訊與gerrit網站上的配置不相同而導致push失敗時,使用git命令檢查或更換本地賬號:

      檢視使用者名稱和郵箱地址:    $ git config user.name    $ git config user.email    修改使用者名稱和郵箱地址    $  git config --global user.name  "xxxx"    S  git config --global user.email  "xxxx"複製程式碼

    當然,你也可以直接修改git的配置檔案,開啟全域性的.gitconfig檔案的命令為:vi ~/.gitconfig.

  • 聽說stackoverflow上”如何在vim下儲存並退出”這個問題已經有一百萬+的訪問量了,趕緊記錄下操作:esc退出編輯模式,然後冒號:wq即可.

以下為新增轉載內容:

Git撤銷commit的操作命令: git reset –hard HEAD^

一、新建三個檔案,demo1,demo2,demo3

Gerrit的日常

二、git add 命令提交到暫存區,git reset HEAD demo1就是把提交到暫存區裡的檔案撤銷。

Gerrit的日常

上圖中,執行git reset HEAD demo1就會把demo1從暫存區中撤銷,現在是untracked.

三、git commit 提交本地倉庫

Gerrit的日常

上圖中顯示,git commit把demo2,demo3提交到本地倉庫中。

四、現在想撤銷之前的commit,可以用git reset –hard HEAD^命令

Gerrit的日常

第三步中,先commit demo2,再commit demo3,因此現在的HEAD即是demo3的commit值。

(HEAD是指向最新的提交,上一次提交是HEAD^,上上次是HEAD^^,也可以寫成HEAD~2 ,依次類推)

因此git reset –hard HEAD 就是把最新提交的demo3撤銷掉,撤銷是非常徹底的,本地檔案也會刪除。

有時候使用Git工作得小心翼翼,特別是涉及到一些高階操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如刪除一個分支,我都擔心資料丟失。

不久之前,我在做一些大動作(rebasing)之前,我總是備份整個版本庫,以防萬一。直到最近我才發現git的歷史記錄是不可修改的,也就是說你不能更改任何已經發生的事情。你做的任何操作都只是在原來的操作上修改。也就是說,即使你刪除了一個分支,修改了一個提交,或者強制重置,你仍然可以回滾這些操作。

讓我們來看一些例子:

$ git init$ touch foo.txt$ git add foo.txt$ git commit -m "initial commit"$ echo 'new data' >
>
foo.txt$ git commit -a -m "more stuff added to foo"複製程式碼

你現在看git的歷史記錄,你可以看到兩次提交:

$ git log* 98abc5a (HEAD, master) more stuff added to foo* b7057a9 initial commit複製程式碼

現在讓我們來重置回第一次提交的狀態:

$ git reset --hard b7057a9$ git log* b7057a9 (HEAD, master) initial commit複製程式碼

這看起來我們是丟掉了我們第二次的提交,沒有辦法找回來了。但是reflog就是用來解決這個問題的。簡單的說,它會記錄所有HEAD的歷史,也就是說當你做 reset,checkout等操作的時候,這些操作會被記錄在reflog中。

$ git reflogb7057a9 HEAD@{0
}: reset: moving to b7057a998abc5a HEAD@{1
}: commit: more stuff added to foob7057a9 HEAD@{2
}: commit (initial): initial commit複製程式碼

所以,我們要找回我們第二commit,只需要做如下操作:

$ git reset --hard 98abc5a複製程式碼

再來看一下 git 記錄:

$ git log* 98abc5a (HEAD, master) more stuff added to foo* b7057a9 initial commit複製程式碼

所以,如果你因為reset等操作丟失一個提交的時候,你總是可以把它找回來,除非你的操作已經被git當做垃圾處理掉了,一般是30天以後。

來源:https://juejin.im/post/5c1afd38f265da615705702a