代碼管理平臺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備份和恢復
 html

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  linux

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/1670667nginx

gitlab經常使用命令  https://www.cnblogs.com/zlw-xf/p/9134274.htmlgit

1、單機上使用gitgithub

yum install -y git
mkdir /data/gitroot        
cd /data/gitroot
git init //初始化倉庫

初始化完成後也會生成.git目錄redis

郵件地址和用戶名位置shell

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本次修改了什麼內容,相比較倉庫裏面的版本

當沒有須要添加或提交到倉庫的文件時的倉庫狀態vim

版本回退centos

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"  在庫中刪除

2、創建遠程倉庫

首先到 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

回到頁面上刷新:

3、克隆遠程倉庫

克隆地址:

cd /home   把遠程的test1庫直接克隆到home下
git clone  https://github.com/tobej/test1.git

進入到剛剛克隆的目錄後,對文件進行修改,在推送到遠程倉庫後,會在頁面顯示修改的內容

 

也能夠在遠程倉庫進行文件的修改,修改完成後點擊提交便可

git pull    把遠程的拉取到本地,此時已是修改過的文件

4、分支管理

使用分支的原則

對於分支的應用,建議你們以這樣的原則來:
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

5、遠程分支管理

建立新的分支

把以前拉取到本地的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文件

6、標籤管理

標籤相似於快照功能,能夠給版本庫打一個標籤,記錄某個時刻庫的狀態。也能夠隨時恢復到該狀態。

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   //刪除遠程標籤

7、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

8、 搭建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 git@192.168.183.33   說明驗證成功,不容許直接登陸

在服務端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 git@192.168.183.33:/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    會把新的拉取下來

9、安裝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,無密碼,會直接讓更改密碼,更改完成後會跳轉到登陸界面,登陸便可

10、使用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

建立用戶:

點擊以下圖所示圖標

能夠建立項目,用戶,組

11、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 (這裏是一個編號,即備份文件的前綴)
再啓動服務 gitlab-ctl start
相關文章
相關標籤/搜索