[git]git的基本原理|git branch|git

來源:互聯網
上載者:User

標籤:

繼續寫一篇git的文章,介紹下git的曆史和基本原理。

介紹下git的曆史,據磚家考究,遙想當年,linux的創始人,牛人李納斯,開發linux用的版本控制工具BitKeeper,出於公益或友好, 是免費的,但是李納斯手下的幾個駭客試圖破解BitKeeper的協議,結果被BitKeeper公司發現,就從免費轉向收費。

牛人李納斯一努之下,兩周就用C擼了一個新的版本控制系統,這就是Git.

彪悍的牛人,就是這麼囂張!

下面說下它的基本原理:(以下所有內容都可以從它官網得到:https://git-scm.com/doc)

其實git本身是一個檔案系統,是一個Distributed File System,而檔案系統中最常見的資料結構也就是一個樹,一個多叉樹。

Git 以一種類似 UNIX 檔案系統但更簡單的方式來儲存內容。所有內容以 tree 或 blob Object Storage Service,其中 tree 對象對應於 UNIX 中的目錄,blob 對象則大致對應於 inodes 或檔案內容。一個單獨的 tree 對象包含一條或多條 tree 記錄,每一條記錄含有一個指向 blob 或子 tree 對象的 SHA-1 指標,並附有該對象的許可權模式 (mode)、類型和檔案名稱資訊。

這是git的檔案對象圖:

 

 

 

 

那麼怎麼建立origin?

直接在一個空目錄用命令:

git init

就自動建立了一個Git倉庫.git建立一個倉庫後,我們以這個倉庫為個中心版本庫。在你建立倉庫的時候,master 是"預設的"分支。

這個時候,git在本地建立了幾個重要的目錄區:

workspace---->git index--->git repository

如果這時你相把你現在建立的本地倉庫與一個運程的git倉庫相連,用什麼命令呢?

用這樣的命令:

 git remote add pb https://github.com/paulboone/ticgit
其中,pb,是這個遠程倉庫的別名。
現在你可以在命令列中使用字串 pb 來代替整個 URL。例如,如果你想拉取 Paul 的倉庫中有但你沒有的資訊,可以運行 git fetch pb:
git fetch pb

用這個命令,git就會從遠程git倉庫:

https://github.com/paulboone/ticgit

下載最新的代碼。git fetch [remote-name]會抓取從你上次複製以來別人上傳到此遠程倉庫中的所有更新(或是上次 fetch 以來別人提交的更新)。有一點很重要,需要記住,fetch 命令只是將遠端的資料拉到本地倉庫,並不自動合并到當前工作分支,只有當你確實準備好了,才能手工合并。

如果,你想從遠程git倉庫直接下載併合併到你的workspace用什麼命令呢?

$ git pull <遠程主機名稱> <遠程分支名>:<本地分支名>
這裡,可以用這樣的命令:
git pull pb master:master


 

 

如果,你想從遠程git倉庫裡直接下載或複製一個git倉庫,而不是在本地用git init命令建立,可以用類似命令:

 git clone https://github.com/schacon/ticgit
這樣,本地倉庫與遠程倉庫的關係如:

那怎麼查看目前的目錄是否與遠程倉庫相連呢?

用命令:

 git remote -v

如果有另外一個使用者B在他的電腦,也clone了相同的git倉庫,這時候(我們假設只有兩個使用者A,B從伺服器URL:

https://github.com/schacon/ticgit

clone或add到local repository)

這時候,這幾個git倉庫應該是這樣的:



我們跟遠端git倉庫建立關聯關係後,我們在本地電腦修改,修改後怎麼提交到遠程git倉庫呢?

如果在本地建立了幾個C檔案,和license檔案,用下面三個命令:

$ git add *.c
$
git add LICENSE
$ git commit -m ‘initial project version‘
然後,push到的遠程git倉庫:

git push origin master

現在我們在本地建立了一個git倉庫origin,

我們現在想得到這樣的多個分支,如下 :

那怎麼從origin中建立另一個分支bob呢:

用命令:

#切換到master分支

git checkout master

#建立bob分支

git branch bob

用同樣的方式建立另一個clair分支

git branch clair

 這時候,三個倉庫是相同的版本樹形式分別儲存在不同的電腦或伺服器裡的,如:

所以,這裡三個倉庫已經是儲存了完整的版本資訊。
那麼,在本地更新了檔案後怎麼提交到master伺服器裡呢?
用命令:
#切換到bob分支
git check bob
#提交到bob分支
git commit -a -m "your comments"

#切換到master,也是origin

git checkout master
#把bob分支合并到mastergit merge bob




 

 

[git]git的基本原理|git branch|git

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.