【學了就忘】Git操作 — 55.忽略文件的三種方式

有鑑於此,我們應該尋求一種機制來規避這種事故的發生,在 git 版本控制系統中一般有三種不同的解決方案。

最常用也是最簡單的當屬 .gitignore 文件。

(1)忽略單個倉庫中的文件(遠程共用)

該方式是在工作中最常用的方式,配置方法是在倉庫的根目錄下新建 .gitignore 文件,在文件裏配置忽略規則,同時把 .gitignore 文件加入版本管理。之後可以同步該配置到遠程倉庫,其他開發者可更新該文件到本地倉庫,與其他克隆倉庫共享同一套忽略規則。

.gitignore文件對其所在的目錄,及所在目錄的全部子目錄均有效。

1)查看當前Git工作目錄中文件狀態

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.java
        local.txt
        test.java
        xyj-sha_hs.py
        xyj-sun_wk.py
        xyj-zhu_bj.py

nothing added to commit but untracked files present (use "git add" to track)

可以看到有6個未被追蹤的文件。

2)在Git倉庫的根目錄下新建一個名爲.gitignore的文件

因爲是點開頭,沒有文件名,沒辦法直接在windows系統中直接創建,要通過Git Bash客戶端,用Linux系統的方式新建.gitignore文件。

# 創建.gitignore文件。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ touch .gitignore

# 查看本地版本庫中是否成功創建.gitignore文件。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ ll -a
total 12
drwxr-xr-x 1 L 197121 0  4月 10 11:52 ./
drwxr-xr-x 1 L 197121 0  4月  2 21:54 ../
drwxr-xr-x 1 L 197121 0  4月 10 11:51 .git/
-rw-r--r-- 1 L 197121 0  4月 10 11:52 .gitignore
-rw-r--r-- 1 L 197121 0  4月  4 10:37 hello.java
-rw-r--r-- 1 L 197121 0  4月 10 11:46 local.txt
-rw-r--r-- 1 L 197121 0  4月  4 01:20 test.java
-rw-r--r-- 1 L 197121 0  4月  4 10:38 xyj-sha_hs.py
-rw-r--r-- 1 L 197121 0  4月  4 10:38 xyj-sun_wk.py
-rw-r--r-- 1 L 197121 0  4月  4 10:38 xyj-zhu_bj.py

3)將需要忽略的文件寫入.gitignore文件中

提示:每個文件或者正則匹配佔一行。

# 配置.gitignore文件內容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "xyj-*.py" > .gitignore

# 查看.gitignore文件內容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .gitignore
xyj-*.py

4)將.gitignore文件提交到本地版本庫

# 1.查看當前Git工作目錄中文件狀態
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore  # 文件名都爲紅色
        hello.java
        local.txt
        test.java

nothing added to commit but untracked files present (use "git add" to track)

# 我們可以看到,xyj開頭的文件已經被忽略掉了,但只是在本地起作用。

# 2.追蹤.gitignore文件
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add .gitignore

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   .gitignore  # 文件名爲綠色

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.java  # 文件名都爲紅色
        local.txt
        test.java

# 3.提交.gitignore文件到本地版本庫
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit -m 'create ignore file'
[master d3ceba8] create ignore file
 1 file changed, 1 insertion(+)
 create mode 100644 .gitignore

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.java  # 文件名都爲紅色
        local.txt
        test.java

這樣就完成可忽略文件的整個過程了。

(2)忽略單個倉庫中的文件(本地使用)

用這種方式配置忽略文件,不會同步該設置至遠程倉庫,只在本機起作用。

配置方法是直接編輯Git倉庫根目錄下的.git/info/exclude文件,把要忽略的規則直接寫入,這個方法只在本機當前倉庫起效,不會對其他的克隆倉庫起效。

1)查看當前Git工作目錄中文件狀態

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.java  # 文件名都爲紅色
        local.txt
        test.java

nothing added to commit but untracked files present (use "git add" to track)

可以看到有3個未被追蹤的文件。

2)編輯Git倉庫根目錄下的.git/info/exclude文件,配置忽略

# 1.我們先來查看一下.git/info/exclude文件的默認內容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

# 2.配置忽略文件,把local.txt文件進行忽略
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "local.txt" >> .git/info/exclude

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
local.txt

3)再次查看當前Git工作目錄中文件狀態

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.java
        test.java

nothing added to commit but untracked files present (use "git add" to track)

我們可以看到local.txt文件被忽略了。

(3)全局忽略

忽略規則由本機所有倉庫共用(也就是對本機的所有Git倉庫都起作用),配置方法如下:

Linux中,這時把全局要忽略的文件列表.gitignore放當前用戶根目錄下( ~/.gitconfig ):

git config --global core.excludesfile '~/.gitignore'

Windows中,這時把全局要忽略的文件列表.gitignore放當前用戶根目錄下:

git config --global core.excludesfile "%USERPROFILE%\.gitignore(可自定義)"

我們以Windows系統爲例:

1)查看當前Git工作目錄中文件狀態

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.java
        test.java

2)創建.gitignore忽略文件

我們可以複製用戶根目錄下的.gitconfig文件,並改名爲.gitignore文件。

注意:

  • .gitconfig文件可以改成其他名稱,如.gitignore_global,這樣好區分工作目錄中的.gitignore忽略文件。
  • .gitconfig文件也可以使用.txt格式的文本文件代替,例如gitignore_global.txt

如下:

# 複製文件,生成gitignore_global.txt文件
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cp /c/Users/L/.gitconfig /c/Users/L/gitignore_global.txt

# 查看gitignore_global.txt文件是否生成
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ ll /c/Users/L/.git*
-rw-r--r-- 1 L 197121 90  4月  5 20:52 /c/Users/L/.gitconfig
-rw-r--r-- 1 L 197121 90  4月  5 20:59 /c/Users/L/gitignore_global.txt

# 清空gitignore_global.txt文件中的內容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "" > /c/Users/L/gitignore_global.txt

3)將忽略文件配置到Git全局配置文件.gitconfig文件中

通過如下命令進行配置。

git config --global core.excludesfile /c/Users/L/gitignore_global.txt

執行命令後,查看.gitconfig文件內容,如下:

[user]
    name = sun_wk
    email = [email protected]
# 下面兩行是生成的
[core]
    excludesfile = C:/Users/L/gitignore_global.txt

提示:如果之前配置global級別的配置簽名,.gitconfig文件就已經被創建。

至此之後,所有Git倉庫都會自動應用這個gitignore_global.txt文件中,所配置忽略的文件。

當然本例子是存放於 當前用戶的根目錄下,你可以改成其他路徑,但是不推薦。

4)把需要忽略的文件加入到gitignore_global.txt文件中

gitignore_global.txt文件中的內容清空,之後添加要忽略的文件。

gitignore_global.txt文件內容如下:

# 忽略所有.java文件,也可以單個文件寫
*.java

5)查看learngit倉庫工作目錄文件狀態

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean

可以看到hello.javatest.java兩個未被追蹤的文件被忽略掉了。

提示:其實可以直接將gitignore_global.txt文件中的內容直接寫到.gitconfig文件中,效果也一樣的。只不過這樣會比較混亂一點,還是推薦上面詳細敘述的方法來設置Git全局忽略文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章