有鑑於此,我們應該尋求一種機制來規避這種事故的發生,在 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.java
和test.java
兩個未被追蹤的文件被忽略掉了。
提示:其實可以直接將
gitignore_global.txt
文件中的內容直接寫到.gitconfig
文件中,效果也一樣的。只不過這樣會比較混亂一點,還是推薦上面詳細敘述的方法來設置Git全局忽略文件。