Git clone之后你的硬盤上究竟發生了什么?

網上關于Git的使用有太多的博客,文章在講解了,大部分是在講解命令的用法,剩下一部分則在講解git的內部原理,看過講解基礎命令使用的文章后,正常的開發使用是沒有什么問題的了,而如果想更深入的了解git“高級”使用,去看第二類講解內部原理(數據結構,源碼實現)的文章,往往感覺過于“高深”,復雜,(而且對git的使用上并不會有太多幫助),其實介于兩者之間的知識可能對于git進階更有幫助。

Git的原理和使用其實很簡單,看懂下面這張圖就可以了:

一張覆蓋了git大部分知識的圖片

上圖轉自伯樂在線上的一篇文章,侵刪。

其實我感覺這應該是某一本講解git原理的書上的配圖(由于學習git過程中都是網上搜索和自悟獲取,沒有看過專門的git書籍,不太清楚是那本書)

為了符合文章的標題,這里只簡單說明下右半部分,這個是大部分基礎使用文章忽略的(基礎使用都會著重講解staging area這部分),而高級教程中對于右半邊又都是一筆帶過,或者大家都不會太注意這部分吧。

git clone之后究竟發生了什么?

  • remote repository:這個不用過多解釋,雖然git是分布式的代碼管理工具,但大部分公司,組織都會建立一個集中的代碼倉庫服務器。(這里想到區塊鏈到底后面會發展成半集中式還是完全分布式的呢?)該代碼倉庫存儲著所有開發人員push上去的代碼和branchs。
  • 開發者鍵入git clone后,git會將遠端所有的代碼和branchs下載到開發者本地。
    • 有人會問,可是我git branch只看到一個branch(默認情況應該是master branch。不過倉庫服務端可以進行配置其他任意branch為默認主分支)。git branch的確只能看到一個branch(在本地沒有進行checkout -b參操作的情況下),因為其他branch需要用git banch -r(Git branch -a)才能看到。
    • 這時有人又會問,git branch -r看到的不是遠端的分支嗎?好吧,其實本文的唯一有價值的地方就在這里了。git branch -r看到的不是遠端服務的branchs,而是你的本地的遠端 branchs,git clone后在remote/origin repository區保存一份和此時遠端分支一模一樣的代碼和branchs,而且該區域是不能修改的。
    • 如果想修改怎么辦,git checkout -b master origin/master相信大家都用過類似的命令,這個是從遠端拉出一個branch嗎?不是,這是從你的本地的遠端區域里的master branch拉出一個branch。而新拉出的branch就是存儲在你的local repository區域里,這個區域是可以修改的,也就是git branch看到的那些branchs。

理解了以上兩個區域后面有些命令的原理就十分清楚了

  • git pull做了什么?
    • 大家都知道git pull = git fetch + git merge兩個操作。
  • git fetch做了什么?
    • git fetch其實是更新下你的本地的遠端代碼區域(remote/origin repository)的數據同服務端的代碼保持一致。
  • 基于以上的說明,git pull的最后一步,就是把remote/origin repository區域中的相應的branch(已更新到服務端最新代碼) merge到本地區域(local repository)的branch上。

以上是自己對git對代碼管理上的一些理解,不保證正確性,因為我沒有看過一行git源碼,以上的分析只是從各種文章,流程圖,以及實際使用中推理得出的。只是感覺它應該就是這一個樣子的。希望沒有誤導別人。

最后說下我對git的看法:git不僅僅是一個代碼管理工具,它是一種工作方式,基于git的工作流,你可以高效的進行開發工作,通過git的各種命令的組合使用,基本上可以解決你所遇到的所有問題,你可以告別copy n份代碼,管理n個目錄,告別beyond compare。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450098.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450098.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450098.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shell 語法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 運行sh腳本的2種方法: ./AAA。sh 或者 sh AAA.sh 。(其實后輟名不重要。是txt也是可以運行的。)…

感知機模型的對偶形式[轉載]

轉自:https://blog.csdn.net/jaster_wisdom/article/details/78240949#commentBox 1.區分一下易混淆的兩個概念,梯度下降和隨機梯度下降: 梯度下降:一次將誤分類集合中所有誤分類點的梯度下降; 隨機梯度下降:隨機選取一…

Android Studio常用快捷鍵

注:本文大部分內容轉載自——碼個蛋微信公眾號里的“熟練這些,才會知道 Android studio 有多高效”由于是微信公眾號通過傳送門看的,沒有原文鏈接。 顯示方法的參數 當我們使用一個方法的時候,會在剛開始的時候顯示出所有的參數。…

中國城市政治地位,政治地位決定一切!!!

第一政治等級:省級城市(包括直轄市、特別行政區)6個 北京市、上海市、天津市、重慶市、香港特別行政區、澳門特別行政區 第二政治等級:副省級城市(含五個計劃單列市) 15個 沈陽市、大連市&…

Shell 字符串截取

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Linux 的字符串截取很有用。有八種方法。 假設有變量 varhttp://www.aaa.com/123.htm 1. # 號截取,刪除左邊字符,…

go語言漸入佳境[6]-operator運算符

運算符和其他語言一樣,Go語言支持多種運算符,用于對變量進行運算。12345678910111213package mainimport "fmt"func main(){ //math() //relation() //logic() //wei() Assign()}算術運算符123456789101112func math(){ a : 4 b:2 fmt.Printf(…

Android應用開發—setResult()的調用時機

本文轉載自setResult()的調用時機,此處做了重新的排版,只是感覺markdown的排版比較好看些,侵刪。 今天遇到這樣一個問題,我在Activity-A中用startActivityForResult()方法啟動了Activity-B,并且在B中通過setResult()方…

記錄騰訊云中礦機病毒處理過程(重裝系統了fu*k)

2019-1-21日常上班的周一 剛想學學kafka,登錄與服務器看看把,誰知ssh特別慢,很奇怪,我以為是我網速問題,斷了wifi,換了網線,通過iterm想要ssh rootx.x.x.x,但是上不去? 就…

從創業失敗中學到的七條教訓

摘要:每個創業者不可能首次創業就能成功。他們的失敗經驗,或許可以指導其他創業者獲得迅速成功。Joshua Hays在文章《7 things I learned from failing that you can avoid》總結了創業失敗后獲得的七條教訓,希望其他創業者可以從中有所收獲&…

unexpected EOF while looking for matching ``‘

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 只是簡單的測試一個shell 腳本,報錯如題。 原因: 雙引號格式不對。 引號切換為英語格式重新輸入,再運…

對象反序列化出現類型不匹配的情況(spring-boot-devtools)

目前在做springboot項目的shiro session redis共享功能。但是有一個對象我把它放到redis中之后再取出來就會出現類型不匹配的異常 AuthorizationUser user (AuthorizationUser) cache.getSuper(key); 異常信息: java.lang.ClassCastException: com.ch.evaluation.a…

最后一周總結

1) 回歸第一周目標 對于第一周的目標,在提高代碼量,多寫多練方面達到了,之前結點編程時還不是很熟悉python,現在寫的比較熟練了,同時學習了一門新的語言Julia,在學習的過程中也看了Julia和Flux的…

音視頻多媒體協議相關資料匯總

未知問題: 編碼,封裝,協議的區別: 如何將TS源流重新封裝并通過P2P協議傳輸在安卓終端和蘋果終端播放封裝 介紹完了視頻編碼后,再來介紹一些封裝。沿用前面的比喻,封裝可以理解為采用哪種貨車去運輸&…

谷歌地圖VS蘋果地圖:大數據領域競爭

摘要:iOS 6推出之后,爭議最大的是什么?蘋果地圖。蘋果地圖成為人們抨擊iOS 6的首選,而蘋果放棄谷歌地圖選擇自力更生是迫不得已。蘋果和谷歌之間的競爭領域可以用三個字來概括:大數據。谷歌擁有大數據,而蘋…

Shell 參數傳遞、 $* 與 $@ 區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 傳遞參數 腳本內獲取參數的格式為: $n。n 代表一個數字,1 為執行腳本的第一個參數, 2 為執行腳本的第…

微軟正在考慮將Windows默認瀏覽器改為Chromium

據外媒報道,微軟正在構建一個基于Chromium的瀏覽器,代號為Anaheim,目標是取代Windows中的Edge。 Microsoft Edge是微軟于2015年推出的瀏覽器,該瀏覽器取代了IE成為Windows 10的默認瀏覽器。盡管如此,Microsoft Edge并沒…

css文本屬性

text-align文本水平對齊屬性 取值 left(默認) right center text-indent 文本縮進屬性 單位可以是px也可以是em(字符) text-decoration 文本裝飾屬性 取值 underline(下劃線) overline(上劃線) line-though(刪除線) 轉載于:https://www.cnblogs.com/c-aha/p/10298422.html

三次握手的第三個ACK包丟了,會發生什么?

轉載自三次握手的第三個ACK包丟了,TCP的處理方式 三次握手的第三個ACK包丟了,客戶端認為連接建立,寫數據時,會觸發RST。 當Client端收到Server的SYNACK應答后,其狀態變為ESTABLISHED,并發送ACK包給Server&a…

運營商與廠商發力 智能機進入700元以下時代

千元智能手機的成功,并沒有讓運營商以及手機廠商感到滿足。繼中國電信宣布重點打造600元智能手機后,近日,中國聯通也表態將發力700元以下智能手機市場。而運營商的表態立刻引來了多家手機廠商的呼應,產品價格的繼續下探&#xff0…

輸入一個數,判斷他是不是質數

思路:先給一個數字x,然后讓這個數字x從2開始除,如果 x 從 2 除到 (x-1) 能被整除,那這就不是質數.如果不能被整除,那就是質數. 當然如果x小于2,那x必然不是質數,也不是合數. #輸入一個數,判斷他是不是質數 x int(input("請輸入一個數字:")) #先輸入一個數字 co…