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

时间:2021-6-4 作者:qvyue

有鉴于此,我们应该寻求一种机制来规避这种事故的发生,在 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 ..." 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 ..." 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 ..." to unstage)
        new file:   .gitignore  # 文件名为绿色

Untracked files:
  (use "git add ..." 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 ..." 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 ..." 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 ..." 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 ..." 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 = sun_wk@126.com
# 下面两行是生成的
[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全局忽略文件。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。