Git&GitHub教程

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

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用戶設置密碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章