gpt4 book ai didi

Git ignore - 你如何覆盖忽略所有的异常?

转载 作者:行者123 更新时间:2023-12-05 08:42:52 29 4
gpt4 key购买 nike

我想为我的 bash 设置和插件等创建一个 git 仓库。我忽略了所有内容(第 0 行),然后在 repo 中手动添加了我想要的文件/文件夹。 (我必须这样做,因为 repo 在我的 ~ 文件夹中。)我想忽略 .vim/colors/目录中的所有颜色配置文件,但我确实想包含一个文件我正在使用 (apprentice.vim)。

.vim/colors/* 行似乎不起作用 - 它根本不忽略任何文件。使用 !!.vim/colors/* 也不起作用。我应该如何让它覆盖所有以前的规则并忽略颜色文件夹,然后仍然允许忽略 apprentice.vim 文件?

/*

*.swp

!.gitignore

!.bashrc
!.bash_profile

!.vimrc
!.vim
.vim/colors/* # Don't include all of the other color schemes
!.vim/colors/apprentice.vim

最佳答案

问题是 # comment.vim/colors/* 位于同一行,但这里有一个替代方案。

gitignore 的主要规则是:

It is not possible to re-include a file if a parent directory of that file is excluded.

这意味着:
(假设元素还没有版本化,在这种情况下你需要先 git rm --cached 它们):

  • 您需要递归地忽略所有文件:即“**
  • 递归地排除所有文件夹:那些是'**/'
  • 排除你想要的文件(这会起作用,因为它的父文件夹也不会被忽略)

结果:

/**
!/**/
!exclude what you want to *not* be ignored
# for instance
.vim/colors/* # Don't include all of the other color schemes
!.vim/colors/apprentice.vim

使用 git check-ignore -v 检查忽略和未忽略的内容(-v 很重要):

git check-ignore -v -- afile

这比手动取消忽略子文件夹更容易,尤其是当要取消忽略的子文件夹内容有几层深度时:排除 a/b/c 中的文件,您需要先取消忽略 !/a,然后是 !/a/b,然后是 !/a/b/c)


说明/测试:

C:\Users\vonc\prog\git\tests>git init i
Initialized empty Git repository in C:/Users/vonc/prog/git/tests/i/.git/

C:\Users\vonc\prog\git\tests>cd i

C:\Users\vonc\prog\git\tests\i>mkdir .vim\colors

C:\Users\vonc\prog\git\tests\i>touch .vim\colors\apprentice.vim

C:\Users\vonc\prog\git\tests\i>git st
On branch master

Initial commit

Untracked files:
(use "git add <file>..." to include in what will be committed)

.vim/

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

带有 /* 规则的简单 .gitignore:

C:\Users\vonc\prog\git\tests\i>sbt .gitignore
/*

C:\Users\vonc\prog\git\tests\i>git st
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

让我们添加 !.gitignore
现在可以跟踪 .gitignore

C:\Users\vonc\prog\git\tests\i>git st
On branch master

Initial commit

Untracked files:
(use "git add <file>..." to include in what will be committed)

.gitignore

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

但是如果我添加:

.vim/colors/*
!.vim/colors/apprentice.vim

.vim 所有 内容仍然被忽略:

C:\Users\vonc\prog\git\tests\i>git st
On branch master

Initial commit

Untracked files:
(use "git add <file>..." to include in what will be committed)

.gitignore

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

让我们用 git check-ignore 检查原因:

C:\Users\vonc\prog\git\tests\i>git check-ignore -v -- .vim\colors\apprentice.vim
.gitignore:1:/* ".vim\\colors\\apprentice.vim"

添加 !.vim 是有效的,因为它取消忽略文件夹,允许应用该文件夹中的其他规则。

不过,这更简单:

/**
!/**/
!.gitignore
.vim/colors/*
!.vim/colors/apprentice.vim

关于Git ignore - 你如何覆盖忽略所有的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507029/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com