Git & Gitlab版本控制系統
常見版本管理工具
SVN
集中式的版本控制系統,只有一箇中央資料倉庫,如果中央資料倉庫掛了或者不可訪問,所有的使用者無法使用SVN.無法進行提交或備份檔案。
Git
分散式的版本控制系統,在每個使用者電腦上就有一個完整的資料倉庫,沒有網路依然可以使用Git。當然為了習慣及團隊協作,會將本地資料同步到Git伺服器或者GitHub等程式碼倉庫。
Git與SVN的區別
1、GIT是分散式的,SVN不是:這是GIT和其它非分散式的版本控制系統,例如SVN,cVS等,最核心的區別。
2、GIT把內容按元資料方式儲存,而SVN是按檔案:所有的資源控制系統都是把檔案的元資訊隱藏在一個類似svn,cvs等的資料夾裡。
3、GIT分支和SvN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。
4、GIT沒有一個全域性的版本號,而svN有:目前為止這是跟SVN相比GIT缺少的最大的一個特徵。
5、GIT的內容完整性要優於SVN:GIT的內容儲存使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。
git config --global user.name lewen
git config --global user.email [email protected]
GIT的四個區域
Workspace:工作區
Index/Stage/Cached:暫存區
Repository:本地倉庫
Remote:遠端倉庫
Git命令就是用於將檔案改動切換到不同的空間來記錄
GIT的四種狀態
git rm -f filename #刪除工作區和暫存區的檔案 (use --cached to keep the file, or -f to force removal) git diff file #比較本地vs暫存區 git diff --cached file #暫存區vs本地版本庫 git log --oneline # 一行顯示 --decorate # 具體操作git log -p #顯示詳細資訊 git log -1 #顯示1條 commit 相當於做快照 注意 git status 操作提示 從暫存區恢復到本地工作區 git checkout -- file # 撤銷工作區更改 從版本庫恢復[覆蓋]到暫存區(暫存區錯誤add交) git reset HEAD file 從版本庫回退到版本[某一次commit版本] git reset --hard f34j34 回退後,回退點之後的git log 日誌看不到 git reflog 檢視所有commit的日誌
分支概念
Git的分支,從本質上來講僅僅是指向提交物件的可變指標。在這一點上與SvN是有著本質的區別。SVN的分支實際上就是一個目錄。
Git的預設分支名字是master。在多次提交操作之後,你其實已經有一個指向最後那個提交物件的master分支。它會在每次的提交操作中自動向前移動。
git 分支
git branch #檢視分支
git checkout dev #切換分支
git merge dev # 合併分支
如果修改了同一個檔案,合併時會衝突,需要確定修改內容
在master 修改衝突的檔案,add 提交,commit -->合併完成
git brach -d dev 刪除分支
標籤使用
前面回滾使用的是一串字串,又長又難記。 git tag v1.0 #一當前提交內容打一個標籤(方便快速回滾),每次提交都可以打個tag。 git tag #→檢視當前所有的標籤 git show vl.0 #一檢視當前1.0版本的詳細資訊 git tag v1.2 -m "version 1.2 release is test" # 建立帶有說明的標籤,-a 指定commit id 標籤名字(不加是當前打標籤),-m 指定說明文字 git tag -d vl.0 #我們為同一個提交版本設定了兩次標籤,刪除之前的v1.0 [[email protected] git data]# git reset --hard 0bdf2e7 # --hard 快速回滾 --soft HEAD is now at Obdf2e7 modified README file [[email protected] git datal# git reset --hard V1.0 HEAD is now at a66370a add oldboy dir
github
Github顧名思義是一個Git版本庫的託管服務,是目前全球最大的軟體倉庫,擁有上百萬的開發者使用者,也是軟體開發和尋找資源的最佳途徑,Github不僅可以託管各種Git版本倉庫,還擁有了更美觀
的Web介面,您的程式碼檔案可以被任何人克隆,使得開發者為開源項貢獻程式碼變得更加容易,當然也可以付費購買私有庫,這樣高性價比的私有庫真的是幫助到了很多團隊和企業。
1、註冊使用者
2、配置ssh-key
3、建立專案
4、克隆專案到本地
5、推送修改到遠端
echo "#git">> README.md git init git add README.md git commit -m "first commit" git remote add origin [email protected]:lewen/git.git git push -u origin master git remote add origin [email protected]:lewen/git.git git push -u origin master ssh-keygen -t rsa 將公鑰新增到 一個公鑰在github只能繫結一次 將遠端的拉下來,合併後,再 push git fetch 將遠端的更新到本地 git merge origin/master 合併遠端的到本地master 先拉,再合併,再推
gitlab
Gitlab Shell。
Gitlab Shell有兩個作用:為Gitlab處理Git命令、修改authorizedkeys列表。
當通過SSH訪問Gitlab Server時,Gitlab Shell會:限制執行預定義好的Git命令(git push,git pull,gitannex)
呼叫Gitlab Rails API檢查許可權執行pre-receive鉤子(在GitLab企業版中叫做Git鉤子)執行你請求的動作處理GitLab的post-receive動作。處理自定義的post-receive動作
當通過http(s)訪問Gitlab Server時,工作流程取決於你是從Git倉庫拉取(pul)程式碼還是向git倉庫推送(push)程式碼。
如果你是從Git 倉庫拉取(pull程式碼,Gitlab Rails應用會全權負責處理使用者鑑權和執行Git命令的工作;
如果你是向Git 倉庫推送(push)程式碼,Gitlab Rails 應用既不會進行使用者鑑權也不會執行Git命令,它會把以下工作交由Gitlab Shell進行處理:
呼叫GitabRails ApI檢查許可權。執行pre-receive鉤子(在Gitlab企業版中叫做Git鉤子)。執行你請求的動作處理GitLab的post-receive動作
處理自定義的post-receive動作
/usr/local/src/
gitlab-ctl reconfigure # 只要修改/etc/gitlab/gitlab.rb 就需要重新配置
gitlab-ctl tail
restart [option]
status
GITLAB備份管理
#配置檔案中加入 gitlab rails['backup path']='/data/backup/gitlab' gitlab rails['backup keep time']=604800 # 以秒計算 #如果自定義備份目錄需要賦予git許可權 mkdir/data/backup/gitlab chown -R git.git /data/backup/gitlab /usr/bin/gitlab-rake gitlab:backup:create #執行備份 #定時任務Crontab中加入 0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
GITLAB資料恢復
#停止資料寫入服務 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq gitlab-rake gitlab:backup:restore BACKUP=1512811475_2017_12_09_10.2.2 gitlab-ctl restart 把先關服務 rpm -uvp xxxxxx.rpm 升級gitlab 最好不要升級。真要升級採用資料匯入的