01. Git常用操作速查

@[toc]

一、Git配置

使用 Git Bash 控制臺操作

  1. 初始化
git init
  1. .git文件夾下的文件含義

    • HEAD 文件指示目前被檢出的分支
    • description 用來顯示對倉庫的描述信息
    • config 文件包含項目特有的配置選項,本項目的配置,全局的在 對應(yīng)系統(tǒng)相應(yīng)用戶的文件夾/.gitconfig
    • info 目錄包含一個全局性排除文件
    • hooks 目錄包含客戶端或服務(wù)端的鉤子腳本
    • index 文件保存暫存區(qū)信息
    • objects 目錄存儲所有數(shù)據(jù)內(nèi)容
    • refs 目錄存儲分支的提交對象的指針
    • branches 新版本已經(jīng)廢棄無須理會
  2. 查看用戶名與郵件配置(查看改動記錄非常方便)

git config user.name
git config user.email
  1. 設(shè)置(修改)用戶名與郵件
git config --global user.name "hahadasheng"
git config --global user.email "liuchnegdage@sina.com"
  1. 修改配置信息(低版本)
git config --global --replace-all user.name "lc"

可以直接修改全局配置文件,在用戶主目錄下;比如Windows的在當(dāng)前用戶的用戶文件夾下 C:\Users\administrator\.gitconfig

  1. 允許命令超長路徑
# git 設(shè)置支持超長路徑
git config --system core.longpaths true
  1. 配置代理 一般正規(guī)點的公司都有防火墻,上網(wǎng)需要代理服務(wù)器
git config --global http.proxy http://some.name.you.know:80

二、鑒權(quán) 拉取代碼

1). SSH 推薦

  1. 生成非對稱加密密鑰對
ssh-keygen
  1. ~/.ssh/id_rsa.pub 的內(nèi)容拷貝到托管平臺

  2. 克隆代碼

git clone
  1. 拉去代碼
git pull

2). HTTP(S) 不方便,不推薦

  1. 直接 clone (指定文件可選,建議不寫) 輸入托管平臺的用戶名密碼
git clone <url> [localDirName]
  1. 緩存用戶名密碼
# 默認(rèn)15分鐘
git config –-global credential.helper cache
# 設(shè)置為一個小時
git config credential.helper ‘cache –timeout=3600’ 
# 永久記住秘密
git config --global credential.helper store

~/.gitconfig 全局配置文件下會記錄此配置

[credential]
    helper = store

三、提交代碼一般流程

工作區(qū):正在編輯的文件夾下的文件,沒有通過 git add添加的文件
暫存區(qū):通過git add添加但是沒有git commit的文件所在的區(qū)域

  1. 拉取遠(yuǎn)程代碼
git pull
  1. 如果拉取失敗, 一般是本地未提交的修改的文件與與服務(wù)器提交記錄的文件有重合
git stash

git stash list 可以查看當(dāng)前本地stash的棧中有哪些修改,棧中可以存放多個分支的本地修改

git pull
git stash pop

注意,需要stash棧中棧頂對應(yīng)的分支修改與當(dāng)前一致,否則可能導(dǎo)致本地修改丟失

git stash list //查看本地stash棧中的記錄
git stash apply stash@{0} //選中對應(yīng)的記錄應(yīng)用到當(dāng)前工作區(qū)域,記錄不會被刪除
  1. 檢查是否有沖突,如果有則手動解決

  2. 檢查改動文件 (可選),顯示為紅色

git status
* Untracked: 未跟蹤,一般為新增文件,此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.
* Modified: 文件已修改, 僅僅是修改, 并沒有進(jìn)行其他的操作.
* deleted: 文件已刪除,本地刪除,服務(wù)器上還沒有刪除.
* renamed:文件名稱被改變
  1. 如果發(fā)現(xiàn)無意編輯了一個文件,可以將其還原到修改前的狀態(tài)
# 還原指定文件
git checkout -- <fileName>

# 還原所有文件
git checkout .
  1. 將文件添加到暫存區(qū)
# 添加工作區(qū)指定修改文件到暫存區(qū)
git add <file>

# 添加所有修改文件到暫存區(qū)(忽略文件除外)
git add . 

此時 git status 時在暫存區(qū)的文件顯示為綠色

  1. 如果想取消添加到暫存區(qū)
git rm --cached <fileName>

--cached 作用為指定暫存區(qū);不寫默認(rèn)則為工作區(qū)

  1. 提交到本地倉庫
git commit . -m "commit message"

.標(biāo)識選擇暫存區(qū)所有文件,如果只需要指定文件換成對應(yīng)文件名即可。

  1. 最簡單的提交方式
git push

四、diff 比較不同

1). 同個分支下的比較

  1. 查看工作區(qū)與暫存區(qū)文件的修改情況
# 查看所有文件
git diff

# 查看指定文件
git diff <fileName>

紅色的-號代表刪除的內(nèi)容;綠色的加號表示添加的部分

  1. 查看暫存區(qū)與本地版本庫的對比
# 查看所有文件
git diff --cached

# 查看指定文件
git diff --cached <fileName>
  1. 查看歷史提交記錄的哈希值
git log

commit 后面的哈市值則為對應(yīng)的提交哈希值

  1. 工作區(qū)與對應(yīng)的歷史提交對比
git diff hash值 [<fileName>]
  1. 暫存區(qū)與提交記錄對比
git diff --cached hash值 [<fileName>]
  1. 將工作區(qū)和暫存區(qū)文件與最新的版本庫比較
git diff HEAD

HEAD代表當(dāng)前所在的分支名,如果想比較其他分支可以將其改為其他分支名

  1. 比較兩個歷史記錄
git diff hash值1  hash值2
  1. 工作區(qū)與歷史版本進(jìn)行比較
# 指定比較的歷史版本
git diff <commit_hash>

# 比較最近的一次提交
git diff
  1. 比較兩個歷史版本
git diff <commit_hash1> <commit_hash2>

2) 不同分支下的比較

  1. 查看兩個不同的分支有哪些文件不一樣
git diff branch1 branch2 --stat
  1. 顯示文件具體修改
git diff branch1 branch2 filename
  1. 顯示全部文件修改(如果文件多則會眼花繚亂)
git diff branch1 branch2
  1. 查看一個分支有而另一個沒有
# 查看dev有的記錄但是master沒有的記錄
git log dev ^master
  1. 單純比較差異,顯示所有記錄
git log branch1..branch2

有綠色顯示的表示只在哪個分支上有,另一個沒有

  1. 查看各個記錄存在于哪些分支上
git log --left-right develop...test

commit后面有<表示develop; >表示為test分支的提交記錄

  1. 顯示當(dāng)前分支與其他分支最新版本進(jìn)行比較
git diff <orher branch>
  1. diff可以跨分支進(jìn)行對比
# 當(dāng)前最新與其他分支的歷史版本進(jìn)行對比 `git log`查找commit_hash
git diff <other_commit_hash>

# diff 可以比較任意分支任意提交之間的差異
git diff <commit_hash1> <commit_hash2>

五、Git忽略文件權(quán)限問題

  1. Git會記錄文件的權(quán)限,如果本地與版本庫同一個文件需要合并,如果存在權(quán)限不一致則會產(chǎn)生沖突,實際工作中是幾乎不會讓Git記錄文件的權(quán)限,可以配置一下讓Git忽略文件的權(quán)限
# 項目局部配置
git config core.filemode false
# 全局配置
git config --global core.filemode false

六、忽略指定文件或目錄

項目中的一些編譯文件,或者不想提交的配置文件等可以過濾掉

  1. 在項目的工作區(qū)創(chuàng)建一個 .gitignore 的文件,Win下建議使用notepad++的另存為進(jìn)行創(chuàng)建,直接創(chuàng)建文件會失敗
  2. 每行代表一個忽略的文件,支持通配符,支持文件夾,支持文件
# 文件的忽略方式
.jeckins.ini

# 文件夾以及其下的所有文件
target/
.idea/

# 通配符
*.iml

# 防止通配符導(dǎo)致向提交的文件被忽略(如果是直接忽略則無效)
!want.jar
  1. 添加忽略的文件 .gitignore配置有誤的檢查
git check-ignore -v <fileName>
  1. 強(qiáng)制添加被忽略的文件
git add -f haha.iml
  1. 保留忽略的文件夾下部分文件寫法
# 忽略的文件夾
test/*

# 過濾的被忽略的文件夾下的文件
!test/index.html

上述的*號通配符必須得保留才能生效

  1. 忽略已經(jīng)提交commit的文件(夾),先在.gitignore中設(shè)置該文件(夾)為忽略,然后從暫存區(qū)中刪除
# 移除緩存中的文件
git rm --cached <fileName>
# 如果是文件夾則需要在加一個參數(shù)
git rm -r --cached <dirName>

# 提交此次修改,由于忽略文件中已經(jīng)忽略了此文件夾和文件,需要強(qiáng)制添加 -f
git add -f <dirName>

七、分支管理

  1. 查看本地分支 綠色表示當(dāng)前分支
git branch
  1. 查看本地和遠(yuǎn)程所有分支
git branch -a
  • 查看遠(yuǎn)程倉庫信息
git remote show origin
  1. 切換到遠(yuǎn)程或者本地分支(遠(yuǎn)程或者本地已經(jīng)存在的分支)
git checkout <exist branch>
  1. 新建本地分支 (將當(dāng)前分支的版本拷貝過去)
git checkout -b <new branch>
  1. 將本地新建的分支推送到服務(wù)器
git push --set-upstream origin <new branch>
  1. 合并分支
git merge <other branch>

查看合并的結(jié)果 git log 哈希值后面有個(HEAD -> branch1,branch2) 就是合并的記錄

  1. 普通刪除分支,可避免數(shù)據(jù)丟失
git branch -d <branch name>
  1. 如果普通無法刪除,使用強(qiáng)制刪除分支
git branch -D <branch name>
  1. 恢復(fù)刪除的分支
git branch <branch name> <hash value>

八、回滾提交,不會滾代碼

工作中,有時提交的代碼審核沒有過(CI/KW等),被abandon了;后續(xù)可以在本地進(jìn)行追加提交(中途不能有自己的新提交),但是有時候就想放棄此次提交,或者本地提交后想要丟棄,可以使用reset命令

  1. 查看需要回滾的提交節(jié)點,拷貝對應(yīng)的哈希值(推薦直接在idea工具中操作)
git log
  1. 進(jìn)行回滾
git rebase //將自己的提交放在前面,這樣下方的reset就只回到上個版本就可以了
git reset 哈希值
  1. 如果想撤銷最近的一次提交
git reset HEAD^
  1. 如果想撤銷修改的代碼
# 撤銷某個文件并查看狀態(tài)
git checkout filename && git status

# 撤銷所有的修改到上次提交的位置
git checkout .

九、刪除過期的分支,清理無意義數(shù)據(jù)

清理不需要的分支數(shù)據(jù),提高響應(yīng)速度

  1. 查看所有分支列表
git branch -a

紅色的為遠(yuǎn)程分支

  1. 刪除遠(yuǎn)程分支
git push origin --delete <remote branch>

控制臺顯示 deleted 表示刪除成功

  1. 將遠(yuǎn)程分支與本地分支進(jìn)行對比
git remote prune origin
  1. 查看本地分支的標(biāo)注情況
git branch -vv

對應(yīng)分支后面如果有:gone的標(biāo)識則表示遠(yuǎn)程分支已經(jīng)被刪除,該分支可以被清理

  1. 刪除本地分支
git branch -d <branchName>

十、配置多個遠(yuǎn)端倉庫:把代碼推送到不同的服務(wù)器

1) 每個倉庫分別對應(yīng)一個遠(yuǎn)程地址

配置多個遠(yuǎn)程倉庫

  1. 查看當(dāng)前地址
git remote -v

默認(rèn)的倉庫為origin; 顯示的信息有pushfetch兩種
執(zhí)行git push會調(diào)用對應(yīng)的push地址,執(zhí)行git fetch
則會調(diào)用fetch地址;拉取代碼默認(rèn)情況下會產(chǎn)生一個遠(yuǎn)程倉庫origin,
并且對應(yīng)的push地址也只有一個。

補(bǔ)充:git fetch 為只拉取更新,不進(jìn)行合并 git pull = git fetch && git merge

# 將某個遠(yuǎn)程主機(jī)的更新全部取回本地
git fetch <remoteAddr>

# 取回特定分支的更新
git fetch <remoteAddr> <branchName>

# 查看取回的信息
git log -p FETCH_HEAD
  1. 添加多個倉庫

一般默認(rèn)的倉庫名為origin

git remote add <新的倉庫名> <遠(yuǎn)程倉庫地址>
  1. 提交代碼時選擇倉庫
# review 提交方式
git push origin head:refs/for/master

# 直接提交方式
git push github master

# 不寫倉庫則push到默認(rèn)倉庫
git push
  1. 修改默認(rèn)指定倉庫
git push -u github
  1. 刪除倉庫
# 刪除指定的倉庫
git remote remove <倉庫名稱>

2) 一個倉庫對應(yīng)多個遠(yuǎn)程地址

執(zhí)行一條命令,將代碼往兩個地址同時推送

  1. 向origin倉庫中添加多個地址
git remote set-url --add origin <remoteAddr>

十一、代碼覆蓋

1) 本地覆蓋遠(yuǎn)端

如果不小心提交了錯誤的信息到遠(yuǎn)程,可以用新的提交來覆蓋,但是如果是敏感信息,這種方式顯然有缺點,因為提交記錄中還是可以查看到;不推薦使用此種方式;

  1. 查看需要回滾提交的哈希值
git log
  1. 回滾本地提交,不會滾代碼改動
git reset <哈希值>
  1. 強(qiáng)制推送到遠(yuǎn)程
git push origin -f

此類命令比較危險,一般在托管品臺比如GitLab上會對類似的操作進(jìn)行權(quán)限設(shè)置

2) 遠(yuǎn)端覆蓋本地

  1. 拉取遠(yuǎn)程最新代碼,但是不進(jìn)行合并
git fetch
  1. 將當(dāng)前工作的差異部分丟棄掉,完全與目標(biāo)保持一致
git reset --hard origin/master

這里origin/master則是目標(biāo)比較分支

十二、恢復(fù)已刪除的分支,文件等

前提是沒有執(zhí)行 git gc 清除信息,一般如果不手動執(zhí)行此命令,git會對那些無用的object保留很長的時間

1) 恢復(fù)已刪除的分支

  1. 顯示分支管理命令 找到要恢復(fù)分支的某次提交前面的 commit_id
git reflog show
  1. 建立新的分支并進(jìn)行恢復(fù)
git checkout <新取一個分支名稱> <commit_id>

通過此種方式則重建的刪除的分支

2) 回滾reset操作

如果想找回git reset之前的提交記錄

  1. 查看操作歷史
git reflog
  1. 找到reset之前的commit_id并回退到那個id即可
git reset --hard <commit_id>

3) 從歷史版本中找回刪除的文件

  1. 查看操作歷史
git reflog
  1. 找到需要找回對應(yīng)的commit_id
git checkout <commit_id> <需要找回的文件名稱>

十三、單獨回滾代碼 記錄不變只回滾代碼

reset命令會回滾記錄,如果遠(yuǎn)程由此記錄,并禁止強(qiáng)制提交;則此時可以
使用revert命令只回滾代碼

  1. 查詢需要回滾代碼的分支commit_hash(比如向撤銷此次提交的代碼修改)
git log
  1. 回滾需要撤銷的提交
git revert <對應(yīng)的commit_hash>

注意,撤銷對飲的提交,revert后面的hash就是對應(yīng)的那次提交

  1. 命令執(zhí)行后會彈出一個合并代碼的提示框,編輯好信息后 esc :x進(jìn)行保存退出
    再通過git log發(fā)現(xiàn)多了一條Revert的記錄,說明已經(jīng)成功;此時可以用git diff <被回退的提交hash>
    可以發(fā)現(xiàn)被回退的提交修改已經(jīng)被放棄了。

  2. 提交代碼

git push

在使用 revert 去恢復(fù)某個版本代碼時,Git 只會撤銷指定版本的代碼,對指定版本后的所有版本不會有任何影響。
比如說你提交了 1、2、3 三個版本,當(dāng)你撤銷版本2的時候,會生成版本4,但是不會對版本3產(chǎn)生影響。

git reset 與 git revert的比較

  • git reset: 會改變之前的版本記錄,可能會導(dǎo)致不能提交到遠(yuǎn)程倉庫;
  • git revert: 只會撤銷某個版本的代碼,然后在當(dāng)前分支增加一條版本新記錄;
  • git revert: 只會撤銷指定版本的代碼,而不是指定版本后的所有版本。

十四、合并分支merge

1) 全部進(jìn)行合并,不過濾特定文件

  1. 切換到需要合并的分支,比如將dev合并到test分支
git checkout test
  1. 將dev合并到test分支
git merge dev
  1. 如果出現(xiàn)沖突,建議使用工具手動解決沖突,(比如使用IEDA的Git解決沖突)

  2. 將解決后的沖突文件添加到暫存區(qū)并提交一個新的版本 (工具可能會自動執(zhí)行這一步)

git add . && git commit -a

解決沖突后的提交需要使用-a選項

2) 忽略有沖突文件的合并

  1. 上述案例中的dev項目工作區(qū)添加一個文件 .gitattributes 寫入內(nèi)容
<忽略沖突文件的文件名> merge=ours
  1. 按照上述合并操作進(jìn)行合并

合并后的test分支中對應(yīng)文件如果和dev有沖突則保留原來的內(nèi)容,如果沒有沖突也會進(jìn)行合并

十五、鉤子事件

Git進(jìn)一步學(xué)習(xí)可以研究哈,目前只是了解

1) 客戶端鉤子事件

  1. 鉤子事件在一些特定命令執(zhí)行時觸發(fā)
  2. 鉤子函數(shù)腳本在 .git/hooks 下面
  3. 鉤子語法使用的為shell腳本,部分混雜了Perl代碼,可以Pytho或者其他腳本語言編寫
  4. 鉤子觸發(fā)的腳本文件需要正確命名,以.sample結(jié)尾的腳本文件,
  5. 一般情況下鉤子觸發(fā)的鉤子名稱
鉤子名字 觸發(fā)時間
pre-commit 執(zhí)行g(shù)it commit命令完成前被執(zhí)行。
prepare-commit-msg 在執(zhí)行完pre-commit鉤子之后被調(diào)用。
commit-msg git commit執(zhí)行完成后被調(diào)用。
post-commit post-commit鉤子在commit-msg鉤子之后立即被運行 。
post-checkout post-checkout鉤子在使用git checkout命令時候會被調(diào)用。
pre-rebase pre-rebase鉤子在使用git rebase命令發(fā)生更改之前運行
pre-receive pre-receive鉤子在有人用git push向倉庫推送代碼時被執(zhí)行。
update update 鉤子在pre-receive之后被調(diào)用,分別被每個推送上來的引用分別調(diào)用。
post-receive 在成功推送后被調(diào)用,適合用于發(fā)送通知。

2) 服務(wù)端鉤子使用 服務(wù)端接受推送時事件處理

  1. 服務(wù)端的鉤子同樣在 .git/hooks
  2. 服務(wù)端的鉤子配置一般是在托管平臺進(jìn)行管理

十六、合并代碼保留提交記錄:rebase功能的使用

rebase與merge功能類似,但有所不同

  1. git rebase 會將另外一個分支提交的所有新版本記錄復(fù)制到當(dāng)前分支中

2.切換到合并的分支,比如test

git checkout test

git rebase dev
  1. merge與rebase的相似點:代碼層面沒有什么變化

  2. merge與rebase的區(qū)別: 版本記錄的變化

    • git merge命令合并代碼之后,版本記錄會按照時間順序排序,并自動產(chǎn)生一個Merge branch的版本;撤銷操作會很麻煩
    • git rebase命令合并代碼之后,版本記錄會將目標(biāo)分支的版本放在后面,然后再將當(dāng)前分支的版本記錄放在前邊,不會產(chǎn)生其他類似Merge branch的版本。撤銷操作會相對容易

十七、復(fù)制指定記錄到當(dāng)前分支: cherry-pick

將另外一個分支中的某個版本單獨復(fù)制到當(dāng)前的分支中來; 建議在類似IDEA工具中進(jìn)行操作,如果出現(xiàn)沖突可以很方便解決

  1. 在對應(yīng)分支確定需要cherry-pick的提交
git log
  1. 切換到需要合并的分支
git cherry-pick <commit_hash>

十八、工作區(qū)暫存 stash解決提示代碼未提交問題

git stash 命令會將當(dāng)前工作區(qū)未提交的改動放在一個stash棧中,此時代碼會與最新的提交保持一致,如果切換到
其他分支或者有改動再次執(zhí)行,此時棧頂?shù)脑貢兂勺钚聅tash的記錄

還有種場景;在git pull時發(fā)現(xiàn)本地未修改未提交的文件與在服務(wù)器最新提交的記錄中也有修改導(dǎo)致pull失??;
此時可以使用git stash && git pull && git stash pop 合并修改,如果有沖突則解決沖突。

  1. 執(zhí)行stash命令
git stash
  1. 查看stash棧中存放的記錄
git stash list
  1. 從stash棧中恢復(fù)棧頂?shù)牡奶峤?并保持棧頂?shù)挠涗?/li>
git stash apply
  1. 從stash棧中恢復(fù)指定的提交,并保持對應(yīng)的記錄
git stash apply <編號如stash@{0}>
  1. 從stash棧中彈出棧頂?shù)脑兀瑮V斜粡棾龅膭t不會保留
git stash pop
  1. 清除stash棧中指定的提交
git stash drop <提交的id比如stash@{1}>
  1. 清空stash棧中的信息
git stash clear

十九、解決臨時緊急任務(wù)的開發(fā)思路

  1. 場景復(fù)現(xiàn):dev分支正在開發(fā)下一個迭代版本,預(yù)計2個月;test分支為當(dāng)前發(fā)布線上版本;
    先有一個必須在一周上線的緊急任務(wù)!

  2. 設(shè)計思路:

    1. 從test中新建一個分支 temp,并在temp中完成緊急開發(fā)。
    2. 將temp中新的提交記錄通過git rebase的方式經(jīng)提交記錄復(fù)制到test版本中進(jìn)行測試上線
    3. 為了避免將來代碼合并產(chǎn)生沖突,將temp中的新提交git rebase到dev開發(fā)分支中

二十、代碼沖突解決總結(jié)

  1. git mergegit pull命令導(dǎo)致的沖突,處理完沖突后使用git commit -a;
  2. git rebase命令導(dǎo)致的沖突,處理完沖突之后使用git rebase --continuegit rebase --skip
  3. git stash apply命令導(dǎo)致的沖突,處理完沖突之后使用git add .即可。
  4. 終極解決方案:使用IDEA或者烏龜git處理沖突,直觀、大氣、方便、效率高

二十一、Git瘦身方案

1) 克隆最后一個版本,避免Git拉去所有的歷史版本導(dǎo)致緩慢

  1. 本地克隆
git clone <remoteAddr> --depth==1

代碼不會改變,只是歷史提交記錄只有一條

2) 清空版本記錄

  1. -新建本地干凈分支,只保留最后一次版本信息
git checkout --orphan <new_branch_name>
  1. 刪除久的分支
git branch -D <branch_name>
  1. 將新的分支重命名為原有分支
git branch -m <branch_name>
  1. 強(qiáng)制推送到遠(yuǎn)程服務(wù)器(臨時關(guān)閉強(qiáng)制推送限制)
git push -f origin <branch_name>

3) 清理大文件(比較高級)

使用git branch-filter可以遍歷 Git 的版本歷史信息

  1. 找出大文件對應(yīng)的hash值,這里一找出前5個為例
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
  1. 根據(jù)hash值找到對應(yīng)文件名
git rev-list --objects --all | grep <hash_value>
  1. 執(zhí)行刪除文件命令
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file_name>'
  1. 刪除無用的記錄信息
rm -rf .git/refs/original/  && git reflog expire --expire=now --all
  1. 重新建立文件與 Git 倉庫的關(guān)聯(lián)關(guān)系
git fsck --full --unreachable
  1. 重新壓縮代碼,減少倉庫體積
git repack -A -d
  1. 執(zhí)行GC,清理垃圾
git gc --aggressive --prune=now
  1. 強(qiáng)制推送到遠(yuǎn)程
git push --force origin master

二十二、Docker快速搭建GitLab

1) 快速搭建Docker環(huán)境

Linux環(huán)境Docker安裝略

  1. 拉去鏡像
docker pull gitlab/gitlab-ce
  1. 創(chuàng)建本地持久化卷
mkdir -p ~/config/gitlab/config
mkdir -p ~/config/gitlab/logs
mkdir -p ~/config/gitlab/data

假設(shè)默認(rèn)用戶為ubuntu 則 ~ = /home/ubuntu

  1. 運行容器
docker run --detach --publish 8443:443  \
    --publish 8090:80 --publish 2222:22 \
    --name gitlab --restart always 
    -v /home/ubuntu/config/gitlab/config:/etc/gitlab   \
    -v /home/ubuntu/config/gitlab/logs:/var/log/gitlab \
    -v /home/ubuntu/config/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce

進(jìn)入http://localhost:8090即可進(jìn)入Gitlab頁面

  1. 查找容器ID
docker ps |grep gitlab/gitlab-ce
  1. 進(jìn)入容器
docker exec -it <容器ID> sh
  1. GitLab配置文件路徑 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
  1. GitLab容器內(nèi)總開關(guān)命令
gitlab-ctl restart  // 重啟
gitlab-ctl stop      // 停止
gitlab-ctl start     // 啟動

二十三、補(bǔ)充

  1. git tag標(biāo)簽的使用
  2. 遠(yuǎn)端分支強(qiáng)制覆蓋本地對應(yīng)分支
git fetch --all  
git reset --hard origin/<branch_name>
git pull
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,914評論 2 372