Git版本控制

Git&GitHub

1. 版本控制工具應該具有的功能

  • 協同修改
    • 多人並行不悖的修改服務器端的同一個文件
  • 數據備份
    • 不只保存目錄和文件的當前狀態,還可以保存每個提交過的歷史狀態
  • 版本管理
    • 在保存每個版本的文件信息的時候要作到不包吃重複數據,以節約存儲空間,提升運行效率。
    • 這方面SVN採用的是銷量式管理的方式,而Git採起了文件系統快照的方式。
  • 權限控制
    • 對團隊中參與開發的人員進行權限控制
    • 對團隊外開發者貢獻的代碼進行審覈——Git獨有。
  • 歷史記錄
    • 查看修改人 、修改時間、修改內容、日誌信息。
    • 將本地恢復到某一個歷史狀態。
  • 分支管理
    • 容許開發團隊在工做過程當中多條生產線同時推動任務,進一步提升效率。

2. 版本控制簡介

  • 版本控制python

    • 工程設計領域中石油版本控制管理工程藍圖的設計過程。在IT開發過程當中也可使用版本控制思想管理代碼的版本迭代。
  • 版本控制工具git

    ​ 思想:版本控制github

    ​ 實現:版本控制工具安全

    • 集中式版本控制工具:CVS、SVN、VSS······
      服務器

    • 分佈式版本控制工具:Git、Mercurial、Bazaar、Darcs······
      框架

3. Git

官網:https://git-scm.com/ssh

3.1Git簡史

3.2 Git的優點

  1. 大部分操做在本地完成,不須要聯網
  2. 完整性保證 (hash操做)
  3. 儘量添加數據而不是刪除或修改數據
  4. 分支操做很是快捷流暢
  5. 與Linux命令全面兼容

3.3 Git安裝

3.4 Git結構

3.5 Git和代碼託管中心

代碼託管中心的任務:維護遠程庫分佈式

  • 局域網環境下
    • GitLab服務器
  • 外網環境下
    • GitHub
    • 碼雲

3.6 本地庫和遠程庫

  • 團隊內部協做

  • 跨團隊協做

4. Git命令行操做

4.1 本地庫初始化 git init

  • 命令:git init工具

  • 效果:測試

  • 注意:.git/ 目錄中存放的是本地庫相關的子目錄和文件,不要刪除和胡亂修改。

4.2 設置簽名 git config

  • 形式:用戶名:Tom email地址:xxxxxxxxxxx@xxxx.com
  • 做用:區分不一樣開發人員的身份
  • 注意:這裏設置的簽名和登陸遠程庫(代碼託管中心)的帳號、密碼沒有任何關係。
  • 命令:
    • 項目級別/倉庫級別:僅在當前本地庫範圍內有效

      • git config user.name xxxx
      • git config user.email xxxx
      • 信息保存位置: .git/config
    • 系統用戶級別:登陸當前操做系統的用戶

      • git config --global user.name xxxx
      • git config --global user.email xxxx
      • 信息保存位置 ~/.gitconfig
    • 級別優先級:

      • 就近原則:項目級別優先於系統用戶級別:兩者都有時採用項目級別的簽名
      • 若是隻有系統用戶級別的簽名,就以系統用戶級別的簽名爲準
      • 兩者都沒有不容許

4.3 基本操做

1.狀態查看:git status

​ 查看工做區、暫存區狀態

2.添加操做:git add [file name]

​ 將工做區的"新建/修改"添加到到暫存區

3.提交操做:git commit -m "commit message" [file name]

​ 將暫存區的內容提交到本地庫

4.查看歷史記錄: git reflog

  • git log 顯示每一個版本的所有信息

    • 多屏顯示控制方式:
      • 空格向下翻頁
      • b 向上翻頁
      • q 退出
  • git log --pretty=oneline 每條記錄在一行顯示

  • git log --oneline 每條記錄在一行顯示同時hash值只顯示一部分(只顯示當前版本以前的版本)

  • git reflog HEAD@{n} 移動到當前版本須要移動n步

5.前進後退 git reset --hard

  • 本質
  • 基於索引值操做[推薦]
    • git reset --hard [局部索引值(hash值)]
  • 使用^符號:只能後退
    • git reset --hard HEAD^
    • 注:一個^表示後退一步,n個後退n步
  • 使用~符號:只能後退
    • git reset --hard HEAD~n
    • 注:表示後退n步

6.reset命令的三個參數對比

  • --soft參數
    • 僅僅在本地庫移動HEAD指針
  • --mixed參數
    • 在本地庫移動HEAD指針
    • 重置暫存區
  • --hard參數
    • 在本地庫移動HEAD指針
    • 重置暫存器
    • 重置工做區

7.刪除文件並找回

  • 前提:刪除前,文件存在時的狀態提交到了本地庫
  • 操做:git reset --hard[指針位置]
    • 刪除操做已經提交到本地庫:指針位置指向歷史記錄
    • 刪除操做還沒有提交到本地庫:指針位置使用 HEAD

8. 比較文件差別 git diff [文件名]

  • git diff [文件名]
    • 將工做區中的文件和暫存區進行比較
    • 注:Git操做的是行,因此修改的內容是先刪除 後增長
  • git diff [本地庫中歷史版本] [文件名]
    • 將工做區中的文件和本地庫歷史記錄比較

9. 查看歷史命令 history

4.4分支管理

  • 什麼是分支?
    • 在版本控制過程當中,使用多條線同時推動多個任務
  • 分支的好處
    • 同時並行推動多個功能的開發,提升開發效率。
    • 各個分支在開發過程當中,若是某一個分支開發失敗,不會對其餘分支有任何影響,失敗的分支刪除從新開始便可。

分支操做

  • 建立分支

    git branch [分支名]

  • 查看分支

    git branch -v

  • 切換分支

    git checkout [分支名]

  • 合併分支

    • 1.切換到接受修改的分支上(被合併,增長新內容)
      • git checkout [分支名]
    • 2.執行merge命令
      • git merge [要被合併的分支名]
  • 解決衝突

    • 衝突的表現

    • 衝突的解決

      1. 編輯文件,刪除特殊符號
      2. 把文件修改都滿意的程度,保存退出
      3. git add [文件名]
      4. git commit -m "日誌信息"
        • 注:此時commit必定不能帶具體文件名

5. 鏈接GitHub/碼雲

GitHub: https://github.com/

碼雲: https://gitee.com/

5.1 建立SSH Key

在Git命令行中輸入:

ssh-keygen -t rsa -C "碼雲帳號"
  • 在C:\Users\用戶\下會生成一個.ssh的文件夾,.ssh內id_rsa是私鑰,id_rsa.pub是公鑰

  • 登陸碼雲,我的主頁/我的設置/安全設置/SSH公鑰

  • 本地測試鏈接遠程庫是否成功

    ssh-T git@github.com ssh-T git@git.com

5.2 建立遠程庫

  • 我的主頁/我的設置/數據管理/倉庫空間信息/新建倉庫

5.3 在本地建立遠程庫的別名

  • 爲何?

    1. 遠程庫的連接很長,使用不方便

    2. 每次都要登陸去複製

  • 命令:

    git remote add origin [遠程庫url]

    • 注:origin 是遠程庫在本地的別名(也能夠是其餘的)
  • 查看遠程庫:

    git remote -v

  • 刪除已有的遠程庫

    git remote rm origin

5.4 推送

  • 命令:

    git push origin master

    注1:origin是要推送的遠程庫

    注2:master推送的分支

5.5 克隆

  • 命令:

    git clone [遠程庫地址]

  • 效果:

    • 完整的把遠程庫下載到本地

    • 建立origin遠程庫地址別名

    • 初始化本地庫

5.6 遠程庫拉取/更新本地庫

  • pull = fetch+merge
  • git fetch [遠程庫別名] [遠程分支名]
  • git merge [遠程庫別名] [遠程分支名]
  • git pull [遠程庫別名] [遠程分支名]

5.7 解決衝突

  • 若是不是基於GitHub遠程庫的最新版所作的修改,不能推送,必須先拉取。

  • 遠程庫爲非空倉庫時,默認時一個新項目,和本地庫時兩個不一樣的項目,不能直接推送

  • 解決:

    1. 先從遠程庫克隆島本地,再修改。

    2. 拉取遠程庫代碼,再合併爲一個庫

      • 關聯遠程庫

        git remote add origin [遠程庫url]

      • 拉取遠程庫代碼到本地,並自動合併到本地庫

        git pull origin master --allow-unrelated-histories

      • 推送

        git push -u origin master

    3. 強制推送到遠程庫(不推薦,容易覆蓋遠程庫原先的內容)

      git push -f origin master

6. 使用Github/Gitee協同開發

協同開發流程:

  1. 項目經理上傳初始化的框架到遠程倉庫

    • github/gitee 遠程庫添加SSH賬號

      ssh-keygen -t rsa -C '遠程庫帳號'

    • 本地項目初始化框架上傳到服務器

    • 服務器新建空項目

    • 修改維護本地項目框架

    • 和遠程服務器創建鏈接

    • 提交到遠程服務器

  2. Fork項目到本身git庫

  3. 本地克隆/下載項目 維護修改

  4. 工做完成後,發從合併請求給項目經理

  5. 項目經理審覈,是否合併並代碼!

相關文章
相關標籤/搜索