寫在前面:
- 由于項目組的人事變動,由之前的多人開發轉為獨自開發。個人的決策比較自由,所以我準備把項目從臨時SVN服務器轉移到Git上來。Git和SVN相比的優點我不必多說,我這里想轉移的目的主要是兩點:
1.Xcode集成的Source Control十分強大,從此告別其他的版本管理軟件和終端代碼,實現全程操作在Xcode中進行,方便、快捷。
2.之前的臨時服務器IP不穩定(其實就是個人Mac搭建),經常需要重新確認IP地址,現在替換到一個穩定的服務器并且實現可遠程訪問,方便回家擼代碼。
在確定以上需求之后,我找到了Gitlab,一個類似Github的版本管理系統。它和Github最主要的區別就是可以創建免費、私密的個人項目,并且安全性可以得到保障。
正文:
首先安利一下Gitlab的地址:https://www.gitlab.com/。
注冊登錄之類的不多說,直接進入正題。
1. 創建Project
注冊登錄完畢后,選擇左上角菜單->“Projects”,就會提示你創建新項目,因為本文主要目的是介紹初次使用Gitlab,這里選擇“new project”。
-
設置Project信息
如果是從本地上傳,“import project from”下面的按鈕可以先不選,只輸入project name和描述,然后選擇可見級別,使用Gitlab應該都是“Private”吧,Public的一般都去Github了。填寫完畢點擊“Creat project”。
設置Project信息 -
Project創建完成
創建完成就進入Project主頁了,這時會看到下面有許多終端提示代碼,一會會用到。
Project主頁
2. 設置SSH
-
點擊右上角頭像,選擇“Settings”
Settings -
進入設置頁面,選擇“SSH Keys”,這里需要填寫SSH Key的公鑰。
屏幕快照 2017-02-28 20.15.36.png 生成SSH Key
為什么要生成SSH Key? 請參考:什么是SSH?
如果想和Gitlab服務器正常通信,必須使用SSH Key,服務器端存儲SSH公鑰,客戶端存儲SSH私鑰。
打開終端,輸入以下代碼
cd ~/.ssh //定位到ssh文件夾
提示`No such file or directory'說明還沒有創建ssh文件夾
mkdir ~/.ssh //創建ssh文件夾
ssh-keygen -t rsa -C "注冊Gitlab的email地址" //生成SSH秘鑰
注意:這里有一個坑,提示Enter file in which you save the key
的時候,是提示要保存的文件,而不是文件夾,如果輸入的是文件夾,會報錯。系統已經默認文件存為~/.ssh/id_rsa
,直接確認即可。
之后提示輸入兩次passphrase
,即設置push密碼,可設置,也可省略(如果設置passphrase,每次push代碼到服務器時需要密碼確認)。
輸入完畢后提示創建成果,我們來檢查一下:
cd ~/.ssh //定位到ssh文件夾
ls -l //查看文件詳情
cat id_rsa.pub //查看公鑰
查看公鑰后,將公鑰復制出來(就是那個ssh-rsa
開頭的一長串亂碼,注意包含后面的郵箱地址),填寫到剛剛打開的SSH Key設置頁面里,并設置一個方便記憶的Title,填寫完畢后,點擊“Add key”,SSH Key就添加成功了。
3. 提交Project到Gitlab
- 為Project添加Git
cd "本地項目的路徑"
git init //初始化Git
git remote add origin git@gitlab.com:USERNAME/PROJECTNAME.git //將"USERNAME"和"PROJECTNAME"替換為自己的用戶名和項目名
git add . //注意add和"."之間的空格
git commit -m 'commit description' //提交改動到本地庫
git push -u origin master //push到Gitlab
注意:git commit -m 'commit description'
和git push -u origin master
命令有兩個坑,下面會詳細說明。
坑No.1
需要注意,輸入commit
命令后會提示輸入commit message
,如下圖,對終端不熟悉的同學可能要抓狂了,這里需要按s
鍵進入INSERT
模式,開始輸入commit message
,最后按ESC,然后輸入:wq
退出commit message輸入模式
注意:建議commit message第一行輸入標題(概要),空一行再輸入詳細信息。當然,這是建議,如果你覺得無所謂,也可以隨意輸入或直接
:wq
跳過。
坑No.2
輸入git push -u origin master
命令后可以看到提示:
error: src refspec master does not match any.
error: failed to push some refs to 'git@gitlab.com:int1987/testProject.git'
這是因為沒有項目說明書,所以push失敗。
解決方案:
touch README //生成說明文件
git add README //添加說明文件到Git
git commit -m 'commit readme file' //提交改動
可以看到提交成功了
- Push到Gitlab
添加README后再重新輸入git push -u origin master
,push項目到Gitlab,首次push會提示gitlab.com的真實性無法確定,輸入yes,確定即可。之后gitlab.com就會被添加到已知服務器(可以在~/.ssh
文件夾中查看到多了一個known_hosts
文件,它就是存儲已知服務器的文件)。
Push成功,可以看到改動被提交到master分支。回到Gitlab->Project,可以看到剛剛的提交記錄:
進入Repository查看,可以看到README文件已經正確提交了。
4. 脫離終端,與Xcode無縫連接
接下來我們來試試脫離終端,直接用Xcode來進行版本控制操作——用Xcode打開testProject,并添加一個方法pushTest
:
選擇Source Control
菜單->Commit...
,當然也可以用快捷鍵option + commond + c
快速打開commit功能。這就是為什么我拋棄其他版本控制軟件——Xcode的快捷鍵操作十分方便。
添加commit message后點擊Commit 2 Files
提交改動,注意這里也可以直接勾選左下角的Push to remote:
直接push到Gitlab上,當然push是一個耗時操作,不必每次都push,也可以積攢幾次commit后再集中push到遠程服務器。
Commit完畢,選擇Source Control
菜單->Push...
。
彈出的對話框中選擇要push的分支,當前是master分支,點擊Push按鈕。
Push需要些時間,這和你的網速和提交的內容大小有關。
Push成功后,再來Gitlab看一下是否成功,可以看到test push已經被提交。
和Github一樣,Gitlab也可以直接查看提交的代碼片段(高亮顯示)。
結語
至此,Gitlab和Xcode的無縫連接就介紹完畢了,可以說Gitlab是非常強大且安全的,省去了搭建本地服務器的時間,方便多人、異地管理項目,特別適合中小型公司和個人開發者使用。文中若有不準確的地方,請留言指出,我會隨時修改,謝謝!