一、git的使用
1、git介紹
git是一個分佈式的版本管理系統,由linux系統的創造者Linus 於2005年開發,相對於svn git有速度快,適合大規模,跨地區多人協同開發的特點。
2、git安裝
(1)yum安裝
通過yum安裝的軟件版本較低。
#使用yum安裝git
]# yum install git
(2)編譯安裝
編譯安裝可以安裝較新餓版本,新版本可以在” https://github.com/git/git/”查看
#安裝依賴軟件
]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
# 下載解壓git源碼包
]# wget https://github.com/git/git/archive/v2.18.0.zip
]# unzip v2.18.0.zip
]# cd git-2.18.0/
# 編譯安裝git
]# make prefix=/usr/local/git all
]# make prefix=/usr/local/git install
# 安裝後查看git版本
]# git --version
]# git version 2.18.0
3、初始化git
Git下載安裝完成後,在使用git前需要先創建工作目錄並初始化git。
# 創建工作目錄
]$ mkdir data
]$ cd data
# 初始化工作目錄
]$ git init
Initialized empty Git repository in /home/dayi123/data/.git/
]$ git config --global user.name "dayi123"
]$ git config --global user.email [email protected]
# 查看初始化後相關信息
]$ git config --list
user.name=dayi123
[email protected]
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
4、git工作原理與基本操作
(1)git工作原理
對git的操作就是將本地工作目錄的文件同步到索引區,再從索引去上傳到本地倉庫,再從本地倉庫上傳到遠程倉庫,同時還可以將遠程倉庫及本地倉庫的文件下載到本地工作目錄。
(2)git基本操作
操作命令:
git add 加入暫存區(index區域)
git status 查看狀態
git status -s 狀態概覽
git diff 尚未暫存的文件
git diff --staged 暫存區文件
git commit 提交更新,試用”-m”參數可以直接在後面輸入“message”,後跟-a參數可以將所有已跟蹤文件中的執行修改或刪除操作的文件都提交到本地倉庫,即使它們沒有經過git add添加到暫存區。
git reset 回滾
git rm 從版本庫中移除
git rm --cached README 從暫存區中移除
git mv 相當於”mv”、”git rm”、”git add”三個命令
git log 查看提交日誌
# 創建一個文件
]# echo 1213456 > git.test
# 將文件追加到索引區
]# git add git.test
# 將文件提交到本地倉庫
]# git commit -m git.test
# 查看當前文件操作記錄,id爲文件提交id
]# git log
commit 43e7aa5963db3b04691a6e4ec271b7199ab14d8b (HEAD -> master)
Author: dayi123 <[email protected]>
Date: Fri Aug 10 09:06:25 2018 -0400
git.test
5、分支管理
Git的默認所有的操作都在主分支上面,爲了防止開發混亂,可以創建分支,在分支上操作,在分支上操縱執行的命令都是基於當前分支的。
git branch 創建分支
git branch –v 查看分支信息
git branch –merged 查看哪些分支已經被merged到主分支
git branch --no-merged 查看哪些分支沒有被merged到主分支
git branch -d testing 刪除分支
git checkout 分支名稱 切換指針
git checkout --filename 撤銷對文件的修改
git merge 分支名稱 融合分支,將分支融合到主幹
git stash
git tag 查看標籤
git rebase 變基,
# 創建一個分支datatest1
]# git branch datatest1
# 查看當前的分支狀態
]# git status
On branch master
nothing to commit, working tree clean
# 切換到datatest1分支
]# git checkout datatest1
Switched to branch 'datatest1'
# 查看當前分支時已經在datatest1分支
]# git status
On branch datatest1
nothing to commit, working tree clean
#在當前分支創建一個文件並提交到暫存區
]# echo datatest1 > branch2.html
]# git add branch2.html
# 將當前分支merged到主分支
]# git merge datatest1
Already up to date.
# 切換到主分支查看
]# git checkout master
]# git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: branch2.html
# 查看單前那些分區被merged到主分區
]# git branch –merged
datatest1
* master
#給當前庫打標籤
[root@localhost data]# git tag -a v1.0 -m ‘abc’
[root@localhost data]# git tag
v1.0
6、git回滾
回滾命令:git reset [option] [commitid]
選項
--soft 緩存區和工作目錄都不會被改變
--mixed 默認選項。緩存區和制定的提交同步,但工作目錄不受影響
--hard 緩存區和工作目錄都同步到指定的提交
# 修改提交的文件並在此提交
]# echo `date` >> git.test
]# git commit -m "2"
# 獲取commitid
]# git log
commit 24867009ea7f916dc62b3fde3d4d15582fa6258b (HEAD -> master)
Author: dayi123 <[email protected]>
Date: Fri Aug 10 09:39:55 2018 -0400
2
commit 43e7aa5963db3b04691a6e4ec271b7199ab14d8b (–merged, datatest1)
Author: dayi123 <[email protected]>
Date: Fri Aug 10 09:06:25 2018 -0400
git.test
# 恢復到提交前
]# git reset --hard 43e7aa596
HEAD is now at 43e7aa5 git.test
#查看提交後的狀態
]# git log
commit 43e7aa5963db3b04691a6e4ec271b7199ab14d8b (HEAD -> master, –merged, datatest1)
Author: dayi123 <[email protected]>
Date: Fri Aug 10 09:06:25 2018 -0400
git.test
7、使用git對遠程倉庫管理
使用git最終要將本地文件提交到遠程git倉庫中或者將遠程倉庫中的文件下載本地進行操作,常用的操作命令有:
git clone 倉庫地址 將遠程主機文件拉到本地
git pull 認證後更新代碼,合併到之前代碼中去
git fetch 認證後更新代碼,不會合併到之前的代碼中
git push origin master
git remote 獲取遠程庫的信息
git remote –v 獲取遠程庫的詳細名稱信息
git remote add xxx http://xxx 添加地址。默認第一個名程都爲origin
git remote show origin
git remote rename pb paul #變更遠程地址名稱
二、搭建與管理git遠程倉庫gitlab
Gitlab是一個基於Ruby on rails開發的源代碼託管結局按方案,gitlab分爲企業版和社區版兩個版本。
Gitlab集成了nginx postgreSQL redis sidekiq等組件,在安裝gitlab時會自動安裝配置。
1、gitlab的安裝與配置
(1)安裝gitlab
# 配置gitlabyum源爲國內源以方便安裝
]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
# 清除並更新yum緩存
]# yum clean all
]# yum makecache
安裝gitlab,默認安裝安裝的爲最新版本,安裝時可以指定具體的版本進行安裝。
# 安裝gitlab依賴軟件
]# yum install curl policycoreutils openssh-server openssh-clients postfix
# 如果沒有關閉防火牆需要配置防火牆
]# firewall-cmd --permanent --add-service=http
# 安裝gitlab
]# yum install gitlab-ce
(2)配置啓動gitlab
修改gitlab配置文件” /etc/gitlab/gitlab.rb”,綁定自己主機ip地址。
# 將external修改爲自己主機ip地址
external_url 'http://192.168.16.128'
# 啓動gitlab並使修改的配置生效
]# gitlab-ctl reconfigure
(3)登錄gitlab
安裝完成後即可通過瀏覽器登錄gitlab,第一次登錄需要設置密碼。
(4)gitlab的操作命令
gitlab-ctl status:查看gitlab狀態
gitlab-ctl start:啓動gitlab
gitlab-ctl stop:停止gitlab
gitlab-ctl restart:重啓gitlab
gitlab-ctl tail servername:查看gitlab集成的服務日誌
#查看gitlab所有組件的狀態
]# gitlab-ctl status
run: alertmanager: (pid 122565) 1802s; run: log: (pid 122574) 1802s
run: gitaly: (pid 122496) 1804s; run: log: (pid 122547) 1802s
run: gitlab-monitor: (pid 122520) 1803s; run: log: (pid 122525) 1803s
run: gitlab-workhorse: (pid 122480) 1804s; run: log: (pid 122524) 1803s
run: logrotate: (pid 121671) 1900s; run: log: (pid 122530) 1803s
run: nginx: (pid 121613) 1911s; run: log: (pid 122488) 1804s
run: node-exporter: (pid 121854) 1878s; run: log: (pid 122509) 1803s
run: postgres-exporter: (pid 122585) 1801s; run: log: (pid 122591) 1801s
run: postgresql: (pid 121078) 1980s; run: log: (pid 122514) 1803s
run: prometheus: (pid 122535) 1802s; run: log: (pid 122557) 1802s
run: redis: (pid 120945) 1986s; run: log: (pid 122513) 1803s
run: redis-exporter: (pid 122068) 1855s; run: log: (pid 122526) 1803s
run: sidekiq: (pid 121478) 1923s; run: log: (pid 122516) 1803s
run: unicorn: (pid 121406) 1929s; run: log: (pid 122515) 1803s
# 查看redis日誌
[root@localhost ~]# gitlab-ctl tail redis
2018-08-10_16:42:14.05381 120945:M 10 Aug 12:42:14.047 * 10 changes in 300 seconds. Saving...
2018-08-10_16:42:14.05398 120945:M 10 Aug 12:42:14.053 * Background saving started by pid 126469
(5)gitlab服務安裝目錄說明
/var/opt/gitlab/git-data/repositories/:庫默認存儲目錄
/opt/gitlab:應用代碼和相應的依賴程序
/var/opt/gitlab:”gitlab-ctl reconfigure”命令編譯後的應用數據和配置文件,不需要人爲修改配置
/etc/gitlab:配置文件目錄
/var/log/gitlab:此目錄下存放了gitlab各個組件產生的日誌
/var/opt/gitlab/backups/:備份文件生成的目錄
(6)變更配置文件操作
gitlab-ctl show-config :修改配置後驗證配置文件
gitlab-ctl reconfigure :修改配置後重置配置文件
2、gitlab的管理與使用
Gitlab安裝完成後在登錄gitlab,在gitlab創建組、用戶以及項目並關聯起來,用戶在本地生成密鑰對,並將公鑰拷貝到gitlab。同時創建里程碑給用戶分配任務,gitlab對客戶端可以做一下操作:
# 將gitlab上的文件下載到本地
]# git clone [email protected]:java/java1.git
# 在客戶端創建分支完成分配的任務並上傳至gitlab
]# git branch index
]# git checkout index
]# echo "hello world" > index.html
]# git add .
]# git commit -m "index"
# 提交到遠程git倉庫
]# git push origin index
#查看遠程庫的詳細信息
]# git remote -v
origin [email protected]:java/java1.git (fetch)
origin [email protected]:java/java1.git (push)
3、gitlab的備份與恢復
(1)gitlab的備份
備份前需要修改配置文件”/etc/gitlab/gitlab.rb”中的以下內容:
備份文件存放路徑:
gitlab_rails['backup_path'] = '/data/backup/gitlab'
本地保留多少天備份:
gitlab_rails['backup_keep_time'] = 604800
修改完配置文件後需要重新加載配置文件,並手動執行一次備份
#創建備份文件存放目錄並授權
]# mkdir /data/backup/gitlab -p
]# chown -R git.git /data/backup/gitlab
#重新加載配置文件
]# gitlab-ctl reconfigure
# 手動執行一次備份並查看備份
]# /usr/bin/gitlab-rake gitlab:backup:create
]# ls /data/backup/gitlab/
1533992013_2018_08_11_11.1.4_gitlab_backup.tar
# 將備份加入到定時任務中
]# crontab -l
03 2 * * * /usr/bin/gitlab-rake gitlab:backup:create >dev/null 2>&1
(2)gitlab恢復
在恢復前需要停止數據寫入服務,需要停掉”unicorn”服務以及”sidekiq”服務。
# 停掉數據寫入服務
]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
# 執行恢復,backup後面爲備份文件的時間戳及時間
]# gitlab-rake gitlab:backup:restore BACKUP=1533992013_2018_08_11_11.1.4
# 恢復完成後,再次啓動”unicorn”服務及”sidekiq”服務
]# gitlab-ctl start unicorn
]# gitlab-ctl start sidekiq
4、配置gitlab發送郵件功能
在配置gitlab發送郵件前需要確保gitlab服務所在主機已安裝postfix並已啓動,配置發送郵件功能夠將創建用戶信息及分配任務時將相關信息發送相關負責人。
配置郵件發送功能時需要在gitlab配置文件中配置一下參數:
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.126.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "guohongze"
gitlab_rails['smtp_password'] = "your_password"
gitlab_rails['smtp_domain'] = "126.com"
gitlab_rails['smtp_authentication'] = "login"
配置完成後重新加載配置:
#重新加載配置文件
]# gitlab-ctl reconfigure
測試時將郵箱配置爲163郵箱及126郵箱(均開啓了smtp)郵件不能正常發送出去,會報如下的錯誤(可通過” gitlab-ctl tail”命令查看日誌或者登錄gitlab在監控的”已停止”中查看):
Net::SMTPFatalError: 554 DT:SPM 126 smtp1,C8mowAD3ZCIqlohbfq7kGQ--.54263S3 1535677995,please see http://mail.163.com/help/help_spam_16.htm?ip=58.37.62.187&hostid=smtp1&time=1535677995
發送失敗的原因可能是163郵箱將發送內容當做了垃圾郵件處理,導致發送不成功,當使用騰訊企業郵箱時,可以正常發送。