# gitlab使用說明
## 1. gitlab啟動
$ gitlab-ctl start
## 2. 在gitlab的網站創建一個project
(1)定一個項目名,選定相關的項目設置,這里我們定義為private
(2)項目創建成功后得到項目
git@192.168.1.153:tx/tx_project.git 的地址,可用於將project從遠程pull下來或者push上去。
## 3. 關於ssh key的設置
### 3.1 安裝git
$ apt install git
(2) 設置Git的 user name 和email(如果是第一次的話) 設定本機用戶名,綁定郵箱,讓遠程服務器知道機器的身份
$ git config --local user.name "用戶名"
$ git config --local user.email "郵箱"
(3) 生成密匙
這里輸入你的郵箱,生成一個與郵箱相對應的key
$ ssh-keygen -t rsa -C "郵箱"
連續三個回車,如果不需要密碼的話。
最后得到兩個文件:id_rsa和id_rsa.pub
SSH 公鑰默認儲存在賬戶的主目錄下的 ~/.ssh 目錄
(4) 添加密匙到ssh-agent
確保 ssh-agent 是可用的。ssh-agent是一種控制用來保存公鑰身份驗證所使用的私鑰的程序,其實ssh-agent就是一個密鑰管理器,運行ssh-agent以后,使用ssh-add將私鑰交給ssh-agent保管,其他程序需要身份驗證的時候可以將驗證申請交給ssh-agent來完成整個認證過程。
添加生成的 SSH key 到 ssh-agent。
$ ssh-add ~/.ssh/id_rsa
<font color=red>注意:如果報錯Could not open a connection to your authentication agent.
執行 ssh-agent bash
再執行ssh-add ~/.ssh/id_rsa可解決</font>
## 4. 完善新建的項目
### 4.1 設定本機用戶名,綁定郵箱,讓遠程服務器知道機器的身份
$ git config --local user.name "用戶名"
$ git config --local user.email "郵箱"
### 4.2 如果你沒有最新的代碼,希望從頭開始,下面展示在你希望pull過來的文件夾下
$ git clone git@192.168.1.100:xx/xxx.git //這里是項目的地址(可從項目主頁復制),將遠程服務器的內容完全復制過來
$ cd xxx //clone 之后進入該項目的文件夾
$ touch README.md //新建readme文件
$ git add README.md //將新的文件添加到git的暫存區
$ git commit-m ‘first commit(注釋)’ // 將暫存區的文件提交到某一個版本保存下來,並加上注釋
$ git push -u origin master //將本地的更改提交到遠程服務器
### 4.3 如果你已經有一個新版代碼,希望直接把本地的代碼替換到遠程服務器
$ cd aa //進入代碼存在的文件夾
$ git init //初始化,會生成一個.git文件夾
$ git remote add origin git@192.168.1.100:xx/xxx.git //添加遠程項目地址(可從項目主頁復制)
$ git add . //添加該文件夾中所有的文件到git的暫存區
$ git commit -m ‘注釋’ //提交所有代碼到本機的版本庫
$ git push -u origin master //將本地的更改提交到遠程服務器
<font color=red>注:如果報錯fatal: remote origin already exists.
先輸入git remote rm origin
再git remote add origin git@192.168.1.100:xx/xxx.git</font>
## 5. 版本穿梭
版本回退
在Git中,我們用git log命令查看:
每一個提交的版本都唯一對應一個commit版本號,
現在,我們要把當前版本回退到上一個版本,就可以使用git reset命令:
$ git reset --hard HEAD^
這個時候,最新的版本就被上一個版本覆蓋了,繼續用git log就找不到了。這個時候,如果想恢復到原來的版本,只要找到原來的commit版本號就可以了。
$ git reflog //查看命令歷史,以便確定要回到哪個版本
$ git reset --hard commit_id //比如git reset --hard 3628164(不用全部輸入,輸入前幾位即可)
## 6. git分支管理
### 6.1 創建與合並分支
我們創建dev分支,然后切換到dev分支:
$ git checkout -b dev
git checkout命令加上-b參數表示創建並切換,相當於以下兩條命令:
$ git branch dev
$ git checkout dev
然后,用git branch命令查看當前分支,
$ git branch //命令會列出所有分支,當前分支前面會標一個*號
然后,我們就可以在dev分支上正常提交.
$ git add readme.txt
$ git commit -m "branch test"
dev分支的工作完成,我們就可以切換回master分支:
$ git checkout master
切換回master分支后,再查看一個readme.txt文件,剛才添加的內容不見了!因為那個提交是在dev分支上,而master分支此刻的提交點並沒有變
現在,我們把dev分支的工作成果合並到master分支上:
$ git merge dev
git merge命令用於合並指定分支到當前分支。合並后,再查看readme.txt的內容,就可以看到,和dev分支的最新提交是完全一樣的。
注意到上面的Fast-forward信息,Git告訴我們,這次合並是“快進模式”,也就是直接把master指向dev的當前提交,所以合並速度非常快。
當然,也不是每次合並都能Fast-forward,我們后面會講其他方式的合並。
合並完成后,就可以放心地刪除dev分支了:
$ git branch -d dev
刪除后,查看branch,就只剩下master分支了.
### 6.2 解決沖突
准備新的feature1分支,繼續我們的新分支開發:
$ git checkout -b feature1
修改readme.txt最后一行,改為:
Creating a new branch is quick AND simple.
在feature1分支上提交:
$ git add readme.txt
$ git commit -m "AND simple"
切換到master分支:
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
Git還會自動提示我們當前master分支比遠程的master分支要超前1個提交。
在master分支上把readme.txt文件的最后一行改為:
Creating a new branch is quick & simple.
$ git add readme.txt
$ git commit -m "& simple"
現在,master分支和feature1分支各自都分別有新的提交,
這種情況下,Git無法執行“快速合並”,只能試圖把各自的修改合並起來,但這種合並就可能會有沖突,我們試試看:
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
果然沖突了!Git告訴我們,readme.txt文件存在沖突,必須手動解決沖突后再提交。git status也可以告訴我們沖突的文件;
我們可以直接查看readme.txt的內容:
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,我們修改后保存再提交:
$ git add readme.txt
$ git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed
最后,刪除feature1分支:
$ git branch -d feature1
Deleted branch feature1 (was 75a857c).
## 7. 刪除gitlab上的文件夾
$ git rm -r --cached .setting //--cached不會把本地的.setting刪除
$ git commit -m 'delete .setting dir'[注釋]
$ git push -u origin master