一起學Git 欲學Git請先忘記

2021-07-06 08:04:51 字數 1632 閱讀 5231

啊!!

錯了錯了,欲學git,請先忘記。

倚天屠龍記中一段描寫的非常精彩,是關於張無忌如何學到太極拳和太極劍的,摘錄如下:

張三丰道:「老道這路太極劍法能得八臂神劍指點幾招,榮寵無量。無忌,你有佩劍麼?」小昭上前幾步,呈上張無忌從趙敏處取來的那柄木製假倚天劍。張三丰接在手裡,笑道:「是木劍?老道這不是用來畫符捏訣、作法驅邪麼?」當下站起身來,左手持劍,右手捏個劍法,雙手成環,緩緩抬起,這起手式一展,跟著三環套月、大魁星、燕子抄水、左攔掃、右攔掃……一招招的演將下來,使到五十三式「指南針」,雙手同時畫圓,復成第五十四式「持劍歸原」。張無忌不記招式,只是細看他劍招中「神在劍先、綿綿不絕」之意。張三丰一路劍法使完,竟無一人喝彩,各人竟皆詫異:「這等慢吞吞、軟綿綿的劍法,如何能用來對敵過招?」轉念又想:「料來張真人有意放慢了招數,好讓他瞧得明白。」

只聽張三丰問道:「孩兒,你看清楚了沒有?」張無忌道:「看清楚了。」張三丰道: 「都記得了沒有?」張無忌道:「已忘記了一小半。」張三丰道:「好,那也難為了你。你自己去想想罷。」張無忌低頭默想。過了一會,張三丰問道:「現下怎樣了?」張無忌道: 「已忘記了一大半。」

周顛失聲叫道:「糟糕!越來越忘記得多了。張真人,你這路劍法是很深奧,看一遍怎能記得?請你再使一遍給我們教主瞧瞧罷。」張三丰微笑道:「好,我再使一遍。」提劍出招,演將起來。眾人只看了數招,心下大奇,原來第二次所使,和第一次使的竟然沒一招相同。周顛叫道:「糟糕,糟糕!這可更加叫人胡塗啦。」張三丰畫劍成圈,問道:「孩兒,怎樣啦?」張無忌道:「還有三招沒忘記。」張三丰點點頭,放劍歸座。張無忌在殿上緩緩踱了乙個圈子,沉思半晌,又緩緩踱了半個圈子,抬起頭來,滿臉喜色,叫道:「這我可全忘了,忘得乾乾淨淨的了。

在開始學習 git 的時候,就跟張無忌學習太極的一樣,要先忘記其他版本控制系統(例如 svn和 perforce 等)的各種概念,以免混淆。

git 在儲存和處理各種資訊的時候,雖然操作起來的命令形式非常相近,但它與其他版本控制系統的做法不同。

git和其他版本控制系統最大的區別是,git直接記錄快照,而非差異比較。git 只關心檔案資料的整體是否發生變化,而大多數其他系統(cvs,svn,perforce,bazzar)則只關心檔案內容的具體差異。

下圖是git的儲存方式:

可以看到:當我們在version 1的基礎上修改了a和c檔案並提交到git倉庫時:

1. git掃瞄版本控制下的所有檔案:對於有變化的檔案生成乙個檔案快照(對該檔案壓縮,所以記錄的是全部內容);

沒有變化的生成乙個鏈結,鏈到之前的快照。(修改並進行add命令後完成此操作)

2. git生成乙個索引,該索引指向當前時間下所有檔案快照。通過該索引即可找到當時所有檔案的內容和狀態。(在提交後完成此操作)

而svn不同,上面是svn的儲存方式:可以看到,每次記錄有哪些檔案作了更新,以及都更新了哪些行的什麼內容,記錄的只是diff檔案。

在version2中只是記錄了file a和file c的變化。如果只給我們version 2的版本資訊,是得不到檔案的全部內容。

下期介紹:

為什麼在提交時需要add一下在執行commit操作,直接操作commit不就可以了嗎?

在執行add命令後,生成了快照檔案,是怎麼生成的呢?快照形式是什麼樣呢?

索引是怎麼把本次commit和檔案進行連線的呢?

git背後究竟影藏著怎樣不為人知的秘密?

請看下期:git暫存區

和Leon一起從頭學Git 四

幾乎每一種版本控制系統都以某種形式支援分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。有人把 git 的分支模型稱為 必殺技特性 而正是因為它,將 git 從版本控制系統家族裡區分出來。命令格式 git branch 沒有引數時,git branch 會列出你在本地的...

一起學演算法

我堅信,機會永遠屬於有準備的人,其羨慕他人的成功,不如從此刻起,積累足夠多的知識和面試經驗,為將來進入更好的公司做好充分的準備!演算法崗是現在最火的崗位,這個崗位要求對oi演算法非常熟悉。常見的oi演算法有 模擬 字首和 差分 高精度計算 排序 貪心 分治 二分查詢 廣度搜尋 深度搜尋 字串相關演算...

一起學Makefile(一)

make和makefile makefile檔案幫助我們記錄了整個專案工程的所有需要編譯的檔案列表,這樣我們在編譯時僅需要輸入簡單的make命令就能編譯出我們期望的結果。makefile檔案反映了整個專案中各個模組的依賴關係,這樣我們改動了某些原始檔以後,僅需簡單的輸入make命令,make工具就會...