Git新手教程-添加忽略文件(十)

前言

經過前面的文章,我相信你們已經對 Git 有所掌握了,如今還剩下最後一個知識點,就是讓 Git 添加忽略某些文件。在實際的項目開發中,咱們可能不想將一些文件添加到 Git 倉庫中。好比,一些敏感文件、臨時文件、自動生成文件、日誌文件等。那應該怎麼操做呢?git

實際例子

假設咱們想建立一個項目並使用 Git 進行管理,如今咱們有三個文件 A.mdB.mdC.md,如今咱們不但願將 C.md文件添加到倉庫中。可是 Git 會看到這些文件,因此在咱們運行 git status 命令時,它仍然會顯示在文件列表中:bash

下圖中的項目 GitTestProject 項目,已經經過 git init 初始化過了。ide

忽略文件1.png

那這個時候咱們應該怎麼辦呢?若是咱們想某個文件保留在項目中,又不想它受到 Git 的跟蹤管理,那咱們可使用文件 .gitignore 文件,咱們只須要建立該文件,而後並添加到咱們項目的根目錄中,最後把你想要忽略(讓 Git 不進行跟蹤)的文件名稱填寫到該文件中就能夠了。若是咱們要忽略 C.md 咱們能夠將這行添加到 .gitignore 文件中。學習

在 Mac 系統中不能直接建立 .gitignore 文件,咱們須要在當前項目的根目錄打開控制檯,並輸入 touch .gitignore 來生成 .gitignore 文件。gradle

C.md
複製代碼

這時咱們再使用 git status 來查看咱們的倉庫的狀態:ui

忽略文件2.png

從上圖中,咱們能夠發現 C.md文件已經再也不受 Git 控制了。由於 Git 會查看 .gitignore 文件中的內容,並根據該文件中的內容,自動忽略你想忽略的文件。idea

那既然 C.md文件已經被忽略了,那麼咱們就能夠直接使用 git add . 來添加當前目錄的全部文件啦。spa

還記得以前章節中咱們學習的 git add命令嗎?咱們可使用一個特殊的字符來表示當前目錄和全部的子目錄,而不是一個個的添加文件。還記得是什麼字符嗎?對就是 .(點)日誌

忽略文件通配符

雖然咱們能夠直接在 .gitignore 文件中直接書寫咱們要忽略的文件名稱,可是咱們也可使用 通配符 來忽略一系列知足條件的文件或文件夾。code

通配符容許你使用特殊的字符來表示某些格式/字符。在 .gitignore 文件中,咱們可使用:

  • 空白行做爲空格
  • # : 將行標記爲註釋
  • * : 與 0 個或多個字符匹配
  • ? :與 1 個字符匹配
  • [abc] : - 與 a、b 或 c 匹配
  • ** : 與嵌套目錄匹配,好比 a/**/z 與如下項匹配
    • a/z
    • a/b/z
    • a/b/c/z

下面咱們來看一些簡單的例子來學習一下通配符的使用,好比咱們須要忽略當前項目根目下的 A 文件夾中的全部的 80 張 PNG 格式的圖片,咱們能夠在 .gitignore 文件中書寫:

/A/*.png
複製代碼

注意:Git 默認會忽略文件名的大小寫,咱們可以使用命令 git config --get core.ignorecase 來查看咱們的設置,固然咱們也能夠經過命令 git config core.ignorecase false 將其置爲 false 。

常見問題

如今咱們已經學會如何在 Git 中添加忽略文件了,可是在使用的過程當中,如下幾個問題咱們也是會經常碰見的。

不能將文件添加到 git 倉庫

有些時候,咱們想添加一個文件到倉庫中,可是咱們發現咱們添加不了,緣由是這個文件已經被添加到 .gitignore 文件中忽略了。好比結合上述例子,咱們想添加 C.md 文件,會有以下提示:

git add C.md
The following paths are ignored by one of your .gitignore files:
C.md
Use -f if you really want to add them.
複製代碼

若是咱們確實須要添加該文件,那麼咱們可使用 -f 選項來強制添加。

git add -f C.md
複製代碼

經過 -f 選項強制添加的文件,在後續的使用中與其餘正常被 Git 跟蹤的文件使用效果同樣。也就是說 C.md 文件將會受到 Git 的跟蹤管理。

若是你以爲 gitignore 中的忽略文件的書寫有誤,咱們也可使用 git check-ignore 來查看咱們的忽略文件的規則:

git check-ignore -v c.md
.gitignore:1:C.md c.md
複製代碼

關於該命令的更多介紹,能夠查看官方文檔git-check-ignore

已經添加到暫存區中的文件如何忽略

仍是結合咱們上述的例子,在項目中,咱們忘記了在 .gitignore 文件中添加忽略文件 C.md,直接使用了 gid add . 命令,將全部的文件都添加到了暫存區中,以下所示:

忽略文件3.png

那麼這個時候,咱們可使用 git rm --cached 命令,將 C.md 文件從暫存區中移除:

關於 git rm 命令的使用,能夠查看官方文檔git rm

git rm --cached C.md
複製代碼

這個時候,咱們在使用 git status 命令來倉庫咱們的倉庫的狀態,咱們會發現 C.md 文件已經從暫存區中移除了。

忽略文件4.png

那麼接下來,咱們就能夠修改咱們的 .gitignore 文件,將 C.md 添加到該忽略文件中去了。

已經被跟蹤文件如何忽略

不只將文件添加到 Git 倉庫,還推送到遠程倉庫了。而且其餘合做的小夥伴已經從遠程倉庫拉取了更新。這個時候才發現某些文件須要忽略。

這種狀況下,若是咱們再將想忽略的文件添加到 .gitignore 文件中,已經徹底不起任何做用了。

那怎麼辦呢?咱們可使用另一個命令:

git update-index --assume-unchanged <file>
複製代碼

仍是以上文中的 C.md 爲例子,咱們能夠這樣:

git update-index --assume-unchanged C.md
複製代碼

使用該命令後,即便咱們修改了已經被跟蹤的 C.md 文件,Git 也會默認咱們沒有更改該文件。什麼意思呢?也就是咱們本地隨便修改該文件,Git 始終認爲它和原來的版本同樣。那麼在以後的項目開發中,就不會產生包含該文件的提交了。

一樣,咱們也能夠恢復對該文件的追蹤,咱們可使用命令:

git update-index --no-assume-unchanged <file>
複製代碼

關於該命令的使用,能夠查看官方文檔--no-assume-unchanged

小小的建議

經過閱讀本篇文章,相信小夥伴已經意識到了找準正確的時間,添加忽略文件是多麼的重要。這裏須要提醒第一次使用 Git 或其餘版本管理系統的小夥伴們。在建立倉庫時,必定要先處理忽略文件,也就是你的 .gitignore 文件必定要在項目初始化完成後提交!!!! 由於後期再來處理忽略文件,就很是的麻煩與複雜。

因此在平時的項目中,必定要肯定本身項目中哪些文件到底應該被追蹤,哪些應該不被追蹤。以 Android 項目爲例:

*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
複製代碼

上述忽略文件是通常 Android 項目都會設置,由於這些都是一些配置文件、中間文件、項目配置文件等。固然不一樣的項目所須要配置的忽略文件並不相同,你們能夠結合自身的需求來配置。這裏就不具體講解其餘項目的忽略文件的配置了。

最後

整個 Git 新手系列教程,到如今已經寫完了,雖然前先後後花費了一個月的時間,可是當本身完成後,卻忍不住的知足與自豪。不是本身漲了好多粉絲,而是爲本身能堅持作一件事而感到高興。給本身定一個小目標,一步一步實現的感受真好~

相關文章
相關標籤/搜索