0


【Git 学习笔记_25】Git 实用冷门操作技巧(五)—— Git 忽略文件的设置

文章目录

本节所在位置:

  • 活用 git stash(一)
  • 保存并应用 stash(一)
  • 用 git bisect 进行调试(二)
  • 使用 git blame 命令(二)
  • 设置彩色命令行界面(三)
  • 自动补全(三)
  • 让 Bash 自带状态信息(三)
  • 更多别名设置(四)
  • 交互式新增提交(四)
  • 忽略文件(五) ✔️
  • 展示与清理忽略文件(五) ✔️

11.11 忽略文件

所谓忽略文件,通常是指源码产生的编译文件、项目构建产生的内容、文件备份、本地配置等无需纳入版本管理的内容。为了避免这些文件也出现在

git status

的结果里干扰其他源码文件,可将它们添加到

.gitignore

文件。这样,工作区内凡是写入该文件的文件或路径,就都不会出现在

git status

的结果里了。

本节演示忽略文件

.gitignore

的相关操作:

# repo init
$ git clone https://github.com/PacktPublishing/Git-Version-Control-Cookbook-Second-Edition_tips_and_tricks.git ignoredemo
$ cd ignoredemo
$ git checkout ignore
# prepare changes
$ echo"Testing"> test.txt
$ echo"Testing"> test.txt.bak
$ mkdir bin
$ touch bin/foobar
$ touch bin/frotz

接下来实测:

# check status
$ git status -s
?? test.txt
# Why only test.txt displayed? Check ignore file
$ cat .\.gitignore
*.config
*.bak

# Java files
*.class

bin/
# try adding a file ignored
$ gitadd .\bin\frotz
The following paths are ignored by one of your .gitignore files:
bin
hint: Use -fif you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"# force to add the file ignored
$ gitadd-f .\bin\frotz
$ git status -s
A  bin/frotz
?? test.txt

对于已经纳入版本管理的文件,是否可以放到

.gitignore

中呢?

$ echo"foo">> .gitignore
$ echo"more testing">> foo
$ git st -s
 M .gitignore
A  bin/frotz
 M foo
?? test.txt

可以看到,文件

foo

即使添加到忽略文件

.gitignore

中,仍旧会出现在

git status

的结果中。莫非是没有提交

.gitignore

的变更导致的吗?来验证一下:

$ gitadd foo .gitignore
$ git commit -m'Add bin/frotz with force, foo & .gitignore'[ignore ed9ff4c] Add bin/frotz with force, foo & .gitignore
 3 files changed, 2 insertions(+)
 create mode 100644 bin/frotz
$ git st -s
?? test.txt
# change foo to test again
$ echo"abc">> foo
$ git st -s
 M foo
?? test.txt

显然,

foo

还是没被忽略。由此得出结论:已参与版本管理的文件,不可以被忽略,即便加到

.gitignore

文件也是徒劳的。

DIY 拓展:取消某个文件的 Git 版本控制
刚才的实测结果可以看到,要想取消 Git 对某个文件的版本管理,只修改

.gitignore

文件是不够的。正确的做法应该是配合

git rm

命令。假如需要撤销 Git 对文件 example.txt 的版本管理,可以这样操作:

gitrm--cached example.txt
git commit -m"移除 example.txt 的版本控制"

这里的

--cache

表示保留当前工作区中的 example.txt 文件,仅从 Git 仓库取消版本控制。这样本地文件就不会被误删。如果不需要保留该文件,直接使用

git rm --cached example.txt

即可。
另外,若要防止将来该文件再被加入 Git 版本控制,可以将该文件名添加到

.gitignore

文件。

除了常规的

.gitignore

文件外,

git

还提供了两种方式忽略无关内容:

  • 通过全局忽略文件(如 ~/.gitignore_global)忽略;
  • 通过 git 钩子 .git/info/exclude 忽略;

若全局忽略文件不在默认位置,则需要在配置项指定具体路径:

$ git config --global core.exludesfile ~/.gitignore_global

git

钩子为例进行演示:

$ echo"*.test"> .git/info/exclude
$ touch test.test
$ git st -s
 M foo
?? test.txt
$ ls
bin
.gitignore
bar
foo
test.test
test.txt
test.txt.bak

可见,

test.test

虽然存在工作区,但并未显示到

git status

,即忽略操作成功。

值得注意的是,后两种方法存在明显不足:因为没在

git

版本控制范围内,项目需要忽略的所有文件信息都不方便利用

git

共享。因此若想一劳永逸地忽略一个文件并让后面来的人保持一致,还是首选

.gitignore

文件。

小知识

GitHub

提供了不同语言开发项目时常见的忽略文件的内容,在创建

Git

仓库时可以方便地进行初始化设置,详见 https://github.com/github/gitignore。

11.12 展示与清理忽略文件

Git

提供的

.gitignore

文件确实方便,但如果想查看具体有哪些文件或文件夹被忽略了,应该如何操作呢?

可以使用

git clean

命令:

# repo init
$ git clone https://github.com/PacktPublishing/Git-Version-Control-Cookbook-Second-Edition_tips_and_tricks.git ignoredemo
$ cd ignoredemo
$ git checkout ignore
# prepare changes
$ echo"Testing"> test.txt
$ echo"Testing"> test.txt.bak
$ mkdir bin
$ touch bin/foobar
$ touch bin/frotz
# list files ignored
$ git clean -Xnd
Would remove bin/
Would remove test.test
Would remove test.txt.bak

正常情况下,

git clean

会从工作区删除未被管理的文件或文件夹。但加上参数

-n

后则只会显示相关文件,不会实际删除。上例中的:

  • -X 表示仅删除被 Git 设置忽略的文件;
  • -d 表示除了删除未被管理的文件外,还要删除未被管理的文件夹。

此外,

git ls-files

也能查看被忽略文件列表:

$ git ls-files -o-i --exclude-standard
bin/foobar
bin/frotz
test.test
test.txt.bak

其中:

  • -o--others 表示列出未被管理的内容;
  • -i--ignored 表示列出被设置为忽略的内容;
  • --exclude-standard 表示包括 .git/info/exclude.gitignore、以及全局忽略文件中设置的忽略规则。

发散

如果确实想删除被忽略的文件,则使用如下命令:

$ git clean -Xfd
Removing bin/
Removing test.test
Removing test.txt.bak

其中的

-f

表示强制执行(

forced

);

如果想同时删除被忽略文件(

ignored files

)及未追踪文件(

untracked files

),则使用:

git clean -xfd
Removing bin/
Removing test.txt
Removing test.txt.bak

这里的

-x

是小写,表示

Git

的忽略规则不生效,即删除所有未被

git

托管的项目内容(被忽略文件及未追踪文件)。


专栏收尾

至此,本专栏《Git Version Control Cookbook》第 2 版的自学笔记就全部分享完毕了。虽然原书还有第 12 章的内容,但更多是对 GitHub 的网页操作,涉及 Git 命令的知识点并不多,况且介绍的方法都是六年前的网站功能了,因此相关内容及实测情况不收录进本专栏。

Git 的学习并没有结束,需要平时多思多练,在实践中不断完善自己的知识体系。祝大家学有所成,早日拿下 Git 命令这块看似很难的硬骨头!

标签: git 学习 笔记

本文转载自: https://blog.csdn.net/frgod/article/details/142036236
版权归原作者 安冬的码畜日常 所有, 如有侵权,请联系我们删除。

“【Git 学习笔记_25】Git 实用冷门操作技巧(五)—— Git 忽略文件的设置”的评论:

还没有评论