Git 簡介

已發表: 2022-06-30

無論您是在構建全新的網站、開發主題或插件,還是設置高級持續集成和部署策略,您都將使用代碼。

在每個網站下,都有正在執行的代碼——無論您使用的是 WordPress、WooCommerce、Drupal、Magento、NextJS,還是手工編碼的 HTML。 需要一組文件來使每個頁面呈現並向世界顯示內容。

您很快就會發現,您需要一種方法來跟踪代碼隨時間的變化。 您需要知道任何文件的最新版本中有哪些更改,以及誰進行了每次更改。

這就是 Git 的用武之地。繼續閱讀以了解 Git、使用遠程 Git 存儲庫等。

了解 Git

Git 是一個版本控制系統,它允許開發人員和其他任何處理文件的人輕鬆創建和存儲其更改的版本,查看這些更改的歷史記錄,並在設備和系統之間共享這些更改,同時提供一種方式在出現問題時撤消這些更改。

一個簡短的歷史

早在 2005 年,一個開發團隊正在創建一個名為 Linux 的項目,這是一個免費的開源操作系統。 他們需要一種在數百名貢獻者之間輕鬆交流更改的方法。 最初,他們一直在傳遞包含更新代碼的各個補丁,但這在許多方面都存在問題,尤其是在確定任何特定更改集的“真實”和最新版本時。

對這些問題感到沮喪,Linux 項目導致 Linus Torvald 實現了一個相當新穎的想法,讓項目在開發人員之間共享整個代碼庫並拍攝他們的更改的“快照”,稱為提交,可以與任何其他副本共享和合併代碼,在世界任何地方。 這立即有助於溝通,因為所有項目變更都可以被視為一個單一的歷史。

捕獲這些快照的方法是 Git,它很快就擁有了自己的生命,並且從那時起就獨立於 Linux 項目開發。

變化圖

從概念上講,您可以將 Git 視為節點圖,其中每個節點都是整個項目在某一時刻的快照。 git-scm.com 上的 Git 書概述了快照的結構。

Git 將數據存儲為項目隨時間的快照

這個快照鏈隨著時間的推移構建了一個圖表,最新版本在前面,或者在您的更改歷史記錄的頂部。 在 Git 中,每個快照都稱為“提交”。

如果您將最近的更改放在圖表的頂部,可以快速瀏覽一下 Git 項目的外觀。 注意——這個例子使用 GitKraken Git GUI 來可視化圖表。

示例 git 圖

構建 Git 圖表

Git 通過提交更改的過程構建此更改圖,也稱為您的 Git 歷史記錄。 但是,在您提交更改之前,您需要明確告訴 Git 您要添加到該快照中的內容,或者按照 Git 中正確引用的方式提交。

在本地工作時,您在項目中保存的所有更改都在您的“工作目錄”中。 Git 可以看到這些更改,但還不知道您要提交哪些更改。 您需要使用名為“git add”的命令將這些特定文件添加到 Git 的“暫存區”,明確告訴 Git 要提交哪些更改。

一旦你有了想要提交到項目快照圖的文件更改,你就可以使用“Git commit”命令將該快照永久地構建到圖上。

Git 添加和提交步驟

時光倒流

Git 的優點之一是可以使用整個項目歷史記錄,即您可以隨時返回並撤消任何和所有更改。

如果您所做的最後一次提交破壞了某些內容,或者您​​改變了對所做操作的想法,您可以執行“Git revert”來恢復 Git 提交。 這會在圖表上創建一個新的提交,它只是撤消您剛剛所做的更改。

如果您想及時跳回並讓它看起來像您從未提交過,您可以使用“Git reset”來執行此操作。

Git中分支和合併的力量

Git 為我們提供的最強大的功能之一是能夠創建並行的替代現實。 不完全是。

由於您正在製作隨時間推移的提交圖,因此您可以選擇從歷史中的任何時間點製作平行的提交線,稱為分支。 新創建的 Git 分支獨立於主歷史,這意味著您可以自由地進行任何您想要的更改,並且不會影響您的其他工作。 主時間線也是一個分支,通常稱為“主”或“主”分支。 新分支和除 main 之外的分支通常稱為“功能分支”。

對功能分支進行更改後,您可以通過執行 Git 合併將所有更改應用到主分支。

以這種方式工作有一個很大的優勢。 功能分支隔離代碼更改,因此如果您確實引入了錯誤,您可以放心主分支是安全的。 在分支中工作還可以釋放主分支,以防您需要在不中斷正在進行的開發工作的情況下應用更新或安全修復。

Git 合併還允許您將更改從主分支拉到功能分支中。 這使您能夠確保對主分支所做的更新仍然適用於您提出的更改,然後再嘗試將它們與“main”合併。

如果您正在與團隊合作,Git 分支策略可以確保您的團隊可以在將更改投入生產之前對其進行徹底測試,並提供一種直接的方式來管理流程。

在 Git 中使用遠程存儲庫

Git 的主要目標之一是讓與世界各地的人們共享代碼變得簡單。 Git 內置了遠程存儲庫的概念。

Git 存儲庫是您存儲工作的整個項目文件夾,並且是 Git 隨時間跟踪的內容。 每個存儲庫都可以使用 Git clone 命令進行克隆,並且可以無限次共享,這使得 Git 非常具有可擴展性。

另一個使 Git 具有高度可擴展性的方面是,如果您更改了一個文檔,您不需要存儲該文檔的全新副本。 更改存儲為稱為“增量”的小信息包,Git 需要存儲或共享的只有文件中單獨修改的行和有關更改的少量數據。 Delta 非常輕量級,通常只有幾個字節大小。 例如,如果您更改 100KB 文檔中的一行,則增量將只有 20 個字節左右。

為了使存儲庫的所有副本中的所有內容保持一致和一致,您只需指定位於哪台計算機上的哪個副本是項目的“真實”副本,然後確保提交到該副本。

這也適用於另一種方式。 與他人協作時,您可以將他們的更改拉入您的本地存儲庫副本,以確保您的項目本地副本是最新的。

使用遠程存儲庫的 git 模型

有許多公司使遠程存儲庫上的協作變得非常簡單和易於管理。 GitHub、GitLab 和 BitBucket 等平台提供在線 Git 存儲庫託管和協作工具。 數以百萬計的開發人員在線管理著數以百萬計的 Git 存儲庫,無論有多少人在協作,Git 都會跟踪每一個事實來源。

什麼不能存儲在 Git 中

讓我們談談你可能不應該用 Git 做什麼。 儘管 Git 在共享代碼和跟踪隨時間的變化方面非常出色,但有些工作並不適合該模型。 幸運的是,Git 為我們提供了一種方便的方法來告訴它忽略某些內容,稱為“.gitignore”文件。

如果存在“.gitiginore”文件,Git 將檢查它是否應該監視這些項目。 在“.gitiginore”中,您可以列出單個文件名、整個目錄或整個文件類型。 例如,如果您想排除所有 .png 和 .jpg 文件以及整個“wp-content/uploads”文件夾,則在“.gitiginore”文件中只需編寫:

 *.png *.jpg wp-content/uploads

為什麼要從 Git 中排除媒體文件?

Git 存儲項目的快照,並且只傳遞“增量”。 但是,如果所討論的文件是數據“blob”,例如圖像、視頻或任何其他二進製文件,則文件的每次更改都會創建一個全新的數據 blob。 然後 Git 需要記住舊 blob 和新 blob 的狀態,給存儲庫增加了很多不必要的大小。 隨著時間的推移,這種情況會逐漸增加,並且隨著您失去 Git 的輕量級優勢,存儲庫很快就會變得笨拙。

信不信由你,您可能不想跟踪 WordPress 核心本身的變化。 這有幾個原因。

首先,任何 CMS 都有一句老話:“不要破解核心!” 您在 WordPress 的核心中應該沒有任何需要跟踪的更改。 任何更新都需要來自 WordPress 本身,如果您想要更早的版本,安裝時很容易指定。 您絕對可以在 Git 中存儲整個 WordPress 安裝,但在某些情況下這樣做沒有太大價值。 您真的只想跟踪您正在操作的代碼的更改,例如您的自定義插件和子主題。 向您的託管服務提供商諮詢他們對此主題的建議是一個非常好的主意。

其次,如果您打算回饋 WordPress,您會發現它實際上是通過稱為 SVN 的舊版本控制系統維護的。 這種模型需要一個中央服務器基礎設施,與 Git 相比,它的流行度要低得多,但話說回來,WordPress 比 Git 更老。 使用 SVN 補丁系統有點不同,您應該查閱他們的文檔以獲取更多信息。

結論

希望您現在對 Git 是什麼以及如何利用它來處理您的網站代碼有了更好的理解。 Git 可用於您將隨時間更改的任何和所有文件,即使它不是計算機代碼。

Git 將其目標用戶稱為“知識工作者”,這是從 IBM 借來的一個舊術語。 對於從桌面上的筆記到食譜,再到整本書的所有內容,Git 為您提供了一種更好地組織工作的方法,並為自己留下了一個可靠的線索,說明您為什麼要進行每次更改以及何時進行更改。

能夠及時返回並查看您的更改的能力,以及在無限平行宇宙中工作的能力以及分支和合併的能力,使 Git 成為任何從事代碼工作的人不可或缺的工具。 Git 也是團隊在代碼項目上協作的主要方式。

Git 是免費使用的,大多數 Git GUI,比如 GitKraken 都有免費版本。 你沒有理由不使用 Git 來跟踪你的工作,所以“Git”吧!

相關資源

- 使用 XAMPP 進行 WordPress 本地開發

- 高級 Git 使用和工作流程

- Git 鉤子

- 什麼是開發站點?

- 緩存 WordPress