程式碼管理平臺git
22.5/22.6 單機上使用git
22.7 簡歷遠端倉庫
22.8 克隆遠端倉庫
22.9 分支管理
22.10 遠端分支管理
22.11 標籤管理
22.12 git別名
22.13 搭建git伺服器
22.14/22.15 安裝gitlab
22.16 使用gitlab
22.17 gitlab備份和恢復
gitlab修改埠 http://blog.csdn.net/arybd/article/details/54635295
GitLab 修改主機名配置 http://www.mamicode.com/info-detail-1316828.html
第三方郵件:GitLab 使用163郵箱傳送郵件 http://blog.csdn.net/liuruiqun/article/details/50000213
server ssh 埠並不是22 http://www.cnblogs.com/limx/p/5709101.html
GitLab遇到SSH修改了預設埠解決方法 http://www.linuxidc.com/Linux/2017-02/141043.htm
應該修改 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
“# If you use non-standard ssh port you need to specify it”
ssh_port: xxxxx
gitlab的鉤子相關配置 http://fighter.blog.51cto.com/1318618/1670667
gitlab常用命令 https://www.cnblogs.com/zlw-xf/p/9134274.html
一、單機上使用git
yum install -y git mkdir /data/gitroot cd /data/gitroot git init //初始化倉庫
初始化完成後也會生成.git目錄
郵件地址和使用者名稱位置
vim 1.txt //建立一個新檔案 git add 1.txt//把1.txt新增到倉庫 git commit -m “add 1.txt” //add完了必須要commit才算真正把檔案提交到git倉庫裡 再次更改1.txt git status //檢視當前倉庫中的狀態,比如是否有改動的檔案 git diff 1.txt //可以對比1.txt本次修改了什麼內容,相比較倉庫裡面的版本
當沒有需要新增或提交到倉庫的檔案時的倉庫狀態
版本回退
git log //檢視所有提交記錄
版本從下往上看(更早的版本在下面)
git log --pretty=oneline //一行顯示 git reset --hard fbb2012 //回退版本,其中後面跟的字串可以是簡寫 git reflog //檢視所有歷史版本
rm -f 1.txt //如果不小心刪除了1.txt git checkout -- 1.txt//恢復1.txt , 檔案存在程式碼管理庫中 如果1.txt檔案修改,add後但沒有commit,再想回退到上一次提交的狀態,可以使用git reset HEAD 1.txt,可以把add的標記去掉,再執行git checkout -- 1.txt
git rm 2.txt git commit -m "rm 2.txt" 在庫中刪除
二、建立遠端倉庫
首先到 https://github.com 註冊一個賬號,建立自己的git庫,點右上角加號->new repository 名字自定義,此處倉庫名為test1,選擇public 點 create repository 增加祕鑰,新增key:右上角點自己頭像,選擇settings,左側選擇SSH and GPG keys 點New SSH key,把linux機器上的 /root/.ssh/id_rsa.pub內容貼上到這裡
生成公鑰:
把本地倉庫推送到遠端倉庫:
在本地建立test1目錄
可以按照頁面中在本地新建目錄做設定
git push -u origin master 把本地的test1倉庫推送到遠端的test1,輸入遠端git的使用者名稱密碼
下一次再推送,就可以直接 git push
回到頁面上重新整理:
三、克隆遠端倉庫
克隆地址:
cd /home 把遠端的test1庫直接克隆到home下 git clone https://github.com/tobej/test1.git
進入到剛剛克隆的目錄後,對檔案進行修改,在推送到遠端倉庫後,會在頁面顯示修改的內容
也可以在遠端倉庫進行檔案的修改,修改完成後點選提交即可
git pull 把遠端的拉取到本地,此時已經是修改過的檔案
四、分支管理
使用分支的原則
對於分支的應用,建議大家以這樣的原則來: master分支是非常重要的,線上釋出程式碼用這個分支,平時我們開發程式碼不要在這個分支上。 建立一個dev分支,專門用作開發,只有當釋出到線上之前,才會把dev分支合併到master 開發人員應該在dev的基礎上再分支成個人分支,個人分支(在自己pc上)裡面開發程式碼,然後合併到dev分支 dev分支合併bob分支的命令是: git checkout dev //先切換到dev分支,然後 git merge bob
git branch //檢視分支 git branch tobe //建立分支,* 在master上,說明現在還在master分支上 git checkout tobe //切換到tobe分支下
此時已經切換到了tobe分支,編輯3.txt,會提交到tobe分支
在切換回master分支
git checkout master //此時並沒有3.txt
分支的合併:
git checkout master //合併分支之前,先切換到目標分支 git merge tobe //把tobe分支合併到master,此時在tobe分支下做的變更,合併到master
解決衝突的辦法:
如果master分支和tobe分支都對3.txt進行了編輯,當合並時會提示衝突,需要先解決衝突才可以繼續合併。
解決衝突的方法是在master分支下,編輯3.txt,把兩個分支的內容改為一樣的(改為tobe分支裡面3.txt的內容)。 然後提交3.txt,再合併tobe分支。
但是這樣有一個問題,萬一master分支更改的內容是我們想要的呢? 可以編輯3.txt內容,改為想要的,然後提交。切換到tobe分支,然後合併master分支到tobe分支即可(倒著合併)。合併分支有一個原則,那就是要把最新的分支合併到舊的分支。也就是說merge後面跟的分支名字一定是最新的分支。
兩個紅框中的內容分別代表兩個分支中的檔案內容,當兩個分支中的內容不一致時,無法切換分支
把master分支中的3.txt修改成和tobe分支中的3.txt內容一致,然後新增、提交即可
git branch -d tobe //刪除分支,需要切換出要刪除的分支 如果分支沒有合併,刪除之前會提示,那就不合並,強制刪除 git branch -D tobe
五、遠端分支管理
建立新的分支
把之前拉取到本地的test1刪除,重新拉取到home下,此時只有一個分支 本地新建的分支如果不推送到遠端,對其他人就是不可見的 檢視遠端分支 git ls-remote origin,可以看到所有分支
git clone的時候預設只把master分支克隆下來,如果想把所有分支都克隆下來,需要手動建立,在本地建立和遠端分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠端分支的名稱要一致
對於git push分支分兩種情況: 當本地分支和遠端分支一致時,git push會把所有本地分支的變更一同推送到遠端,如果想只推送一個分支,使用git push origin branch-name。 當本地分支比遠端分支多,預設git push 只推送本地和遠端一致的分支,想要把多出來的本地分支推送到遠端時,使用git push origin branch-name 如果推送失敗,先用git pull抓取遠端的新提交。 本地建立一個dev2分支,此時遠端沒有dev2,切換到dev2分支下,建立3.txt,此時新增、提交,並git push會提示沒有任何修改 git push origin dev2 把本地分支推送到遠端
推送到遠端分支後,重新整理頁面,切換到dev2下,有3.txt檔案
六、標籤管理
標籤類似於快照功能,可以給版本庫打一個標籤,記錄某個時刻庫的狀態。也可以隨時恢復到該狀態。
git checkout master 先切到master分支上 git tag v1.0 給master打一個標籤v1.0 git show v1.0 檢視標籤資訊 git tag 可以檢視所有的標籤 git log --pretty=oneline --abbrev-commit //先檢視歷史的commit
tag是針對commit來打標籤的,所以可以針對歷史的commit來打tag git tag v0.9 //針對歷史commit打標籤
git tag -a v0.1 -m "first tag" 9586cad 可以對標籤進行描述
git tag -d v0.8 //刪除標籤
git push origin v1.0 //推送指定標籤到遠端 git push --tag origin //推送所有標籤
如果本地刪除了一個標籤,遠端也想要刪除需要這樣操作:
git tag -d v0.8 //刪除本地標籤 git push origin :refs/tags/v0.8 //刪除遠端標籤
七、git別名
git config --global alias.ci commit commit別名設定為ci git config --global alias.br branch branch別名設定為br
檢視git所有別名
git config --list |grep alias
vim /root/.gitconfig 也可以在配置檔案中新增,最好使用命令列新增
查詢log小技巧:
會自動配置到配置檔案中
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git lg lg為log別名
取消別名
git config --global --unset alias.br
八、 搭建git伺服器
github畢竟是公開的,而私有倉庫又得花錢買。所以我們可以想辦法搭建一個私有的,只自己公司使用的。Gitlab是個不錯的選擇。在介紹它之前,先講述一下命令列的git伺服器,
找一臺伺服器002作為服務端,001作為客戶端
首先要安裝git,yum install -y git 新增git使用者,並且設定shell為/usr/bin/git-shell,目的是為了不讓git使用者遠端登陸 useradd -s /usr/bin/git-shell git cd /home/git 建立authorized_keys檔案,並更改屬主、屬組和許可權,用來存客戶端機器上的公鑰 mkdir .ssh touch .ssh/authorized_keys chown -R git.git .ssh chmod 600 .ssh/authorized_keys vim .ssh/authorized_keys 首先要把001客戶端上的公鑰放到git伺服器002上:/home/git/.ssh/authorized_keys檔案裡
在001使用ssh連線
ssh [email protected] 說明驗證成功,不允許直接登入
在服務端002建立git的倉庫
mkdir /data/gitroot cd /data/gitroot git init --bare sample.git // 會建立一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,所以不讓使用者直接登入到伺服器上去改工作區,並且伺服器上的Git倉庫通常都以.git結尾 chown -R git.git sample.git 設定屬主屬組 以上操作是在git伺服器上做的,平時git伺服器是不需要開發人員登入修改程式碼的,它僅僅是充當著一個伺服器的角色,就像github一樣,平時操作都是在我們自己的pc上做的
在客戶端上(自己pc)克隆遠端倉庫:
git clone [email protected]:/data/gitroot/sample.git 後面的目錄為002上的git目錄 直接把本地分支推送到遠端會出現下圖的報錯,因為倉庫是裸倉庫,所以也沒有分支,需要在push的時候把分支加上,下次再push時,直接push即可 git push origin master 此時就可以在當前目錄下生成一個sample的目錄,這個就是我們克隆的遠端倉庫了。進入到這裡面,可以開發一些程式碼,然後push到遠端。
在tmp目錄下在克隆一次,進行測試,此時在上一個目錄建立並push的檔案都會克隆下來
在/tmp/sample/目錄下編輯1.txt 新增並提交、git push 回到/root/sample/ git pull 會把新的拉取下來
九、安裝gitlab
gitlab官網 https://about.gitlab.com/gitlab-com/
官方安裝文件 https://about.gitlab.com/installation/?version=ce#centos-7 (ce/ee) ee為企業版,ce社群版
要求伺服器記憶體不少於2g
vim /etc/yum.repos.d/gitlab.repo//加入如下內容
[gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1 安裝gitlab之前,最好把nginx停掉,還有redis,因為配置gitlab時,也會啟動一個nginx和其他的服務 /etc/init.d/nginx stop chkconfig nginx off yum install -y gitlab-ce gitlab-ctl reconfigure 自動配置gitlab,並且會把所有gitlab有關的服務啟動起來 ps aux |grep git netstat -lnpt //檢視監聽埠 gitlab-ctl stop/restart/start/status
瀏覽器訪問gitlab,輸入ip即可
預設管理員root,無密碼,會直接讓更改密碼,更改完成後會跳轉到登入介面,登入即可
十、使用gitlab
ls /var/opt/gitlab/nginx/conf/nginx.conf 主配置檔案 ls /var/opt/gitlab/nginx/conf/gitlab-http.conf gitlab相關的配置檔案,可以更改監聽埠及server_name
通過更改server_name實現用域名訪問
登入到gitlab頁面後,先建立組,在建立專案(Project)
專案建立完成後,提示:
需要新增Key即公鑰
新增Key,點選頭像->settings->SSH Keys
建立使用者:
點選如下圖所示圖示
可以建立專案,使用者,組
十一、gitlab備份和恢復
gitlab備份:
gitlab-rake gitlab:backup:create gitlab備份,備份所有的專案,組,使用者,備份和恢復要版本一致 備份目錄在/var/opt/gitlab/backups
gitlab 恢復:
先停服務: gitlab-ctl stop unicorn;gitlab-ctl stop sidekiq 停掉這兩個服務在那時不做變更 gitlab-rake gitlab:backup:restore BACKUP=xxxxx (這裡是一個編號,即備份檔案的字首) 再啟動服