Gerrit的平常

Gerrit是什麼?

Gerrit實際上一個Git服務器,它爲在其服務器上託管的Git倉庫提供一系列權限控制,以及一個用來作Code Review的Web前臺頁面。固然,其主要功能就是用來作Code Review.html

如何配置Gerrit使用的SSH

1.使用gitbash查看是否已經有了ssh密鑰:cd ~/.sshgit

2.生成ssh密鑰:vim

$ ssh-keygen -t rsa -C 「你想設置的用戶名」
複製代碼

3.生成密鑰後要求設置密碼,可按回車鍵跳過bash

4.登陸你的Gerrit網站,將生成的.ssh文件夾下的公鑰id_rsa.pub中的內容粘貼到setting--SSH Public Keys中便可服務器

5.你可能還須要給ssh添加一個無格式的配置文件configssh

config文件中具體須要寫入什麼配置請詢問大家搭建gerrit服務的同事。完成後你就能夠正常使用Gerrit了.網站

Gerrit的平常使用

使用git命令拉取代碼,git命令從gerrit項目中獲取,獲取clone地址時選中「clone with commit-msg hook」和「SSH」。打開gitbash進行代碼下載。spa

下載完成後注意檢查commit-msg文件是否下載成功,若是沒下載到,請自行前往gerrit下載,並放到項目目錄下,以下圖code

commit-msg文件是用於爲每次commit自動生成惟一的changeId。cdn

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^

1、新建三個文件,demo1,demo2,demo3

2、git add 命令提交到暫存區,git reset HEAD demo1就是把提交到暫存區裏的文件撤銷。

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

3、git commit 提交本地倉庫

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

4、如今想撤銷以前的commit,能夠用git reset --hard HEAD^命令

第三步中,先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 reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 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天之後。

相關文章
相關標籤/搜索