1. 程式人生 > >Git & Gitlab版本控制系統

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的四種狀態

204910718


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 分支

185782437186130484186139390

186160281186233593

git branch          #檢視分支

git checkout dev    #切換分支

git merge dev       # 合併分支

186957609

如果修改了同一個檔案,合併時會衝突,需要確定修改內容

在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


269491828

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

最好不要升級。真要升級採用資料匯入的