国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Git 系列】基礎知識全集

ASCH / 1034人閱讀

摘要:沒有一個全局的版本號,而有目前為止這是跟相比缺少的最大的一個特征。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。合并沖突多人對同一文件的工作副本進行更改,并將這些更改提交到倉庫。

Git 是一種分布式版本控制系統,它可以不受網絡連接的限制,加上其它眾多優點,目前已經成為程序開發人員做項目版本管理時的首選,非開發人員也可以用 Git 來做自己的文檔版本管理工具。

一、Git 基礎

1.1 Git 與 SVN 區別

Git 不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。

如果你是一個具有使用 SVN 背景的人,你需要做一定的思想轉換,來適應 Git 提供的一些概念和特征。

GitSVN 區別點:

  1. Git 是分布式的,SVN 不是:這是 Git 和其它非分布式的版本控制系統,例如 SVNCVS 等,最核心的區別。
  2. Git 把內容按元數據方式存儲,而 SVN 是按文件:所有的資源控制系統都是把文件的元信息隱藏在一個類似 .svn.cvs 等的文件夾里。
  3. Git 分支和 SVN 的分支不同:分支在 SVN 中一點都不特別,其實它就是版本庫中的另外一個目錄。
  4. Git 沒有一個全局的版本號,而 SVN 有:目前為止這是跟 SVN 相比 Git 缺少的最大的一個特征。
  5. Git 的內容完整性要優于 SVNGit 的內容存儲使用的是 SHA-1 哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。

1.2 版本控制

版本控制(Revision control)是一種在開發的過程中用于管理我們對文件、目錄或工程等內容的修改歷史,方便查看更改歷史記錄,備份以便恢復以前的版本的軟件工程技術。一句話就是用于管理多人協同開發項目的技術。

  • 優點
  1. 實現跨區域多人協同開發;
  2. 追蹤和記載一個或者多個文件的歷史記錄;
  3. 組織和保護你的源代碼和文檔;
  4. 統計工作量;
  5. 并行開發、提高開發效率;
  6. 跟蹤記錄整個軟件的開發過程;
  7. 減輕開發人員的負擔,節省時間,同時降低人為錯誤。

1.3 Git 工作區、暫存區和版本庫

  1. 工作區:就是你在電腦里能看到的目錄。

  2. 版本庫:工作區有一個隱藏目錄 .git,這個不算工作區,而是 Git 的版本庫。

  3. 暫存區:本地版本庫里存了很多東西,其中最重要的就是稱為 stage(或者叫index)的暫存區。

下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關系:

1.4 分支

分支是為了將修改記錄的整個流程分開存儲,讓分開的分支不受其它分支的影響,所以在同一個數據庫里可以同時進行多個不同的修改。

  • 主分支(Master)

是 Git 為我們自動創建的第一個分支,也叫主分支,其它分支開發完成后都要合并到 master

  • 分支合并(Merge)

將某分支上的更改聯接到此主干或同為主干的另一個分支。

  • 合并沖突(Conflict)

多人對同一文件的工作副本進行更改,并將這些更改提交到倉庫。

1.5 標簽

標簽是用于標記特定的點或提交的歷史,通常會用來標記發布版本的名稱或版本號(如:publish/0.0.1),雖然標簽看起來有點像分支,但打上標簽的提交是固定的,不能隨意的改動。

1.6 頭(HEAD)

頭是一個象征性的參考,最常用以指向當前選擇的分支。

二、四個區域

2.1 Workspace:工作區

  1. 程序員進行開發改動的地方,是你當前看到的,也是最新的;
  2. 平常我們開發就是拷貝遠程倉庫中的一個分支,基于該分支進行開發。在開發過程中就是對工作區的操作。

2.2 Index / Stage:暫存區

  1. .git 目錄下的 index 文件, 暫存區會記錄 git add 添加文件的相關信息(文件名、大小、timestamp...),不保存文件實體, 通過 id 指向每個文件實體。可以使用 git status 查看暫存區的狀態。暫存區標記了你當前工作區中,哪些內容是被 Git 管理的;
  2. 當你完成某個需求或功能后需要提交到遠程倉庫,那么第一步就是通過git add 先提交到暫存區,被 Git 管理。

2.3 Repository:本地倉庫

  1. 保存了對象被提交 過的各個版本,比起工作區和暫存區的內容,它要更舊一些;
  2. git commit 后同步 index 的目錄樹到本地倉庫,方便從下一步通過 git push 同步本地倉庫與遠程倉庫的同步。

2.4 Remote:遠程倉庫

遠程倉庫的內容可能被分布在多個地點的處于協作關系的本地倉庫修改,因此它可能與本地倉庫同步,也可能不同步,但是它的內容是最舊的。

2.5 四個區域的關系

  1. 任何對象都是在工作區中誕生和被修改;
  2. 任何修改都是從進入 index 區才開始被版本控制;
  3. 只有把修改提交到本地倉庫,該修改才能在倉庫中留下痕跡;
  4. 與協作者分享本地的修改,可以把它們 push 到遠程倉庫來共享。

三、Git 文件操作

版本控制就是對文件的版本控制:首先要知道文件當前在什么狀態,然后才能對文件進行修改、提交等操作,不然可能會提交了現在還不想提交的文件。

3.1 文件的四種狀態

  1. Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到 Git 庫, 不參與版本控制.通過 git add 狀態變為 Staged;
  2. Unmodify: 文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變為 Modified. 如果使用 git rm 移出版本庫, 則成為 Untracked 文件;
  3. Modified: 文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處,通過 git add 可進入暫存 staged 狀態, 使用 git checkout則丟棄修改過, 返回到 unmodify 狀態, 這個 git checkout 即從庫中取出文件, 覆蓋當前修改;
  4. Staged: 暫存狀態.執行 git commit 則將修改同步到庫中, 這時庫中的文件和本地文件又變為一致, 文件為 Unmodify 狀態. 執行 git reset HEAD filename 取消暫存, 文件狀態為 Modified

3.2 查看文件狀態

git status # 添加指定文件到暫存區;git add (dir) # 添加當前目錄的所有文件到暫存區。

3.3 移除文件與目錄(撤銷 add)

git rm --cached # 直接從暫存區刪除文件,工作區不做出改變git checkout . # 用贊尋去全部或指定文件替換工作區的文件,這個操作很危險,會清楚工作區中未添加到暫存區的改動。git clean # 一般會加上參數 -df,-d 表示包含目錄,-f 表示強制清除;

3.4 查看文件修改后的差異

git status # 只能查看對哪些文件做了改動,如果要看改動了什么,可以用;git diff (files) # 查看文件修改后的差異

此外,還有以下兩個常用命令:

git diff --cached # 比較暫存區的文件與之前已經提交過的文件git diff HEAD~n # 比較 repo 與工作空間中的文件差異

3.5 簽出

  • 使用情景

該文件已經存在倉庫中,工作區已經對其進行修改過了,如果想撤銷修改,可以使用 checkout

檢出命令git checkout 是 git 最常用的命令之一,同時也是一個很危險的命令,因為折騰命令會重寫工作區。

3.6 提交

通過 add 只是將文件或者目錄添加到 index 即暫存區,使用 commit 可以實現將暫存區的文件提交到本地倉庫。

git commit -m [message] # 提交暫存區到倉庫區git commit [file1] [file2] ... -m [message] # 提交暫存區的指定文件到倉庫區git commit -a # 提交工作區自上次 commit 之后的變化,直接到倉庫區,跳過了 add,對新文件無效git commit -v # 提交時顯示所有 diff 信息

3.7 撤銷更新

  • 撤銷暫存區更新
git reset HEAD [filename] # 將暫存區指定文件移出到工作區
  • 撤銷本地倉庫更新

放棄工作區和暫存區的改動,同時 HEAD 指針指向前一個 commit 對象:

git log  #查看提交日志,  git reset --hard HELD~1  #撤銷了上一次的提交,這里的上一次提交日志就不存在了。cat [filename]  #查看文件內內容git revert #把指定的提交修改回滾,并同時生成一個新的提交

3.8 日志與歷史

git log #查看所有提交日志;git log [filename] #查看某文件提交日志;history #查看在 bash 下輸入過的指令;git reflog #查看倉庫中所有分支的所有更新記錄,包括已經撤銷的更新。

?

四、Git 配置

4.1 分類介紹

Git 配置文件有三個級別,分別是系統級別、全局級別以及倉庫級別。下面的表格展示了各個級別的配置的具體信息:

配置級別 文件位置 配置命令 優先級別
系統 Git 安裝目錄/etc/gitconfig git config --system
全局 用戶文件夾.gitconfig git config --global
倉庫 倉庫文件夾.git/config git config --local

4.2 Git 常用配置命令

  • 對全局的 Git 用戶名和郵箱進行配置
git config --global user.name "xxxx" :設置所有倉庫提交的用戶名git config --global user.email "xxxx@example.com":設置所有倉庫提交的郵箱
  • 查看所有配置或某一項配置:
git config --global  --list;git config --global  --get user.name;git config --global  --get user.email;

系統和當前項目的命令同上,僅需將global改為system/local即可。

五、本地倉庫

創建本地倉庫的方法有兩種:一種是創建全新的倉庫,另一種是克隆遠程倉庫。

5.1 創建全新倉庫

  • 使用當前目錄作為 Git 倉庫

只需使它初始化:git init ;執行后可以看到,僅僅在項目目錄多出了一個.git 目錄;

  • 使用指定目錄作為 Git 倉庫

使用如下命令,可以把創建目錄與倉庫一起完成:

git init [project-name] # 新建一個目錄,將其初始化為 Git 代碼庫 

5.2 克隆遠程倉庫

  1. 將遠程服務器上的倉庫完全鏡像一份至本地,而不是取某一個特定版本,所以用 clone 而不是 checkout,語法格式為:
git clone (url) 

例如:我們要從克隆的遠程倉庫托管在 Github 上,首先,我們先前往 Github 上拷貝地址如:
https://github.com/vanDusty/Java-Note,然后執行:

git clone https://github.com/vanDusty/Java-Note```克隆遠程倉庫到當前目錄。### 5.3 Git 倉庫目錄結構- 初始化倉庫使用 `git init` 命令,初始目錄(`.git`)結構:```xml.git├── branches├── config├── description├── HEAD├── hooks│   ├── applypatch-msg.sample│   ├── commit-msg.sample│   ├── post-update.sample│   ├── pre-applypatch.sample│   ├── pre-commit.sample│   ├── prepare-commit-msg.sample│   ├── pre-push.sample│   ├── pre-rebase.sample│   └── update.sample├── info│   └── exclude├── objects│   ├── info│   └── pack└── refs    ├── heads    └── tags 9 directories, 13 files
  • 這個初始化后的倉庫,當創建完分支 dev-branch,并 push 后的目錄結構:
.git/├── branches├── COMMIT_EDITMSG├── config├── description├── HEAD├── hooks│   ├── applypatch-msg.sample│   ├── commit-msg.sample│   ├── post-update.sample│   ├── pre-applypatch.sample│   ├── pre-commit.sample│   ├── prepare-commit-msg.sample│   ├── pre-push.sample│   ├── pre-rebase.sample│   └── update.sample├── index├── info│   └── exclude├── logs│   ├── HEAD│   └── refs│       ├── heads│       │   ├── dev-branch│       │   └── master│       └── remotes│           └── origin│               └── master├── objects│   ├── 2d│   │   └── d2c71b69c837a7459f4bd9c9f7db6520731d06│   ├── 5c│   │   └── 7b8eda18a75e13d27c31e65a54b0abd7948510│   ├── 77│   │   └── cad3aecf7c2754231095598119979d62a1e1da│   ├── info│   └── pack└── refs    ├── heads    │   ├── dev-branch    │   └── master    ├── remotes    │   └── origin    │       └── master    └── tags 19 directories, 25 files

5.4 目錄結構說明

  • branches 目錄

一種不常用的存儲速記方式,用于指定 git fetchgit pullgit pushURL ,目前已基本不用。

  • COMMIT_EDITMSG 文件

commit 編輯信息,僅記錄最近一次提交的 commit 編輯信息。

  • config 文件

存儲當前倉庫的配置信息

  • description 文件

用于在 GitWeb 中展示項目的描述信息。

  • HEAD 文件

存儲 HEAD 指針,指向當前分支,即:記錄當前活動分支。

  • hooks 目錄

目錄下存儲了許多鉤子文件(一些腳本),這些文件是各種 Git 命令使用的自定義腳本,可以在 Git 特定階段自動執行。

  • index 文件

暫存區(stage),二進制文件。

  • info 目錄

存儲庫的其他信息將記錄在此目錄中。

  • logs 目錄

保存所有更新的引用記錄。

  • objects 目錄

簡單理解就是:objects 目錄是 Git 的數據庫,存儲所有數據內容。

  • refs 目錄

(1)heads 目錄

目錄有以各個本地分支名命名的文件,保存對應分支最新提交的 ID,是通過 SHA1 算法計算的一個字符串。

(2)remotes 目錄

目錄有以各個遠程分支名命名的文件,保存對應分支最新提交的 ID,和 heads 目錄一個原理。

(3)tags 目錄

存儲在開發過程中打的標簽,里面的文件以標簽名命令,文件內容為對應的 ID

六、遠程倉庫

Git 是分布式版本控制系統,同一個 Git 倉庫,可以分布到不同的機器上,即發布到不同的遠程倉庫上。

6.1 常見的托管平臺

  • GitHub

對,就是那個“全世界最大同性交友網站”。https://github.com

絕大多數好的開源項目都來自 GitHub,但是 GitHub 只能新建公開的 Git 倉庫,私有倉庫要收費,有時候訪問比較卡,如果你做的是一個開源項目,可以首選 GitHub。

  • Gitlab

提到 GitHub 就會自然的想到 Gitlab,Gitlab 支持無限的公有項目和私有項目。https://about.gitlab.com

  • Bitbucket

Bitbucket免費支持 5 個開發成員的團隊創建無限私有代碼托管庫。https://bitbucket.org

  • Gitee 碼云

前面說的都是國外的,下面來說幾個國內的。碼云,個人開發者可免費創建 1000 個項目(不限公有、私有),提供最多 5G 的免費代碼存儲空間。http://git.oschina.net,

  • Coding.net

談到 Coding.net,首先必須提的是速度快,同樣一個賬號最多可以創建 1000 個項目(5 個私有),也支持任務的創建等。https://coding.net

6.2 遠程倉庫操作

申請到了 Git 遠程倉庫的帳號并創建了一個空的遠程倉庫現在我們就可以結合本地的倉庫與遠程倉庫一起協同工作了,多人協同開發,這也是我們工作時的情形,這里我們全部使用命令完成(實際開發中很多開發工具例如:IDEA 等,無需命令操作)。

  • 克隆項目

遠程操作的第一步,通常是從遠程主機克隆一個版本庫,這時就要用到 git clone 命令,例如:

git clone https://github.com/vanDusty/Java-Note

該命令會在本地主機生成一個目錄,與遠程主機的版本庫同名。如果要指定不同的目錄名,可以將目錄名作為 git clone 命令的第二個參數。

git clone <版本庫的網址> <本地目錄名>

git clone 支持多種協議
除了 HTTP(s)以外,還支持 SSHGit、本地文件協議等。通常來說,Git 協議下載速度最快,SSH 協議用于需要用戶認證的場合。各種協議優劣的詳細討論請參考官方文檔。

  • git remote

為了便于管理,Git 要求每個遠程主機都必須指定一個主機名。git remote 命令就用于管理主機名。
不帶選項的時候, git remote 命令列出所有遠程主機名。

git remote -v  #參看遠程主機的網址。

結果表示,當前只有一臺遠程主機,叫做 origin,以及它的網址。

origin  git@github.com:jquery/jquery.git (fetch)origin  git@github.com:jquery/jquery.git (push)

克隆版本庫的時候,所使用的遠程主機自動被 Git 命名為 origin 。如果想用其他的主機名,需要用 git clone 命令的 -o 選項指定:

git clone -o dusty https://github.com/vanDusty/Java-Note

上面命令表示,克隆的時候,指定遠程主機叫做 dusty

更多命令如下:

$ git remote show <主機名>  #查看該主機的詳細信息$ git remote add <主機名> <網址> #添加遠程主機$ git remote rm <主機名> #刪除遠程主機$ git remoterename<原主機名> <新主機名> #遠程主機的改名
  • git fetch

一旦遠程主機的版本庫有了更新,需要將這些更新取回本地,這時就要用到該命令。

git fetch  #將某個遠程主機的更新,全部取回本地。git fetch <遠程主機名> <分支名> #取回指定主機名的指定分支

所取回的更新,在本地主機上要用"遠程主機名/分支名"的形式讀取。比如 origin 主機的 master,就要用 origin/master 讀取。

git checkout -b newBrach origin/master  #在 origin/master 的基礎上,創建一個新分支。

也可以使用 git merge 命令或者 git rebase 命令,在本地分支上合并遠程分支。

git merge origin/master #或者$ git rebase origin/master
  • git pull

git pull 命令的作用是,取回遠程主機某個分支的更新,再與本地的指定分支合并。它的完整格式稍稍有點復雜。

git pull <遠程主機名> <遠程分支名>:<本地分支名>

示例:取回 origin 主機的 master 分支,與本地的 develop 分支合并:

git pull origin master:develop

如果遠程分支( master)要與當前分支合并,則冒號后面的部分可以省略。可以簡寫為:

git pull origin master

上面命令表示,取回 origin/master 分支,再與當前分支合并。實質上,這等同于先做 git fetch ,再做 git merge

git fetch origingit merge master/develop
  • git fetchgit pull 的區別
git fetch:相當于是從遠程獲取最新版本到本地,不會自動合并。git pull:相當于是從遠程獲取最新版本并merge到本地

七、Git 命令

偷個懶,發現一個很全的【Git常用命令參考手冊】

技術交流,歡迎掃一掃!

風塵博客

?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123995.html

相關文章

  • 類的加載機制 - 收藏集 - 掘金

    摘要:是現在廣泛流行的代從開始學習系列之向提交代碼掘金讀完本文大概需要分鐘。為了進行高效的垃圾回收,虛擬機把堆內存劃分成新生代老年代和永久代中無永久代,使用實現三塊區域。 React Native 開源項目 - 仿美團客戶端 (Android、iOS 雙適配) - Android - 掘金推薦 React Native 學習好項目,仿照美團客戶端... 極簡 GitHub 上手教程 - 工具...

    Gilbertat 評論0 收藏0
  • 2017年3月份前端資源分享

    平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 03月份前端資源分享 1. Javascript 175453545 Redux compose and middleware 源碼分析 深入 Promise(二)——進擊的 Promise Effective JavaScript leeheys blog -...

    ermaoL 評論0 收藏0
  • 2017年3月份前端資源分享

    平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 03月份前端資源分享 1. Javascript 175453545 Redux compose and middleware 源碼分析 深入 Promise(二)——進擊的 Promise Effective JavaScript leeheys blog -...

    kamushin233 評論0 收藏0

發表評論

0條評論

ASCH

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<