git學習總結

總算有機會使用git了,ubuntu 上搭了個 gitlab 服務,爲避免後人踩坑,分享下:linux

對於Linux小白來講,安裝 ubuntu 桌面版,比命令行直觀。先熟悉後,視狀況再安裝 ubuntu 服務版。git

安裝docker版的gitlab,集成了 redis,posgresql 等依賴組件。redis

docker版的gitlab安裝很簡單,真的僅一句話,絲絕不折騰:sql

sudo docker run --detach \
    --hostname gitlab.linux.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab-ce \
    --restart always \
    --volume /media/administrator/GitLabData/gitlab/config:/etc/gitlab \
    --volume /media/administrator/GitLabData/gitlab/logs:/var/log/gitlab \
    --volume /media/administrator/GitLabData/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce

 

我安裝的是gitlab 10.1.4 版本
其中域名 gitlab.linux.com 在hosts裏解析
administrator 是個人Linux用戶名
GitLabData 是我另掛載的一個磁盤,用於存儲倉庫數據
sudo dockers ps 
有 (health) 字樣說明服務正式啓動了
若是服務未成功運行,執行:
sudo docker start gitlab-ce          //啓動docker
sudo docker exec -it gitlab-ce bash  //進入docker
gitlab-ctl restart                   //啓動gitlab
sudo dockers ps //查看docker服務
exit //退出docker



 

git學習總結docker

一個文件會有不少版本,一個文件夾也會有多個版本,本地電腦當前文件夾下保存的是最新版本,每次編輯器保存後,文件實時覆蓋。
若是要記錄一個歷史版本,就進行一次commit,git會保留下當前文件的快照,生成一個版本號,做爲歷史版本,以便查詢,比較,還原。ubuntu

咱們當前開發工做的叫develop分支。實際工做中,咱們會遇到歷史版本的文件須要修改的狀況。
好比已發佈的程序發現了bug,須要當即修正,咱們就要獲取歷史版本,修正bug後當即發佈,這就另生成了一個版本分支。
由於修改的基礎代碼不是最新的develop版本,在最新的develop源碼下,這個bug依舊存在,還沒有修復。
爲了直觀,咱們預先創建一個發佈分支叫master分支,master分支是develop分支中里程碑版本的集合。
當有發佈的程序須要修正bug,就獲取master分支的最新版本,修改後提交master分支,同時也應把這部分修改內容提交到develop分支。bash

至此,git做爲我的的版本管理工具已經功能完備了。
但,git做爲團隊協做工具,還須要管理不一樣人的不一樣版本的文件,以避免文件互相覆蓋。服務器

咱們把一個文件共享在團隊服務器上,團隊成員將此文件各自複製到本地電腦上,同一個文件在不一樣的我的電腦上會有多個副本。
若是此文件被不一樣的人各自修改,再次上傳到服務器上,此文件不該被互相覆蓋。
這時git服務端就會在接收文件時,智能判斷會不會覆蓋別人的修改內容,若是有此可能,會提示文件有衝突,阻止上傳。編輯器

上傳失敗,一般的作法是,再次從服務器上獲取最新版本的文件,在本地從新修改合併後,再次嘗試推送到服務器上。
git判斷你本次修改的文件基礎版本跟服務器上該文件最新版本號是否一致,若是一致,才容許上傳並覆蓋共享的文件。
爲了減小此類衝突狀況的發生,咱們應不按期地頻繁獲取服務器上的最新版本,修改後及時推送。
這樣團隊成員修改本地文件時,就是在修改最新版本的文件,而不是被別人修改過的過時版本的文件。分佈式

一次獲取文件(pull+rebase)的過程可分離爲3個步驟:獲取服務端文件(fetch),與本地工做區文件合併(merge),重置本地爲最新的版本號(rebase)

另外,git做爲一個分佈式版本管理工具,還有一個功能,能夠支持不一樣的團隊,建立本身的代碼庫。
從官方代碼庫中,能夠fork出一個分支到團隊git服務器上,做爲團隊開發的獨立代碼庫,而不會影響到官方的代碼庫。
須要貢獻代碼時,向官方發送合併請求,並不是主動推送代碼到官方代碼庫。
官方維護人員收到合併請求後,視狀況獲取貢獻者的代碼,再合併到官方代碼庫。

 

這個示意圖是我的初步理解,非權威僅供參考

 

相關文章
相關標籤/搜索