小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Git & Gitlab 使用指南 | 淡水網(wǎng)志

 hello_worldw6 2017-08-11


1. 關于 Git 你應該知道的東西

Git 是一個分布式版本控制系統(tǒng)。分布式的意思是,每個人電腦上都是一份完整的代碼庫,包含了所有的代碼提交歷史。
由于 Git 分布式的特點,在沒有網(wǎng)絡的情況下,依然可以自由地將代碼提交的本地的代碼庫中,等網(wǎng)絡恢復后再推送到服務器,開發(fā)更加靈活和自由。

重要概念:本地一個代碼庫,對本地文件的所有操作,最后都是提交到這個代碼庫中。同時可以設置多個遠程(remote,默認的remote通常用origin表示),當你要將代碼更新到服務器上時(稱作push),就通過設置的remote,更新到指定的服務器。

關于多個remote:例如需要同時將代碼同步到多個代碼管理倉庫,例如 Github 和自己公司中內(nèi)網(wǎng)的 Gitlab。那么可以將默認remote 設置為公司自己的源碼管理服務器,同時設置另外一個remote為 Github。這樣即可以將代碼提交到自己公司的 Gitlab,同時也可以提交到 Github。

1.1 一些術語

  • Fetch(獲?。瑥倪h程代碼庫更新數(shù)據(jù)到本地代碼庫。注意:Fetch 只是將代碼更新到本地代碼庫,你需要檢出(check out)或與當前工作分支合并(merge)才能在你的工作目錄中看到代碼的改變。
  • Pull(拉取),從遠程代碼庫更新數(shù)據(jù)到本地代碼庫,并與當前工作分支合并,等同于 Fetch + Merge。
  • Push(推送),將本地代碼庫中已提交(commit)的數(shù)據(jù)推送到指定的 remote,沒有 commit 的數(shù)據(jù),不會push
  • HEAD,指向你正在工作中的本地分支的指針
  • Master 分支:主分支,所有提供給用戶使用的正式版本,都在這個主分支上發(fā)布。關于分支管理的擴展閱讀
  • Tags(標簽):用來記錄重要的版本歷史,例如里程碑版本
  • Origin:默認的 remote的名稱
  • Git clone(克隆版本庫):從服務端將項目的版本庫克隆下來
  • Git init(在本地初始化版本庫):在本地創(chuàng)建版本庫的時候使用

1.2 工作流程

  1. 對代碼進行修改
  2. 完成了某項功能,提交(commit,只是提交到本地代碼庫),1-2可以反復進行,直到覺得可以推送到服務器上時,執(zhí)行3
  3. 拉取(pull,或者用獲取 fetch 然后再手動合并 merge)
  4. 如果存在沖突,解決沖突
  5. 推送(push),將數(shù)據(jù)提交到服務器上的代碼庫

1.3 Gitlab 可以做什么

Gitlab 是 Git 服務端的集成管理平臺,提供了:

  1. 代碼托管服務
  2. 訪問權限控制
  3. 問題跟蹤,bug的記錄、跟蹤和討論
  4. Wiki,項目中一些相關的說明和文檔
  5. 代碼審查,可以查看、評論代碼

目前官方?jīng)]有中文版,有個人漢化版本,一些地方對中文的支持較不好(詳見后續(xù)章節(jié)),如果有需要中文翻譯的地方,可以自己修改對應的代碼。

怎么安裝和維護 Gitlab,請看我另外的兩篇博客


2. 安裝與配置

需要安裝以下工具:

Git 圖形界面操作工具

TortoiseGit只有 Windows 版本,有32位和64位版本,請根據(jù)自己的電腦選擇相應的版本,同時下載對應版本的中文語言包。

2.1 設置 TortoiseGit 中文語言

右鍵 -> TortoiseGit -> 設置

2.2 設置用戶名和郵箱

點擊 Git 選項,然后點擊右側的全局,最后輸入用戶名和郵箱即可。這里的用戶名和郵箱,將作為以后提交數(shù)據(jù)到Git服務端的作者信息,請一定要設置。

2.3 設置保存密碼

默認情況下,Git 客戶端每次與服務器交互,都需要輸入密碼。但是我們可以配置保存密碼,只需要輸入一次,就不再需要輸入密碼。

選擇編輯全局.git/config,在末尾添加

1
2
[credential]
helper = store

2.4 配置 SSH Key

Git 可以通過 HTTP 和 SSH 的方式連接,如果要使用SSH的方式連接,需要確保自己的 IP 有訪問 Gitlab 服務器 22 端口的權限。

通過 SSH 的方式,可以不用每次與服務器進行交互時都需要輸入用戶名和密碼。如果是 IDE 中的 Git 插件,則有保存密碼的功能。

2.5 生成 SSH Key

2.5.1 在 Git Bash 命令行下生成

鼠標右鍵 -> Git Bash

ssh-keygen -t rsa -C "uasername@mail.com"

生成后的公鑰會存放在

C:/Users/You_User_Name/.ssh/id_rsa.pub

2.5.2 在可視化工具下生成

注意:使用這種方法生成時,默認會用計算機名,作為生成的 SSH Key 的名稱,如果計算機名包含中文,則會因編碼問題而出錯。這時候可以使用在 Git Bash 命令行下生成的方法。

鼠標右鍵 -> Git Gui

幫助 -> Show SSH Key

點擊 Generate Key,彈出一個對話框,提示輸入 passphrase(密碼短語),需要輸入兩次。意思就是以后提交數(shù)據(jù)到服務端,只要輸入這個密碼短語就可以了。這里可以為空,直接點OK,這樣,以后就不需要輸入任何密碼。但建議還是要輸入密碼短語。

復制 SSH Key 的公鑰

2.6 在 Gitlab 上配置 SSH Key

配置好 SSH Key 以后提交代碼,可以不用輸入密碼。點擊右上角的資料設置 -> SSH 密鑰 -> 增加 SSH 密鑰

粘貼剛剛復制的 SSH Key 公鑰,標題為可選,不寫會自動生成

2.7 配置 Gitlab

2.7.1 上傳個人頭像

請上傳個人頭像,主要是為了易于識別用戶。

2.7.2 設置郵件通知

如果不想收到郵件通知,可以設置關閉。但是建議開啟郵件通知。


3. Git 基本功能簡介

3.1 我是項目的創(chuàng)建者,我要創(chuàng)建項目

3.1.1 在 Gitlab 上執(zhí)行創(chuàng)建新項目

  1. 取一個恰當?shù)拿帧?/li>
  2. 選擇正確的命名空間。所有人都可以在自身用戶名下建立新項目,但是群組命名空間下的項目只能由具有相應權限的人建立。
  3. 填寫詳細的項目描述
  4. 選擇可見等級

項目創(chuàng)建完成后,需要初始化,請保留該頁面,在必要時復制項目的 SSH 地址

Git 同時支持 SSH 和 HTTP 的方式訪問,SSH 可以不用輸入密碼。

3.1.2 初始化項目

以下這些操作,需要在項目的目錄下進行。請注意如果你的項目文件夾路徑包含中文,請使用 TortoiseGit 工具來操作,不要使用 Git Gui,否則會出現(xiàn)錯誤。

3.1.3 創(chuàng)建一份排除版本控制的文件類型清單

在項目中,實際上有很多文件是不需要版本控制的,例如編譯過程中生成的中間文件 .obj,IDE 的配置文件(Intellj IDEA 的 .idea 文件夾),編譯生成的文件(/out/ 和 /bin/ 文件夾),Python的.pyc文件,像這些類型的文件我們可以設置過濾,避免導致版本庫很大。

我們只要在項目的目錄下,放一個 .gitignore 文件就可以了。

這份 .gitignore 文件,排除了.idea/,out/,bin/ 文件夾,以及所有類型為 .pyc 的文件

Github 上面有一個 .gitignore 模板的項目

如果后續(xù)開發(fā)中有新類型的文件要排除,可以在文件上

右鍵 -> TortoisGit -> 刪除并添加到忽略列表

3.1.4 創(chuàng)建一份 README.md 文件

README.md 文件用來填寫項目的描述和說明,會直接顯示在 Gitlab 的項目文件頁面,方便直接查看項目的描述信息。
.md 是 Markdown 格式的文件,關于 Markdown,可以查看作業(yè)部落

3.1.5 在自己的電腦上創(chuàng)建版本庫

在項目目錄下

右鍵 -> Git init here

這樣就可以在當前文件夾創(chuàng)建一個 Git 版本控制的庫,同時創(chuàng)建一個分支 master。

該操作會在這個文件夾下自動創(chuàng)建一個 .git 的隱藏文件夾,所有關于版本控制的信息都放在這個文件夾下面的文件中。

3.1.6 提交代碼到本地版本庫

右鍵 -> Git 提交

選擇要提交的文件,并填寫描述信息

3.1.7 設置 remote

將項目的 SSH 地址復制過來,并將默認的 remote 名稱設置為 origin

如果提示是否關閉獲取標簽,也選擇 No

3.1.8 推送到服務器上的版本庫(push to remote)

如果提示該服務器主機是未知的,請選擇是,添加到已知主機列表

到這一步項目的代碼庫已創(chuàng)建完成,可以去 Gitlab 上查看項目

3.1.9 創(chuàng)建開發(fā)分支

默認情況下,master 分支在 Gitlab 中是保護分支。保護分支只允許 Master 級別以上的用戶才能 push 和 delete。而普通的開發(fā)人員(Developer 級別)是無法提交代碼到 master分支的。

這么設計的原因是:我們通常將 master 分支作為穩(wěn)定版本發(fā)布的分支,在這個分支上的代碼都是最新可用版本。而日常的開發(fā),通常在開發(fā)分支 develop 上進行。等到功能穩(wěn)定后,再由項目的管理員合并到 master 分支上。

請在 Gitlab 中操作

3.2 我是開發(fā)人員,我要獲取和提交代碼

3.2.1 克隆項目

在一個空白的項目文件夾下,右鍵 -> Git克隆。

如果你已配好了SSH Key,請輸入項目的SSH地址,這樣就可以不用再輸入密碼。Git 支持 SSH 和 HTTP 的方式訪問,這里也可以使用 HTTP 地址。

如果提示該服務器主機是未知的,請選擇,添加到已知主機列表

3.2.2 檢出開發(fā)分支

Git 克隆默認會檢出 master 分支,但是我們需要在開發(fā)分支中工作。

檢查當前所在的分支

注意:切換分支的時候,如果有未提交的內(nèi)容,需要先提交,否則無法切換分支。如果不想提交可以用貯藏(stash)

到這一步完成,你就可以在本地自由地做開發(fā)了

3.2.3 從服務器的代碼庫更新數(shù)據(jù)

請注意,選擇拉取功能,就不需要再執(zhí)行合并。如果是獲取,就需要再執(zhí)行一次合并。兩者的區(qū)別在于,拉取省略了合并的細節(jié)。

3.2.4 沖突與解決

出現(xiàn)無法推送

試試拉取,但拉取的時候出現(xiàn)沖突,Merge conflict in test.html

這時候需要先解決沖突

解決方法有兩種,一種是打開沖突的文件,手動刪除沖突標記

上面那部分的內(nèi)容是本地代碼庫,HEAD 所指向分支的代碼,下面那部分的內(nèi)容是服務器端代碼庫的內(nèi)容

1
2
3
4
5
<<<<<<< HEAD
<pre>This is for test.</pre>
=======
<p><a>This is for test.</a></p>
>>>>>>> 5f065407ecf91415f109c882119291f0be37b07a

只需要決定最后的內(nèi)容,然后刪除沖突標記,例如,只剩下

1
<pre>This is for test.</pre>

刪除完沖突標記后,需要右鍵空白的地方,點擊 Git Add all files now

另一種方法是使用 TorgoiseGit 的工具

雙擊沖突的文件

點擊保存

不管使用哪種方法,最后都要執(zhí)行的兩步操作是提交推送

提交

推送

當成功推送到服務器的代碼庫后,沖突才算真正解決

3.2.5 提交和推送代碼到服務器的版本庫

請查看 3.2.3 和 3.2.5,注意選擇正確的分支。

請注意:只有項目的 master 權限或者 owner 權限的人才能將代碼推送到保護分支中,master 分支默認是保護分支。
假如自己沒有推送到保護分支的權限時,你可以將代碼提交到,如 develop 分支中(或者自己建立的分支中),等 develop 分支的代碼穩(wěn)定后,然后在 Gitlab 的項目地址中,發(fā)起一個 merge request 請求,系統(tǒng)會發(fā)送郵件通知對應的人執(zhí)行合并操作。這樣就可以將代碼合并到保護分支中(如 master 分支)

發(fā)起合并請求

選擇需要合并的分支,點擊“比較分支”(需要先比較分支,可以查看到這兩個分支的差異)

描述分支合并請求,然后指派給項目的管理員,項目管理員會收到合并請求的郵件

3.3 分支與標簽

3.3.1 創(chuàng)建分支與標簽

分支可以基于任意提交(commit)、已有分支、已有標簽中創(chuàng)建。

當你要做實驗,或者開發(fā)新功能,修正bug時,都可以通過創(chuàng)建分支來安全的處理。這樣就不會影響正常的開發(fā),當完成的時候,再合并回去。

創(chuàng)建完分支后,記得切換到正確的分支中去工作。

標簽是只讀的,通常只用來記錄特定的歷史時刻,如里程碑版本等,這是為了方便以后檢出特定版本的代碼。

3.3.2 推送分支或標簽到服務器的版本庫

使用推送命令,可以將本地版本庫中的分支推送到服務器的版本庫中。如果要推送標簽,請勾選包含標簽。

3.3.3 分支合并

選擇要合并到當前工作分支中的分支,例如當前所在的分支是 master,選擇 develop,則會將 develop 中的代碼合并到 master 中。

合并分支有可能會出現(xiàn)沖突,解決沖突的方法請參見 3.3.4


4 Gitlab 基本功能

4.1 為項目寫 WiKi

WiKi 可以放項目的相關說明文檔,包括部署手冊,使用手冊等等。

Gitlab 的 Wiki 使用了 Markdown 格式(是一種輕量級標記語言,可以使用易讀易寫的純文本格式編寫出排版漂亮的文檔)
簡易入門請看作業(yè)部落

4.2 查看項目的標簽信息

在儀表盤中,點擊項目

5 高級功能

5.1 從SVN遷移到Git

Git 最為重要的特性之一是名為 git svn 的 Subversion 雙向橋接工具。該工具把 Git 變成了 Subversion服務的客戶端,從而可以將 SVN 的代碼庫遷移到 Git,同時保留提交日志。

使用 TortoiseGit 的 Git 克隆,選擇從 SVN 版本庫

將代碼克隆下來后,再設置下 Git 代碼庫的 remote,然后推送過去就可以了。

5.2 從 TFS 遷移到 Git

需要使用工具 git-tfs,下載地址在這里

https://github.com/git-tfs/git-tfs/releases

請注意 v0.20.0 版本不支持 TFS 服務器是 2008 版本,如果是 TFS 2008,請選擇 v0.19.2。

需要將 git-tfs 文件目錄添加到環(huán)境變量。

還需要再安裝 TFS Team Explorer。如果服務器是TFS 2008版本,必須確保自己的電腦上只能安裝 TFS Team Explorer 2008,如果安裝了 TFS Team Explorer 2013,則仍然會提示不支持 TFS 2008,無法正確使用 git-tfs。可以切換到虛擬機中,只安裝 TFS 2008 中。

在 Git Bash 中輸入如下命令

git-tfs clone http://192.168.8.25:8080 $/test_project

test_project 為項目在 TFS 上的名稱,http://192.168.8.25:8080 為 TFS 的服務器地址。

5.3 比較版本差異

右鍵,Tortoise Git -> 顯示日志

按 Ctrl 鼠標左鍵選擇兩個版本,右鍵選擇比較差異

右鍵選擇要比較差異的文件,選擇比較差異

TortoiseGit 可以比較 Word 文件的差異

文本文件的差異比較是這樣的

5.4 刪除分支

當我們將分支合并到主分支,或者放棄該分支的時候,可以對分支進行刪除操作。

在 TortoiseGit 上進行分支刪除操作非常簡單,首先打開 “CheckOut/Switch” 對話框,通過 “Switch to Branch” 更多按鈕打開分支列表,或者通過菜單 “Browser References” 打開分支列表(默認該菜單是隱藏的)。選擇相應的分支,單擊右鍵,選擇刪除。

注意:

  1. 刪除分支,既可以刪除本地分支,也可以刪除遠程分支。
  2. 如果刪除遠程分支,推送后,服務器上對應的分支會被刪除。當其他開發(fā)者更新數(shù)據(jù)后,其對應的本地分支并不會刪除。
  3. 在刪除遠程分支的時候,本地分支并不會刪除,這也說明了本地分支與遠程分支并無從屬關系。

5.5 重置代碼到以前的版本

當我們發(fā)現(xiàn)當前的代碼有問題,想回退到之前的版本時,可以使用重置版本。在項目目錄下,

右鍵 -> TorgoiseGit -> 顯示日志

進入日志信息窗口,選擇指定的版本

右鍵 -> 重置到這個版本

5.5.1 重置類型,soft, mixed, hard 的區(qū)別

soft 不改動工作區(qū)和索引

假設有一些 commits

A - B - C (master)

HEAD 指向 C, 并且暫存區(qū)(stage,或稱為 index)matches C.

當使用 git reset --soft B 時,master 和 HEAD 指向 B,但是依然保留了 C 添加跟蹤的文件,此時會將這些文件放入暫存區(qū)中,顯示為已緩存。同時工作區(qū)中修改的文件,顯示為未緩存。

mixed 保持工作區(qū)不變,重置索引

當使用 git reset --mixed B 時,master 和 HEAD 指向 B,這時候 C 添加跟蹤的文件仍然會在,但是會顯示為未緩存(不是版本控制),而當前工作目錄中的修改內(nèi)容,仍然會在,顯示未緩存的狀態(tài)

(如果不知道怎么選,默認使用 mixed)

hard 重置索引和工作區(qū)(丟棄所有本地變更)

當使用 git reset --hard B 時,C 添加跟蹤的文件,以及當前工作目錄中的修改內(nèi)容,都會丟失。


6 Eclipse 中使用 EGit

6.1 檢出項目

File/Import

6.2 更新和推送數(shù)據(jù)

6.2.1 獲取數(shù)據(jù)(fetch)

項目右鍵 -> Team -> Remote -> Fetch From

Gerrit 是基于 Git 的代碼審核軟件

選擇遠程代碼庫

自定義選擇要獲取的遠程分支,該圖是遠程倉庫中的所有

fetch 只是把服務端的代碼更新,放到本地的代碼庫中,還需要與本地分支合并,才能真正將代碼更新到工作目錄中。

分支的合并也是在這里操作,注意上圖中,當前是 master,然后要把 origin/master 合并到 master 中

1
2
squash:不創(chuàng)建新的 commit
pull = fetch + merge

6.2.2 推送(push)

如果要刪除分支,也可以在這里操作,Add delete ref specification

6.2.3 Fetch from Upstream, Push to Upstream

Git 可以同時設置多個遠程分支,這里的 Upstream 可以簡單的理解成是默認的遠程分支,因為代碼的版本歷史,就像溪流不斷向前,因此把代碼源稱為 Upstream(因為本地的代碼 clone 自這里)。

6.3 解決沖突

選擇 Team -> Merge Tool

  • 第一項是將GIT自動合并過的文件和服務器端文件進行對比
  • 第二項是用本地最新版本的文件和服務器端文件進行對比,建議用此項

修改左邊的本地數(shù)據(jù),修改好后 Ctrl+S 保存文件就可以了。這時候再次查看文件,沖突標記已經(jīng)自動去掉。

1
2
3
4
5
<<<<<<< HEAD
=======
>>>>>>> remote

然后右鍵點擊此沖突文件

選擇 Team -> Add to index 

再次將文件加入索引控制,此時文件已經(jīng)不是沖突狀態(tài),并且可以進行提交并 push 到服務器端。一定要重新 commit,并 push 到服務端,才算真正解決沖突。

6.4 分支和標簽

創(chuàng)建分支

創(chuàng)建標簽

6.5 reset 到某個版本

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多