gitlab图形化使用教程(测试过)
原文:http://www.restran.net/2016/02/23/git-and-gitlab-guide/?utm_source=tuicool&utm_medium=referral
去年小組在從 SVN 和 TFS 遷移到 Git 的過程中整理了這份文檔,面向的用戶是對 Git 和 SVN 可能都不是很了解的人。看到自己寫了這么多,于是就拿出來分享下,有些東西可能寫得比較淺,有錯誤還請指正。
1. 關于 Git 你應該知道的東西
Git 是一個分布式版本控制系統。分布式的意思是,每個人電腦上都是一份完整的代碼庫,包含了所有的代碼提交歷史。由于 Git 分布式的特點,在沒有網絡的情況下,依然可以自由地將代碼提交的本地的代碼庫中,等網絡恢復后再推送到服務器,開發更加靈活和自由。
重要概念:本地一個代碼庫,對本地文件的所有操作,最后都是提交到這個代碼庫中。同時可以設置多個遠程(remote,默認的remote通常用origin表示),當你要將代碼更新到服務器上時(稱作push),就通過設置的remote,更新到指定的服務器。
關于多個remote:例如其他公司的開發人員,在自己的公司中開發代碼,將默認remote設置為公司自己的源碼管理服務器,同時設置另外一個remote為移動的源碼服務器。這樣即可以將代碼提交到自己公司的服務器,同時也可以提交到移動的服務器。
1.1 一些術語
- Fetch(獲取),從遠程代碼庫更新數據到本地代碼庫。?注意?:Fetch 只是將代碼更新到本地代碼庫,你需要檢出(check out)或與當前工作分支合并(merge)才能在你的工作目錄中看到代碼的改變。
- Pull(拉取),從遠程代碼庫更新數據到本地代碼庫,并與當前工作分支合并,等同于 Fetch + Merge。
- Push(推送),將本地代碼庫中已提交(commit)的數據推送到指定的 remote,沒有 commit 的數據,不會push
- HEAD,指向你正在工作中的本地分支的指針
- Master 分支:主分支,所有提供給用戶使用的正式版本,都在這個主分支上發布。?關于分支管理的擴展閱讀
- Tags(標簽):用來記錄重要的版本歷史,例如里程碑版本
- Origin:默認的 remote的名稱
- Git clone(克隆版本庫):從服務端將項目的版本庫克隆下來
- Git init(在本地初始化版本庫):在本地創建版本庫的時候使用
1.2 工作流程
1.3 Gitlab 可以做什么
Gitlab 是 Git 服務端的集成管理平臺,提供了:
目前官方沒有中文版,有個人漢化版本,一些地方對中文的支持較不好(詳見后續章節),如果有需要中文翻譯的地方,可以自己修改對應的代碼。
怎么安裝和維護 Gitlab,請看我另外一篇博客?CentOS 6.5 Minimal 安裝 Gitlab 7.5
2. 安裝與配置
需要安裝以下工具:
- Git(Git 主程序)?http://git-scm.com/
Git 圖形界面操作工具
- SourceTree?https://www.sourcetreeapp.com/
- TortoiseGit?https://code.google.com/p/tortoisegit/wiki/Download?tm=2
TortoiseGit只有 Windows 版本,有32位和64位版本,請根據自己的電腦選擇相應的版本,同時下載對應版本的中文語言包。
2.1 設置 TortoiseGit 中文語言
右鍵 -> TortoiseGit -> 設置
?
2.2 設置用戶名和郵箱
點擊?Git?選項,然后點擊右側的?全局?,最后輸入用戶名和郵箱即可。這里的用戶名和郵箱,將作為以后提交數據到Git服務端的作者信息,請一定要設置。
2.3 設置保存密碼
默認情況下,Git 客戶端每次與服務器交互,都需要輸入密碼。但是我們可以配置保存密碼,只需要輸入一次,就不再需要輸入密碼。
選擇?編輯全局.git/config?,在末尾添加
?[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@139.com"
生成后的公鑰會存放在
C:/Users/You_User_Name/.ssh/id_rsa.pub2.5.2 在可視化工具下生成
注意:使用這種方法生成時,默認會用計算機名,作為生成的 SSH Key 的名稱,如果計算機名包含中文,則會因編碼問題而出錯。這時候可以使用在 Git Bash 命令行下生成的方法。
鼠標右鍵 -> Git Gui
幫助 -> Show SSH Key
點擊 Generate Key,彈出一個對話框,提示輸入 passphrase(密碼短語),需要輸入兩次。意思就是以后提交數據到服務端,只要輸入這個密碼短語就可以了。這里可以為空,直接點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 我是項目的創建者,我要創建項目
3.1.1 在 Gitlab 上執行創建新項目
項目創建完成后,需要初始化,請保留該頁面,在必要時復制項目的 SSH 地址
Git 同時支持 SSH 和 HTTP 的方式訪問,SSH 可以不用輸入密碼。
3.1.2 初始化項目
以下這些操作,需要在項目的目錄下進行。請注意如果你的項目文件夾路徑包含中文,請使用 TortoiseGit 工具來操作,不要使用 Git Gui,否則會出現錯誤。
3.1.3 創建一份排除版本控制的文件類型清單
在項目中,實際上有很多文件是不需要版本控制的,例如編譯過程中生成的中間文件?.obj?,IDE 的配置文件(Intellj IDEA 的.idea?文件夾),編譯生成的文件(/out/ 和 /bin/ 文件夾),Python的.pyc文件,像這些類型的文件我們可以設置過濾,避免導致版本庫很大。
我們只要在項目的目錄下,放一個?.gitignore?文件就可以了。
這份?.gitignore?文件,排除了.idea/,out/,bin/ 文件夾,以及所有類型為 .pyc 的文件
Github 上面有一個?.gitignore 模板的項目
如果后續開發中有新類型的文件要排除,可以在文件上
右鍵 -> TortoisGit -> 刪除并添加到忽略列表3.1.4 創建一份 README.md 文件
README.md 文件用來填寫項目的描述和說明,會直接顯示在 Gitlab 的項目文件頁面,方便直接查看項目的描述信息。
.md 是?Markdown?格式的文件,關于 Markdown,可以查看?作業部落
3.1.5 在自己的電腦上創建版本庫
在項目目錄下
右鍵 -> Git init here這樣就可以在當前文件夾創建一個 Git 版本控制的庫,同時創建一個分支 master。
該操作會在這個文件夾下自動創建一個?.git?的隱藏文件夾,所有關于版本控制的信息都放在這個文件夾下面的文件中。
3.1.6 提交代碼到本地版本庫
右鍵 -> Git 提交選擇要提交的文件,并填寫描述信息
3.1.7 設置 remote
將項目的 SSH 地址復制過來,并將默認的 remote 名稱設置為 origin
如果提示是否關閉獲取標簽,也選擇 No
3.1.8 推送到服務器上的版本庫(push to remote)
如果提示該服務器主機是未知的,請選擇是,添加到已知主機列表
到這一步項目的代碼庫已創建完成,可以去 Gitlab 上查看項目
3.1.9 創建開發分支
默認情況下,master 分支在 Gitlab 中是保護分支。保護分支只允許 Master 級別以上的用戶才能 push 和 delete。而普通的開發人員(Developer 級別)是無法提交代碼到 master分支的。
這么設計的原因是:我們通常將 master 分支作為穩定版本發布的分支,在這個分支上的代碼都是最新可用版本。而日常的開發,通常在開發分支 develop 上進行。等到功能穩定后,再由項目的管理員合并到 master 分支上。
請在 Gitlab 中操作
3.2 我是開發人員,我要獲取和提交代碼
3.2.1 克隆項目
在一個空白的項目文件夾下,右鍵 -> Git克隆。
如果你已配好了SSH Key,請輸入項目的SSH地址,這樣就可以不用再輸入密碼。Git 支持 SSH 和 HTTP 的方式訪問,這里也可以使用 HTTP 地址。
如果提示該服務器主機是未知的,請選擇?是?,添加到已知主機列表
3.2.2 檢出開發分支
Git 克隆默認會檢出 master 分支,但是我們需要在開發分支中工作。
檢查當前所在的分支
注意:切換分支的時候,如果有未提交的內容,需要先提交,否則無法切換分支。如果不想提交可以用貯藏(stash)
到這一步完成,你就可以在本地自由地做開發了
3.2.3 從服務器的代碼庫更新數據
請注意,選擇拉取功能,就不需要再執行合并。如果是獲取,就需要再執行一次合并。兩者的區別在于,拉取省略了合并的細節。
3.2.4 沖突與解決
出現無法推送
試試拉取,但拉取的時候出現沖突,Merge conflict in test.html
這時候需要先解決沖突
解決方法有兩種,一種是打開沖突的文件,手動刪除沖突標記
上面那部分的內容是本地代碼庫,HEAD 所指向分支的代碼,下面那部分的內容是服務器端代碼庫的內容
<<<<<<< HEAD <pre>This is for test.</pre> ======= <p><a>This is for test.</a></p> >>>>>>> 5f065407ecf91415f109c882119291f0be37b07a只需要決定最后的內容,然后刪除沖突標記,例如,只剩下
<pre>This is for test.</pre>刪除完沖突標記后,需要右鍵空白的地方,點擊 Git Add all files now
另一種方法是使用 TorgoiseGit 的工具
雙擊沖突的文件
點擊保存
不管使用哪種方法,最后都要執行的兩步操作是?提交?和?推送
提交
推送
當成功推送到服務器的代碼庫后,沖突才算真正解決
3.2.5 提交和推送代碼到服務器的版本庫
請查看 3.2.3 和 3.2.5,注意選擇正確的分支。
請注意:只有項目的 master 權限或者 owner 權限的人才能將代碼推送到保護分支中,master 分支默認是保護分支。假如自己沒有推送到保護分支的權限時,你可以將代碼提交到,如 develop 分支中(或者自己建立的分支中),等 develop 分支的代碼穩定后,然后在 Gitlab 的項目地址中,發起一個 merge request 請求,系統會發送郵件通知對應的人執行合并操作。這樣就可以將代碼合并到保護分支中(如 master 分支)
發起合并請求
選擇需要合并的分支,點擊“比較分支”(需要先比較分支,可以查看到這兩個分支的差異)
?
描述分支合并請求,然后指派給項目的管理員,項目管理員會收到合并請求的郵件
3.3 分支與標簽
3.3.1 創建分支與標簽
分支可以基于任意提交(commit)、已有分支、已有標簽中創建。
當你要做實驗,或者開發新功能,修正bug時,都可以通過創建分支來安全的處理。這樣就不會影響正常的開發,當完成的時候,再合并回去。
創建完分支后,記得切換到正確的分支中去工作。
標簽是只讀的,通常只用來記錄特定的歷史時刻,如里程碑版本等,這是為了方便以后檢出特定版本的代碼。
3.3.2 推送分支或標簽到服務器的版本庫
使用推送命令,可以將本地版本庫中的分支推送到服務器的版本庫中。如果要推送標簽,請勾選?包含標簽?。
3.3.3 分支合并
選擇要合并到當前工作分支中的分支,例如當前所在的分支是 master,選擇 develop,則會將 develop 中的代碼合并到 master 中。
合并分支有可能會出現沖突,解決沖突的方法請參見 3.3.4
4 Gitlab 基本功能
4.1 為項目寫 WiKi
WiKi 可以放項目的相關說明文檔,包括部署手冊,使用手冊等等。
Gitlab 的 Wiki 使用了 Markdown 格式(是一種輕量級標記語言,可以使用易讀易寫的純文本格式編寫出排版漂亮的文檔)
簡易入門請看?作業部落
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 文件目錄添加到環境變量。
還需要再安裝 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 $/qzmcc_uuv
qzmcc_uuv 為項目在 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” 打開分支列表(默認該菜單是隱藏的)。選擇相應的分支,單擊右鍵,選擇刪除。
注意:
5.5 重置代碼到以前的版本
當我們發現當前的代碼有問題,想回退到之前的版本時,可以使用重置版本。在項目目錄下,
右鍵 -> TorgoiseGit -> 顯示日志進入日志信息窗口,選擇指定的版本
右鍵 -> 重置到這個版本5.5.1 重置類型,soft, mixed, hard 的區別
soft 不改動工作區和索引
假設有一些 commits
A - B - C (master)HEAD 指向 C, 并且暫存區(stage,或稱為 index)matches C.
當使用?git reset --soft B?時,master 和 HEAD 指向 B,但是依然保留了 C 添加跟蹤的文件,此時會將這些文件放入暫存區中,顯示為已緩存。同時工作區中修改的文件,顯示為未緩存。
mixed 保持工作區不變,重置索引
當使用?git reset --mixed B?時,master 和 HEAD 指向 B,這時候 C 添加跟蹤的文件仍然會在,但是會顯示為未緩存(不是版本控制),而當前工作目錄中的修改內容,仍然會在,顯示未緩存的狀態
(如果不知道怎么選,默認使用 mixed)
hard 重置索引和工作區(丟棄所有本地變更)
當使用?git reset --hard B?時,C 添加跟蹤的文件,以及當前工作目錄中的修改內容,都會丟失。
6 Eclipse 中使用 EGit
6.1 檢出項目
File/Import
?
?
?
6.2 更新和推送數據
6.2.1 獲取數據(fetch)
項目右鍵 -> Team -> Remote -> Fetch FromGerrit 是基于 Git 的代碼審核軟件
選擇遠程代碼庫
自定義選擇要獲取的遠程分支,該圖是遠程倉庫中的所有
fetch 只是把服務端的代碼更新,放到本地的代碼庫中,還需要與本地分支合并,才能真正將代碼更新到工作目錄中。
分支的合并也是在這里操作,注意上圖中,當前是 master,然后要把 origin/master 合并到 master 中
?squash:不創建新的 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自動合并過的文件和服務器端文件進行對比
- 第二項是用本地最新版本的文件和服務器端文件進行對比,建議用此項
修改左邊的本地數據,修改好后?Ctrl+S?保存文件就可以了。這時候再次查看文件,沖突標記已經自動去掉。
?<<<<<<< HEAD
=======
>>>>>>> remote
然后右鍵點擊此沖突文件
?選擇 Team -> Add to index
再次將文件加入索引控制,此時文件已經不是沖突狀態,并且可以進行提交并 push 到服務器端。一定要重新 commit,并 push 到服務端,才算真正解決沖突。
6.4 分支和標簽
創建分支
創建標簽
6.5 reset 到某個版本
來源:https://blog.csdn.net/AntKengElephant/article/details/82628374
總結
以上是生活随笔為你收集整理的gitlab图形化使用教程(测试过)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 43993d坦克无限水晶在线完(4399
- 下一篇: 把关人理论名词解释(把关人理论)