1. 程式人生 > >Git&GitHub

Git&GitHub

commit 長度 x86 沖突的解決 kit oot image -h git reset


Git&GitHub

1、版本控制工具應該具備的功能

  • 協同修改

    • 多人並行不悖的修改服務器的同一個文件

  • 數據備份

    • 不僅保存目錄和文件的當前狀態,還能夠保存每一個提交過的歷史狀態

  • 狀態管理

    • 在保存每一個版本的文件信息的時候要做到不保存重復數據,以節約存儲空間提高運行效率。這方面SVN采用的是增量式管理的方式,而Git采取是文件系統快照的方式。

  • 權限控制

    • 對團隊中參與開發的人員進行權限控制

    • 對團隊外開發貢獻的代碼進行審核--Gti獨有

  • 歷史記錄

    • 查看修改人、修改時間、修改內容、日誌信息。

    • 將本地文件恢復到某一個歷史狀態。

  • 分支管理

    • 允許開發團隊在工作過程中多條生產線同時推進任務,進一步提高效率。

2、版本控制工具

思想:版本控制

實現:版本控制工具

  • 集中式版本控制工具:

CVS、SVN

、VSS·······

  • 分布式版本控制工具

    Git、Mercurial、Bazaar、Darcs······

3、Git 簡介

3.1 Git官網

https://git-scm.com

3.2 Git的優勢

  • 大部分操作在本地完成,不需要聯網

  • 完整性保證

  • 盡可能添加數據而不是刪除或修改數據

  • 分支操作非常快捷流暢

  • 與Linux命令全面兼容

3.3 Git結構

技術分享圖片

3.4 Git和代碼托管中心

  • 局域網環境下

    • GitLab服務器

  • 外網環境下

    • GitHub

    • 碼雲

4、Git命令行操作

4.1、本地庫初始化

  • 命令:git add

  • 效果

    技術分享圖片
    • 註意:.git目錄中存放的是本地庫相關子目錄和文件,不要刪除,也不要胡亂修改。

  • 設置簽名

    • 形式

    • 作用:區分不同開發人員的身份

    • 辨析:這裏設置的簽名和登錄遠程庫(代碼托管中心)的賬號、密碼沒有任何關系。

    • 命令:

      • 項目級別/倉庫級別:僅在當前本地庫範圍內有效

        • git config user.name Kmily_Lee_pro

        • git config user.email [email protected]

        • 信息保存位置:./.git/config

        • 技術分享圖片

      • 系統用戶級別:登錄當前操作系統的用戶範圍

        • git config--global user.name Kmily_Lee_glb

        • git config--global user.email [email protected]

        • 信息保存位置:~/.gitconfig文件

        • 技術分享圖片

      • 優先級

        • 就近原則:項目級別優先於系統級別,二者都有時采用項目級別的簽名

        • 如果只有系統用戶級別的簽名,就以系統用戶級別的簽名為準

        • 二者都沒有不允許

4.3 基本操作

4.3.1 狀態查看

git status

查看工作區、暫存區狀態

4.3.2 添加操作

git add [file name]

將工作區的“新建/修改”添加到暫存區

4.3.3 提交操作

git commit -m "commit message" [file name]

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

4.3.4 查看歷史記錄操作

git log

技術分享圖片

多屏顯示控制方式:

空格向下翻頁

b向上翻頁

q退出

git log --pretty=oneline

技術分享圖片

git log --oneline

技術分享圖片

git reflog

技術分享圖片

HEAD@{移動到當前版本需要多少步}

4.3.5 前進後退

  • 本質:

技術分享圖片

  • 基於索引值操作【推薦】

    • git reset --hard [局部索引值]

    • git reset --hard fdcb9e8

  • 使用^符號 : 只能後退

    • git reset --hard HEAD^

    • 註:一個^表示後退一步,n個表示後退n步

  • 使用~符號 : 只能後退

    • git reset --hard~n

    • 註:n表示後退n步

4.3.6 reset命令的三個參數對比

  • --soft 參數

    • 僅僅在本地庫移動HEAD指針

  • --mixed 參數

    • 在 本地庫移動HEAD指針

    • 重置暫存區

  • --hard 參數

    • 在本地庫移動HEAD指針

    • 重置暫存區

    • 重置工作區

4.3.7 刪除文件並找回

  • 前提:刪除前,文件存在時的狀態提交到了本地庫

  • 操作:git reset --hard [指針位置]

    • 刪除操作已經提交到本地庫:指針位置指向歷史記錄

    • 刪除操作尚未提交到本地庫:指針位置使用HEAD

4.3.8 比較文件差異

  • git diff [文件名]

    • 將工作區中的文件和暫存區進行比較

  • git diff [本地庫中歷史版本],[文件名]

    • 將工作區中的文件和本地庫歷史記錄比較

  • 不帶文件名比較多個文件

4.3.9 命令幫助

4.4 分支管理

4.4.1 分支的好處

  • 同時並行推進多個功能開發,提高開發效率

  • 各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任何影響。失敗的分支刪除重新開始即可。

4.4.2 分支操作

  • 創建分支

    • git branch [分支名]

  • 查看分支

    • git branch -v

  • 切換分支

    • git checkout [分支名]

  • 合並分支

    • 第一步:切換到接受修改的分支(被合並,增加新內容)

      git chechout [被合並分支名]

    • 第二步:執行merge命令

      git merge [有新內容的分支名]

  • 解決沖突

    • 沖突的表現

技術分享圖片

沖突的解決

第一步:編輯文件,刪除特殊符號

第二步:把文件修改到滿意和程度,保存退出

第三步:git add [文件名]

第四步:git commit -m "日誌信息"

註意:此時commit 一定不能帶具體文件名

5 Git基本原理

5.1 哈希

哈希是一個系統的加密算法,各個不同的哈希算法雖然加密強度不同,但是有以下幾個共同點:

  • ·1、不管輸入數據的數據量有多大,輸入同一個哈希算法,得到的加密結果長度固定。

  • 2、哈希算法確定,輸入數據確定,輸出數據策騎的保證不變

  • 3、哈希算法確定,輸入數據有變化,輸入數據一定有變化,而且通常變化很大

  • 4、哈希算法不可逆

    Git底層采用的是SHA-1算法。

    哈希算法可以被用來驗證文件。原理如下圖所示。

    技術分享圖片

Git就是靠這種機制來從根本上保證數據完整性的。

5.2 Git保存版本的機制

5.2.1集中式版本控制工具的文件管理機制

以文件變更列表的方式存儲信息。這類系統將它們保存的信息看作是一組基本文件和每個文件隨時間逐步累積的差異。

技術分享圖片

5.2.2 Git的文件管理機制

Git把數據看作是小型文件系統的一組快照。每次提交更新時Git都會尋當前的全部文件制作一個快照並保存這個快照的索引。為了高效,如果文件沒有修改,Git不再重新存儲該文件,而是保留一個鏈接指向之前存儲的文件。所以Git的工作方式可以稱之為快照流。

技術分享圖片

6 GitHub

6.1GitHub首頁

https://github.com/

6.2 創建遠程庫

技術分享圖片

6.3 創建遠程庫地址別名

git remote -v 查看當前所有遠程地址別名

git remote add 【別名】【遠程地址】

技術分享圖片

6.4 推送

git push 【別名】【分支名】

技術分享圖片

6.5 克隆

  • 命令

    • git clone [遠程地址]

    • 技術分享圖片

  • 效果

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

    • 創建origin遠程地址別名

    • 初始化本地庫

6.6 團隊成員邀請

技術分享圖片

其他成員把鏈接訪問,登錄自己的gitHub賬號接受邀請。

技術分享圖片

6.7 拉取

  • pull=fetch+merge

  • git fetch 【遠程庫地址別名】【遠程分支名】//只是把遠程的文件下載下來,並沒有去改本地的文件

  • git merge 【遠程庫地址別名】【遠程分支名】//會合並

  • git pull 【遠程庫地址別名】【遠程分支名】//直接抓取並合並

6.8 解決沖突

  • 要點

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

    • 摘取下來後如果進入沖突狀態,剛按照 “分支沖突解決” 操作解決即可

7 Gitlab 服務器搭建過程

7.1 官網地址

首頁:https://about.gitlab.com/

安裝說明:https://about.gitlab.com/installation/

7.2 安裝命令摘錄

sudo yum install -y curl policycoreutils-python openssh-server cronie

sudo lokkit-shttp -s ssh

sudo yum install postfix

sudo service postfixstart

sudo chkconfig postfix on

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ee

實際問題:yum 安裝 gitlab-ee(或 ce)時,需要聯網下載幾百 M 的安裝文件,非常耗 時,所以應提前把所需 RPM 包下載並安裝好。 下載地址為:

https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

7.3 調整後的安裝過程

sudo rpm -ivh/opt/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

sudo yum instal l-y curl policycoreutils-python openssh-server cronie

sudo lokkit-shttp -s ssh

sudo yum install postfix

sudo service postfixstart

sudo chkconfig postfix on

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce

7.4 gitlab 服務操作

  • 初始化配置 gitlab

    gitlab-ctlreconfigure

  • 啟動 gitlab 服務

    gitlab-ctlstart

  • 停止 gitlab 服務

    gitlab-ctlstop

7.5 瀏覽器訪問

訪問 Linux 服務器 IP 地址即可,如果想訪問 EXTERNAL_URL 指定的域名還需要配置 域名服務器或本地 hosts 文件。

初次登錄時需要為 gitlab 的 root 用戶設置密碼。

技術分享圖片

※應該會需要停止防火墻服務:

service firewalld stop

技術分享圖片

Git&GitHub