1. 程式人生 > 實用技巧 >使用 Git 來管理程式碼(上)

使用 Git 來管理程式碼(上)

關於我的程式碼倉庫

如果你關注我的 Github,那你應該知道,我最近新建了一個倉庫,專門用來存放我平常在OJ上刷的題的程式碼,地址在這裡:

https://github.com/dong628/OhMyCodes(求star啊啊啊)

這個倉庫使用 MIT 協議開源,意味著任何人都可以複製、修改、分發(商業或非商業),並且不需要使用相同的協議。

目前位置,一共有67次 commit ,記錄著我從2020年5月的刷題記錄。

為什麼使用 Git

我每天上午會去學校機房刷題,下午有時間會接著刷,於是,在這兩個地方管理程式碼就顯得很麻煩。

一個樸素的策略是,用一個可移動儲存介質(比如U盤)在家和學校之間拷貝程式碼。U盤,機房和家中的電腦同時存放著一份我刷過所有題的程式碼,每次我在家或學校更新,都將最新的版本拷貝到U盤上,再帶到另一個地方更新那邊的檔案。

但是這樣做有許多問題:

  • 用U盤一個個拷貝太麻煩了
  • 萬一哪天存著最新版本的裝置壞了怎麼辦,難道要用另一個U盤備份?
  • 哪天我程式碼寫錯了,沒有辦法退回到上一個版本
  • 插上U盤 -> 拖動滑鼠拷貝檔案 -> 拔出U盤 這個操作太不(mei)優(you)雅(bi)了(ge)

Linux 的創始人——Linus Torvalds 早就意識到了這個問題,於是用一個星期的時間寫出了 Git,並且把它用在了 Linux 核心原始碼的版本控制上,真正的詮釋了那句他自己說的千古名句:

Talk is cheap, show me the code! --Linus Torvalds

說來這是個版本控制系統,但其實我使用它回退版本的次數非常少,更多的是用來配合 Github 來遠端協作的。

所以說,如果沒有更復雜的需求的話,Git 需要記的命令是非常少的,更重要的是對這個系統的理解。

再說,作為一個學計算機的,Git 也是未來做專案時必備的生存技能。

安裝

本來,我認為幾乎所有的 Linux 發行版會自帶 Git,但事實上很多發行版並不會自帶。

但是,我相信絕大部分發行版的 軟體倉庫/預設軟體源 中都會有git,所以你可以用自己發行版的包管理器來安裝 Git。

如果你是 Windows,那麼 快去用 Linux ! 可以在 https://git-scm.com/download/windows 這個地址下載。

Mac 可以在 https://git-scm.com/download/mac 這裡下載。

基本命令

由於 Windows 下自帶的那個 Git GUI 對我來說就是個廢物,作為每天用命令列 Git 的我上手後根本不知道如何使用,說是 GUI ,但對新手非常不友好。

再加上 Windows 下的 Git Bash 是 Windows 下 Bash 模擬器的典範,所以這個系列只有命令列,沒有 GUI。

使用者配置

即使 Git 只有你一個人離線使用,你也要首先告訴 Git 你是誰,所以就有了下面這兩句:

git config --global user.name "dong628"  #名稱
git config --global user.email [email protected]   #郵箱

建立一個倉庫

倉庫(Repository),可以看作是一個由 Git 管理的資料夾,有了倉庫,Git 就可以跟蹤其中的檔案,記錄版本變化。

要想把一個資料夾變成一個 Git 倉庫,只需要在這個資料夾中鍵入以下命令:

git init

在 Windows 下,如果打開了顯示隱藏檔案,那麼在那個資料夾中應該可以看到 .git 目錄,這是 Git 用來存放歷史版本的地方。對於 GNU/Linux 系統,可以使用 ls -a 命令查詢到這個資料夾

當你建立好倉庫後,使用 git status 命令可以檢視這個倉庫的狀態

新增追蹤檔案

並不是資料夾中所有的檔案都要被 Git 跟蹤。事實上,即使你在這個資料夾中寫了一堆檔案,如果不執行任何命令,Git 是不會注意到這些檔案的任何變化的,倉庫也會是空空如也。

當這個資料夾中新增了檔案,Git 就會檢測到這個檔案沒有被跟蹤,從而在執行 git status 命令後給出這樣的提示:

就像這段文字的提示一樣, git add 命令主要有兩個作用:

  1. 將未跟蹤的檔案新增跟蹤
  2. 將工作區的修改提交到暫存區

其實1和2本質上是一樣的,為此,要先來介紹一下 Git 中的暫存區域。

暫存區,顧名思義,暫時存放檔案的區域。一個 Git 倉庫中有三個區域,分別時工作區、暫存區、版本庫。其中,只有版本庫存放了所有版本,工作區和暫存區都是隻會存放一個版本的。其中,暫存區可以看作是一個存放著所有你 add 過的檔案,並且可以隨時把這些檔案一次性打包,作為一個新版本放入版本庫的。

所以,當執行了 git add <檔名> 後,執行 git status 就會有這樣的輸出:

可以看到,檔案已經被 Git 追蹤,如果不信,可以修改這個檔案,再執行 git status 試試:

可以看到,Git 已經檢測到了檔案的更改。

當工作區和暫存區出現偏離

當提交到暫存區的檔案在工作去被修改時,Git 會檢測到檔案被修改了,並且給使用者兩個選擇

  1. 將工作區的新檔案提交到暫存區 ( git add命令)
  2. 將暫存區的檔案恢復到工作區 ( git restore 命令)

如果工作區的這個修改是你不小心改掉了一些什麼東西,那就可以使用第二條命令來恢復工作區。

如果這是一個正確的改動,並且你想要更新暫存區裡的檔案,那麼可以使用第一條命令。

但其實這兩個命令都是具有危險性的,因為它們都會刪除一些版本呢,那麼有沒有什麼方法可以同時保留這兩個版本呢?

將暫存區的檔案提交到倉庫

當你認為暫存區裡的這些檔案已經是一個成型的版本,需要儲存起來以便回溯時,就需要將暫存區中的檔案打包成一個版本,放入版本倉庫。

當遇到上面的情況,也就是工作區和暫存區發生了偏離,Git 只告訴你可以儲存一個,但沒有告訴你兩個都要的方法。

為此,我們可以使用下面的命令:

git commit -m "<本次提交的註釋>"
git add test.cpp

這樣,我們成功地將暫存區裡的版本提交到了版本庫中,為此,你可以使用 git log 來檢視版本庫中存放的版本資料:

-> to be continued...