Git&Github
1.版本控制
1.1.版本控制介紹
記錄歷史狀態,便於追溯,有後悔藥吃
1.2.版本控制工具介紹
1.2.1.版本控制工具應該具備的功能
-
協同修改
多人並行不悖的修改服務器端的同一個文件
-
數據備份
不僅保存目求和文件的當前狀態,還能夠保存每一個提交過的歷史狀態
-
版本管理
在保存每一個版本的文件信息的時候要做到不保存重複數據,以節約存儲空間提高運行效率。這方面SVN採用的是増量式管理的方式,而Gi採取了文件系統快照的方式。
-
權限控制
對團隊中參與開發的人員進行權限控制
對團隊外開發者頁獻的代碼進行軍核一Git獨有
-
歷史記錄
査看修改人、修改時間、修改內容、日誌信息將本地文件恢復到某一個歷史狀態
-
分支管理
允許開發閉隊在工作過程中多條生產線同時推進任務,進一步提高效率
1.2.2.版本控制工具介紹
-
集中式版本控制工具
CVS、SVN、VSS
-
分佈式版本控制工具
Git、Mercurial、Bazaar、Darcs…
2.Git簡介
2.1 Git優勢
-
大部分操作在本地完成,不需要聯網
-
完整性保證
-
儘可能添加數據而不是刪除或修改數據
-
分支操作非常快捷流暢
-
與 Linux命令全面兼容
2.2 安裝Git
2.3 git 結構
2.4 Git 和代碼託管中心
代碼託管中心的任務是維護遠程庫
-
局域網環境下
GitLab 服務器
-
外網環境下
Github
碼雲
2.5 本地庫和遠程庫
團隊內開發
團隊外部開發
3.Git命令操作
3.1 本地庫操作
3.1.1 本地庫初始化
查看隱藏文件命令,Linux以 · 開頭的文件都是隱藏資源
ls -lA
-
進入想要創建git倉庫的目錄如(F:\GitHubLocalWareHouse),執行
git init # 初始化 ls -lA # 查看 .git目錄
注意: .git 目錄中存放的是本地庫相關的子目錄和文件,不要刪除,不要亂改。
-
設置簽名
-
形式
用戶名:xxx
Email地址:xxx
-
作用:
區分不同開發人員的身份
-
辨析:這裏設置的簽名和登陸遠程庫(代碼託管中心)的賬號密碼沒有關係。
-
命令
項目級別/倉庫級別:僅在當前本地倉庫範圍內有效
git config user.name [用戶名] git config user.email [Email]
系統用戶級別:登陸當前操作用戶範圍
git config --global user.name [用戶名] git config --global user.name [Email]
注意: 優先級採用就近原則,項目級別優先於系統用戶級別,二者都有,採用項目級別簽名。二者都沒有不允許。
項目級別設置的簽名保存在
.git/config
中,該文件爲隱藏文件。系統用戶級別保存在
~/.gitconfig
中 ,該文件爲隱藏文件。
-
3.1.2 基本操作
查看工作區、暫存區狀態
git status
將文件的新建或修改從工作區添加到暫存區
git add [filename]
將文件從暫存區撤回來
git rm --cached [filename]
將文件從暫存區提交到本地庫
git commit [filename] # 進VIM編輯器寫修改提示
git commit -m "提示內容" [文件名] #這種做法更常見
注意:** 不寫文件名將提交暫存區的所有文件
3.1.3 對版本歷史記錄進行查看
(1)查看歷史記錄:
git log # 查看log日誌
git log --pretty=oneline # 每行一條顯示日誌
git log --oneline # 和上面相同
git reflog # 顯示需要移動的步數
(2)執行版本前進後退的三種基本方式(操作HEAD指針)
-
基於索引值操作【推薦】
查看當前版本所在的位置
git reflog
# 回退到某一個版本 git reset --hard [回退的版本號]
# 前進到某一個版本 git reset --hard [前進的版本號]
-
使用^符號(只能後退,不能往前)
git reset --hard HEAD^ #加一個^符號回退一步,多個回退多步。
-
使用~符號(爲了化解回退多步時^的尷尬)(同樣只能後退)
git reset --hard HEAD~3 # 回退3步
(3)reset 命令的三個參數對比
-
–soft
僅僅在本地庫移動HEAD指針。
-
–mixed
在本地庫移動HEAD指針
重置暫存區
-
–hard
在本地庫移動HEAD指針,同時重置暫存區和工作區。
(4)刪除文件的找回
回退到沒有刪除的那個版本即可。
**刪除文件找回前提:**刪除前,文件存在時的狀態提交到了本地庫。
(5)比較文件的差異
git diff [文件名] # diff沒有其它參數,表示和暫存區進行比較。
git diff [本地庫中歷史版本][文件名] # 將工作區中的文件和本地庫歷史記錄比較
3.1.3 分支管理
(1)分支介紹
分支好處
-
同時並行推進多個功能開發,提高開發效率
-
各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任何影響。失敗的分支刪除重新開始即可。
(2)分支操作
-
查看所有分支
git brach
-
創建新的分支
git branch USB # 創建USB分支 git checkout -b USB #創建完成後自動切換到新創建的分支
-
切換分支
git checkout [branchname] # 切換分支
-
合併分支(必須站在接受修改的分支上,如master)
# 切換到主分支 git checkout master # 查看當前所在分支 git branch -v # 合併分支 git merge [有新內容的分支名]
-
解決分支衝突
分支衝突產生原因:
即在主分支和子分支上對同一個文件進行了修改,並且主分支和子分支都提交到本地庫成功了。此時若將子分支合併到master主分支,這時會產生分支衝突。
衝突表現
衝突解決方法:
打開產生衝突的文件,刪除特殊符號。 vim [文件名]
將產生的衝突刪除即可。
再次使用
git add [文件名]
git commit -m "提示內容"
這裏的commit命令不能加文件名,否則會報錯。
3.2 遠程庫操作
3.2.1 Git 原理
-
哈希(MD5算法屬於哈希的一種)
哈希是一個系列的加密算法,各個不同的哈希算法雖然加密強度不同,但是有以下幾個共同點:
①不管輸入數據的數據量有多大,輸入同一個哈希算法,得到的加密結果長度固定。
②哈希算法確定,輸入數據確定,輸出數據能夠保證不變。
③哈希算法確定,輸入數據有變化,輸出數據一定有變化,而且通常變化很大。
④哈希算法不可逆
⑤Git底層採用的是SHA-1算法
哈希算法可以被用來驗證文件。原理如下圖所示:
3.2.2 遠程庫操作
在Git終端創建完本地庫以後,在創建一個遠程庫(最好庫名一樣,方便管理。不做強制要求)
遠程庫在github官網創建。
-
在本地查看git綁定的遠程庫
git remote -v
-
添加遠程庫
git remote add origin https://github.com/yimisiyang/BigData-java.git
-
刪除綁定的別名
git remote remove origin
-
將本地庫推送到遠程庫
git push origin master git push -u origin master git push -u origin master -f #強制推送到遠程
注意: pull=fetch+merge
-
把遠程庫克隆到本地庫
git clone https://github.com/yimisiyang/BigData-java.git
(1)完整的把遠程庫下載到本地
(2)初始化本地庫
(3)創建origin遠程地址別名
只有邀請別人後,別人才能將克隆後的修改推送到遠程庫。
邀請別人成功後,別人才能將修改的內容推送到你創建的遠程庫。
-
git fetch把遠程庫抓取下來(只是將遠程文件下載到本地,並沒有和本地進行合併)
git fetch origin master
注意: git fetch [遠程庫地址別名] [遠程分支名]
-
查看從遠程庫抓取下來的內容
git checkout origin/master
-
把遠程master合併到本地master
git merge origin/master
注意: git merge [遠程庫地址別名/遠程分支名]
-
git pull拉去遠程庫(該操作拉去遠程分支後直接與本地分支進行合併)
git pull origin master
-
團隊外的人提交到遠程倉庫
(1)fork 別人的項目
(2)克隆該項目並做修改
(3)推送到自己的遠程庫
(4)發起pull request申請
()別人merge 你的 pull request後就好了。
3.2.3 SSH 免密登陸
生成key
ssh-keygen -t rsa -C [email protected]
讀取id_rsa中的內容,將內容複製到github中settings的 ssh and GPG keys
新建一個ssh的別名,添加進去
git remote add origin_ssh
再次推送
git push origin_ssh master
4.Git圖形化界面操作
所謂圖形化界面即在IDE中對git進行設置。
5.GitLab服務器環境搭建
5.1 GitLab 安裝(有樹莓派版,驚不驚喜)
建議在CentOS7上搭建GitLab服務器。
從官網下載CentOS版本安裝包
官網給的安裝過程
調整後的安裝過程
5.2 GitLab 服務操作
裝完之後重啓計算機,然後進行初始化配置
gitlab-ctl reconfigure
注意: 該命令會執行很長時間。
啓動gitlab服務
gitlab-ctl start
接下來就可以在瀏覽器訪問了。
在瀏覽器輸入IP地址訪問。若打不開,檢查防火牆配置。
初次登陸需要爲gitlab的root用戶設置密碼。