1.1 有了git版本管理后怎么樣
1、自動生成備份
2、隨時回滾
3、知道改動的地方
說明:簡單來講,有新和舊的來對比,回滾高亮檢查多個版本,並且能檢查出來有多少個東西是修改過的.
1.2 介紹常見版本管理軟件
1.2.1 SVN
1.2.2 Git
1.2.3 使用Git的好處
1、沒有網絡依然可以使用Git同步數據
2、SVN非常強烈要依賴網絡,Git沒網也可以用。
1.3 github與gitlab的區分
github是網上公用的倉庫,但是公開的如需保密要交費,所以缺點就是這些,但gitlab是本地倉庫,有保護不收費,搭建方便。
1.4 安裝Git環境准備
cat /etc/redhat-release #查看系統版本,只要是7就沒有問題
uname –r #查看系統內核
getenforce #查看防火牆關閉沒有
systemctl disable firewalld #如果沒有關閉就立即關閉。
vim /etc/selinux/config #修改end為disabled
1.5 安裝Git
rpm –qa git #查看有沒有git,一般系統會自帶
yum install –y git #如果沒有就yum安裝
1.6 Git全局配置
git config --global user.name “你的名字” #例如fxs,不能為中文
git config --global user.email “你的郵箱” #郵箱地址
git config --global color.ui true #語法高亮
git config --list #查看全局配置
說明:記得config后面是兩個--,不是一個,否則會報錯。
1.7 初始化GIT工作目錄
mkdir git_data
cd git_data/
git init #初始化,后面會顯示初始化一個git隱藏目錄,在剛創建的那個目錄下的.git目錄
git status #查看工作區狀態,會顯示主要的分支,現在還沒有東西等信息。
1.8 常規使用(創建數據-提交數據)
touch README #創建一個文件
git status #查看git狀態,此時紅色的,因沒添加到緩存區。
git add README #提交數據到暫存區域,暫存區域是給你檢查錯誤的緩存區,如果有錯可撤銷。
git status #上面git add提交到緩存區后,文件會被綠色。
git commit –m ‘firstcommit’ #提交暫存文件至版本庫,為你每次提交寫一個說明,如不寫說明,不知每次提交是什么東西就亂了,方便查歷史記錄
1.8.1 提交過程小總結
先提交到緩存區域,然后在git commit一次性將緩存區域的東西提交到數據庫。
1.9 刪除暫存區數據
1、沒有添加到暫存區的數據直接rm刪除即可
2、已經添加到暫存區數據:
git rm –cached 要刪的文件名 #這個是將文件從Git暫存區域列表刪除,(並不會刪除當前工作目錄內的數據文件)
git rm –f 要刪的文件名 #將文件數據從Git暫存區和工作目錄一起刪除
1.10 重命名暫存區數據
1、沒有添加到暫存區的數據直接move改名即可
2、已經添加到暫存區數據:
git mv 要改的文件名 改成什么文件名
1.11 查看歷史記錄
git log #查看歷史記錄,每次提交的用戶名稱、賬號、數據提交時間、以及提交說明都會有。
git commit –a –m “xx test” #-a是add的意思,-m是寫說明信息,不寫的話,使用log命令查看不到,這個命令可一次性提交數據到緩存區和寫說明
測試的話:
1、 創建一個文件或目錄,空目錄不行,需目錄里創文件
2、 並且可使用一次性完成添加到暫存區和寫說明。
1.12 git commit參數說明
添加新文件
git add #添加到暫存區域
git commit #提交git倉庫 -m 后面接上注釋信息,內容關於本次提交的說明,方便自己或他人查看
修改或刪除原有文件
常規方法
git add *
git commit
簡便方法
git commit –a –m “注釋信息”
-a 表示直接提交
1.13 查看歷史記錄
git log #查看提交歷史記錄
git log -2 #查看前二條
git log –p -1 #顯示每次提交的內容差異,相當於最近的文件改變信息
git log –stat -2 #stat簡要顯示數據增該行數,這樣能夠看到提交中修改過的內容,對文件添加或移動的行數,並在最后列出所有增減行的概要信息
git log –pretty=oneline #pretty根據不同的格式展示提交的歷史信息(根據版本號與后面注釋查找我們需要的文件)
git log –pretty=fuller -2 #以更詳細的模式輸出提交的歷史記錄(更詳細的顯示前兩行,誰提交、提交時間、注釋內容)
git log –pretty=fomat:“%h %cn” #查看當前所有提交記錄的簡短SHA-1哈希字串與提交着的姓名 ,其他格式見備注(類似AWK切割內容,指定想要看的內容,顯得方便,參數有固定語法)
1.14 還原歷史數據
說明:當你覺得版本后問題,你可以反悔,可以返回指定歷史記錄的版本,head相當於一個軟連接,你指向哪個版本,用戶看到head就是你指向的哪個版本。
git reset --hard HEAD^ #還原歷史提交版本上一次
git reset --hard HEAD~5 #這里可指定前幾個的數量,不然用~的方式去數的話比較麻煩,所以這個方式會好一些。
git reset --hard 3de15d4 #找到歷史記錄還原點的版本,號碼可不寫全,可寫版本的前幾個數,例如版本為asdasd21321,可指定為asdasd2也可指定。
1.15 還原未來數據(當還原歷史記錄反悔后的操作)
說明:當我還原歷史記錄后,前面的歷史記錄會全部沒有,並且文件也沒有了,所以一般人覺得不可以后悔和恢復數據,所以這里還涉及一個命令,可以返回之前所有的數據再重新head軟連接指向
git reflog #查看未來歷史更新點
git reset –hard 版本號前幾個號碼 #使用hard指向那時候的版本,再使用ls或git log –pretty=oneline查看現在所有緩存區的東西與工作目錄下的當時的內容了。
1.16 標簽使用
說明:前面回滾使用的是一串字符串,有長又難記,每一個版本使用一個標簽來方便回滾和查找,下次可快速查找到對應標簽的版本,但是使用標簽的時候,他默認只對現在當前使用的版本來指定標簽。
git tag V1.0 #當前提交內容打一個標簽(方便快速回滾)每次提交都可以打個tag
git tag #查看當前所有的標簽
git show v1.0 #查看當前1.0版本的詳細信息
git tag v1.2 –m “version 1.2 release is test” #創建帶有說明的標簽,-a指定標簽名字,-m指定說明文字
指定當前版本后,新建標簽名字和標簽注釋
git reset –hard 版本號
git reset –hard V1.0
1.17 對比數據
說明:git diif可以對比當前文件與倉庫已保存文件的區別,知道了對README作了什么修改后,再把它提交到倉庫就放心多了。
git diff 文件名 #指定查看對比的文件
舉例:
echo oldboy >>README
git diff README
說明:追加點信息到README文件里,在使用diff查看這個文件,會看到綠色,綠色是新增的內容。
1.18 分子管理
1.18.1 分支原理與原理圖
說明:當剛創建Git的時候,會有個master的主分支字樣,但其實git還有主分支與分支的作用,主分支是是必須要非常穩定的,子分支就是在實際的項目開發中是給開發用的,開發為一個部門,部門為一個dev子分支,在這個dev子分支下,分為划分了好幾個分支,每個開發主要負責一個功能開發來提交到屬於自己的分支,這樣就不會造成多個人去寫一份配置文件造成沖突,有過多的麻煩,所以每個人都有分工和分支來解決代碼沖突,寫完后再統一發到部門dev的分支,再確認代碼沒問題就提交到主分支發放給任何一個用戶,所以分支是團隊合作的分支管理。
1.18.2 創建分支
git branch linux #創建分支
git checkout linux #切換分支
git branch #查看當前分支情況,當前分支前有*號
說明:創建分支后,會將master分支里的文件克隆一份到linux分支里,當你在linux分支里修改文件時,其實跟master是兩條管道了,他的東西你修改不了,你修改的東西只能在linux下修改了,開發人員在linux分支里修改東西和創建東西,是無法在master里創建的,相當於git也有權限管理。
1.18.3 模擬開發在自家分支修改文件時,master無修改(舉例)
開發操作:
[root@oldboyedu-47 git_data]# git branch #當前在linux分支
* linux
master
[root@oldboyedu-47 git_data]# echo "this is test" >>11 #我追加點信息到一個文件里
[root@oldboyedu-47 git_data]# git commit -a -m "this is test" #提交到緩存區,並且寫上文件提交的注釋
linux運維管理人員操作:
[root@oldboyedu-47 git_data]# git checkout master #管理人員切換到master主分支
Switched to branch 'master'
[root@oldboyedu-47 git_data]# cat 11 #打開開發人員在自家分支里修改的11文件,並沒有修改,是空的,說明沒有真正修改文件。
[root@oldboyedu-47 git_data]# git log -1 #查看最新的第一條日志歷史記錄,發現不是我們剛才提交的注釋那條信息,說明確實沒有。
commit eb77741ee3142b37f37002524f0812851a9627fb
Author: “fxs” <“806304019@qq.com”>
Date: Fri Aug 17 21:27:46 2018 +0800
ceshi.test
1.18.4 合並分支(將linux分支的工作成果合並到master分支)
[root@oldboyedu-47 git_data]# git branch #查看現在在哪個分支,必須得切換到master分支下在合並
linux
* master
[root@oldboyedu-47 git_data]# git merge linux #使用merge命令合並linux分支,將指定分支合並到當前master分支
Updating eb77741..c3eb6fe
Fast-forward
11 | 1 + #有新增內容
1 file changed, 1 insertion(+)
[root@oldboyedu-47 git_data]# cat 11 #在查看在開發修改的文件里的信息,確定有新內容了。
this is test
[root@oldboyedu-47 git_data]# git log -1 #查看最新的歷史記錄,也能看到剛才開發提交的那個注釋信息,已經同步過來了。
commit c3eb6fe004849d0e5c4e4d06d5c3ffcf20576ac9
Author: “fxs” <“806304019@qq.com”>
Date: Sat Aug 18 12:45:18 2018 +0800
this is test
1.18.5 子分支在工作當中的規范(習慣)
說明:當將開發人員寫好東西的分支合並到master后,就要立刻刪除分支,當然也可以繼續用,但是根據生產環境而言可能開發是一周或者一個月更新一次代碼,開發忘記自己的分支在哪里了,不然容易混淆亂,常年下去分支會特別多,新來接手的開發就不知道哪個能用哪個是能刪哪個是能動的,因為每個分支修改后的代碼只會保存在自己的分支里,當master更新后的代碼在那個舊的分支是不會有變化的,所以新來的開發來接手更改就不知道哪個是最近版本更新的,所以每一次更新代碼就重新開一個分支,開一個分支相當於克隆master最新代碼到新的分支里,非常快,能接着編輯,這是一個習慣、工作規范。
git branch –d linux #刪除linux分支
1.18.6 手動合並分支
master分支內容與linux子分支內容沖突案例:
master 分支也是單獨一個倉庫,linux 分支也是單獨的一個倉庫,當master與linux分支提交到自己單獨的倉庫緩存區時不會報錯,但使用git merge linux合並linux到master倉庫時,就會出現某某文件內容沖突,因為內容一樣導致合並失敗、需要人工修改文件來進行划分需要哪些內容,當我們打開沖突的文件時,git系統會幫忙划分master分支與linux分支修改的內容划界限來幫忙區分哪部分是誰寫的,哪部分是master自帶的,讓我們人工手動修改
出現這個后,如果不要master分支的內容,就把HEAD那一行,與linux與等號、mastert內容去掉,留下linux的,這樣就是人工合並。
1.19 windows客戶端使用
說明:前面講的都是linux客戶端,在講講windows客戶端使用,安裝Git-2.10.0-64-bit
windows的git,本質是windows上的linux系統
下載地址:https://git-scm.com/download/win 根據自己系統多少位來下載,安裝過程全靠默認Next
步驟1
右鍵可使用命令行模式,也可使用win下的GUI圖形化模式,命令模式也是使用git等命令創建,使用GUI模式先創建倉庫,提交等等這些操作。
步驟2
創建工作目錄
說明:隨后在工作目錄寫上東西,在點擊Rescan重新掃描, ,就可以了,隨后等操作可百度,這些不常用,只是方便,了解下。
1.20 安裝GitLab服務器
說明:GitHub是一個網絡平台,可上傳代碼,員工從這里下載,但是內容公開的,如果要保密要交費,所以也可以在服務器上搭建Git代碼倉庫,但是比較麻煩一些,GitHub每年好像交7美元。
說明:內存需要2個G,他運行一些東西需要大點的空間。
curl -LJO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.9.8-ce.0.el7.x86_64.rpm #官網下載或從百度下載再拉到服務器,因為慢。
yum localinstall -y gitlab-ce-8.9.8-ce.0.el7.x86_64.rpm #解決本地rpm包的依賴問題
gitlab-ctl reconfigure #初始化,就執行一次。
gitlab-ctl status #查看gitlab狀態
通過瀏覽器訪問並設置初始密碼:
10.0.0.7
通過瀏覽器訪問頁面,設置初始化密碼
密碼:12345678 #要求8位,少就不行。
git登陸界面:
賬號:root 密碼:12345678
瀏覽器操作
創建新的項目
填寫項目名稱、項目描述、權限設置,Private是登陸的用戶才能查看,internal是必須登陸的用戶才能克隆,public是能被所有人克隆,克隆是能訪問的意思,能訪問說明能直接復制。
創建項目
提示使用ssh密鑰登陸(否則開發push代碼時每一次都需要提供賬號密碼,在開發機器上使用ssh-keygen -t rsa生成密鑰后,將根目錄下的pub公鑰所有復制到上面授權開發用戶就好。)
可用這個地址登陸,這個oldboyedu-47是系統主機名,如果win沒有host解析是登陸不上去的,所以現在直接用IP訪問。
開發可直接輸入網址可登陸,因為剛保存了我們登陸的cookies會話,用無痕窗口登陸就需要輸入賬號密碼,因為剛設置的是私有倉庫,共有的就不用登陸。
服務器內操作:
[root@oldboyedu-47 tools]# ssh-keygen #生成一個密鑰對,簡稱公鑰,安裝全部回車。
[root@oldboyedu-47 tools]# cat /root/.ssh/id_rsa.pub #打開密鑰文件,復制里面的內容。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMQKObsjIuKLu5tx104wYs/0t1qQXHGscgwXrCRi14Dn4PT564hhe6pp21CkelzCaB1mPoRCKheyL70d5cPW1hg+qpsJr9REh2lLDeG/tpfV4b/y3ekqMZxLwQl7bcG9z1V1C95PMs4GYd/Es6BdlG1/F7XDy/ZAjV+R/VVcNygNFZKf0H6Dg9w+GMzVEcSw5TpRImfW90R9+cShgeU6nfKXGbjDaA4FdoI/L0iV5m6dl4jcs1sGwn6FuKDouKVTLM9t1Y4O5Cc2eulhai+C5i+2hHoH4A+AdGMAjXeRKBUsoz0Gmvz/+WtGR7I5mFosfs7emWL8FElBwpOHnkS8Lr root@oldboyedu-47
點擊警告標志進入頁面
將公鑰內容放置里面,填寫名稱,名稱可隨意填,有描述性就好。
點擊頭頂標志,再點擊剛創建項目的名字。
網頁上有專門的操作教程,可查看使用,第一個是創建新的存儲庫,第二個是在現有文件夾操作的命令,(第一種情況是從開發電腦沒有文件夾的情況下去操作的命令,第二種情況是開發有這個文件夾的目錄再執行的命令。)
服務器操作:
[root@oldboyedu-47 /]# git clone git@oldboyedu-47:root/oldboyedu47.git #執行這條命令,輸入yes,會在/目錄克隆創建一個項目名稱的目錄,想在哪個目錄生成這個工作目錄,就切換到哪個目錄再克隆生成,這個其實像共享目錄似得,想要在本地同步一下這個工作目錄,必須要輸入賬號密碼,但使用了ssh密鑰分發,就登錄不用賬號和密碼了。(開發用戶操作)
[root@oldboyedu-47 /]# cd oldboyedu47/ #進入克隆好的工作目錄
[root@oldboyedu-47 oldboyedu47]# touch 123test #創建一個文件
[root@oldboyedu-47 oldboyedu47]# git add 123test #將文件添加到暫存區
[root@oldboyedu-47 oldboyedu47]# git commit -m "123 git-test" #提交文件至本地倉庫,並且寫上注釋
[root@oldboyedu-47 oldboyedu47]# git push -u origin master #最后提交到剛搭建的gublab服務器。
瀏覽器操作:
點擊頭部、點擊項目名稱
點擊Repository下面的Files,下面就有剛提交的文件,因沒寫內容,所以是空的,也有對應的描述。
服務器插入內容操作:
[root@oldboyedu-47 oldboyedu47]# echo 1234 >>123test #插入內容到文件內
[root@oldboyedu-47 oldboyedu47]# git commit -a -m "mod 123test" #提交到緩存區,並且寫描述
[root@oldboyedu-47 oldboyedu47]# git push -u origin master #提交到Github服務器平台里。
刷新頁面后,點擊文件內會有剛更新的內容。
也可在瀏覽器上編輯內容,並且同步到GitLab服務器內:
點擊Edit編輯
填寫內容
下面滾動,點擊這個按鈕更新。
GitLab服務器更新內容,並查看文件內容是否更新:
[root@oldboyedu-47 oldboyedu47]# git pull #下載代碼
[root@oldboyedu-47 oldboyedu47]# cat 123test #查看更新文件的內容,看到已經更新了。
1234
hello
test
ceshi!! QQ806304019
GitLab代碼小總結:
git push -u origin master #推送代碼
git pull #下載代碼
說明:這些命令都比較常用。
1.21 開發使用pycharms將開發代碼上傳到GitLab平台(默認是在master主分支里操作)(開發的軟件與git倉庫建立連接,進行push等操作)
打開pycharms,點擊VCS-第六個-Git
填寫這個地址到pycharms界面。
因為win沒有解析oldboyedu的域名IP,所以改成GitLab服務器的IP地址。
輸入登錄GitLab網頁的賬號與密碼
連接這個git項目成功。
點擊Clone
詢問:克隆完了是要打開這個工作目錄嗎?點擊yes
詢問是打開一個新窗口,還是默認在新窗口,點擊OK。
會出現一個新的目錄,並且有工作目錄中新的文件,里面可以填寫文件內容。
點擊這個配置選項,提交到緩存區,和填寫注釋信息。
填寫注釋信息,並且提交緩存區
填寫郵件地址,點擊下一步。
點擊push
點擊網頁刷新
點擊Branch或點擊下面那個就是我們剛py提交的注釋。
1.22 在Pycharms里新建子分支進行工作
在Pycharms的項目右鍵點擊新建分支的設置
新建一個分支
分支名字叫做linux
切換分支的設置
新建linux分支的時候,已經默認進入linux分支里面了,所以如果要切換到其他分支的時候可以在里面設置切換。
切換到linux分支的時候,點擊文件進行修改。
然后按照上面的操作,進行提交注釋信息。
點擊push
在網頁上,點擊刷新
點擊Branches分支
看到新的分支出現后,會有linux分支出現,有master並且出現剛才創建的linux。
順着linux分支-123test文件-點擊進去會看到linux分支修改的內容。
這里有合並請求
提交合並請求
接受合並請求
點擊左上方名字,找到master分支的文件,看下是否合成在一個文件里了。
點擊進入master分支
點擊123test文件,看到linux分支的文件內容,已經合並到master一起了。
說明:以前就是分支修改文件在合並到主分支里了。
運維要操作的內容:以上都是開發要做的,我們運維只需git push –u origin master下載代碼,然后git put更新代碼。
1.23 Gitlab備份管理
vim /etc/gitlab/gitlab.rb #編輯配置文件
#配置文件中最后插入參數。
參數說明:第一個是備份的路徑,第二個是文件保留時間,默認為秒單位,現在設置是7天。
1.24 Gitlab備份的數據恢復
停止數據寫入服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl status #檢查兩個寫入數據的服務是否down掉。
gitlab-reke gitlab:backup:restore BACKUP=源碼備份文件名 #注意不加.tar后綴,在備份目錄找源碼文件,文件在備份目錄找,提示默認yes。
gitlab-ctl restart
gitlab-ctl status #檢查是否啟動成功
說明:過一會在訪問gitlab頁面,才可看到恢復的倉庫。
1.25 亞哥講座
hequn
告訴上面誰使用git上傳,用戶是誰
只要被跟蹤過來的文件,進行更改,就要重新commit 提交,相當於做任何一個操作(移動或更改內容),就要重新提交一次。
不能直接使用MV 否則要重新提交,特別麻煩 所以使用git mv 就不用提交,用GIT系統內置就好一些。
新建用戶組oldboy,設置這個用戶組的權限(公開,還是需登錄),新建用戶dev,並且設置8位密碼,新建項目,控制這個項目的用戶組是oldboy,項目名稱為test_web,最后點擊oldboy用戶組將dev添加進去並且設置dev開發角色。 隨后點擊扳手點擊test_web項目在git服務端初始化克隆好好倉庫(git clone)。
開發: 使用剛創建的dev賬號登錄web界面,點擊test_web項目,克隆好倉庫到本地,隨后無權限提交到master,所以在客戶端創建dev分支,在切換到dev分支,創建文件,並且提交到本地倉庫(暫存區域 git add . git commit -m “123”),隨后在瀏覽器切換到dev分支可看到文剛創建的文件就在里面,在dev分支右上角創建合並請求,填寫合並理由留下歷史記錄,最后點擊創建請求。
開發老大:在瀏覽器登錄administrator賬號,找到dev發送的合並請求,點擊dev發過來的請求,然后點擊Merge確認合並,此時網頁上同步了,但是git服務端工作目錄沒有同步過來,需要手工git pull下載同步下來,就可以了。
502錯誤可能是與jenkins端口8080沖突
java環境沖突。