.gitignore没有递归应用

时间:2018-02-04 22:51:23

标签: git gitignore

结束目标: 让git以递归方式忽略*.abc

类型的文件

问题: GIT中

说明

我在位于gitignore的{​​{1}}顶级文件中有以下行。

/home/alma/project-origin/.gitignore

我发出以下命令并获得以下输出

/**/*.abc

故障排除我在该文件夹中创建了一个cd /home/alma/project-origin/top-secret/subject touch alma-wade.abc git status . On branch master Untracked files: (use "git add <file>..." to include in what will be committed) alma-wade.abc nothing added to commit but untracked files present (use "git add" to track) 文件并再次运行

.gitignore

我删除了.gitignore本地文件(cd /home/alma/project-origin/top-secret/subject touch alma-wade.abc echo "*.abc" >> .gitignore git status . On branch master Untracked files: (use "git add <file>..." to include in what will be committed) modified: .gitignore nothing added to commit but untracked files present (use "git add" to track) )并开始解决问题

(A)从缓存中删除

Source

rm /home/alma/project-origin/top-secret/subject/.gitignore

(B)检查文件编码

Source

cd /home/alma/project-origin/top-secret/subject
git rm -r --cached .
git commit -m "..."
git push origin master
#Successful push
git add .
git status .
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        alma-wade.abc

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

(C)检查尾随空格

在vim中打开file -bi /home/alma/project-origin/.gitignore text/plain; charset=us-ascii 并发出命令/home/alma/project-origin/.gitignore并进行目视检查

(D)使用git check-ignore -v

:set list

(E)在顶级目录中使用git check-ignore -v

这是我最接近解决此问题的方法

git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
#no output
echo "*.abc" >> .gitignore
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
/home/alma/project-origin/top-secret/subject/.gitignore:1:*.abc       /home/alma/project-origin/top-secret/subject/alma-wade.abc
rm .gitignore

当我从顶级文件夹进行检查时应用顶级cd /home/alma/project-origin/ echo "/**/*.abc" >> .gitignore cd /home/alma/project-origin/top-secret/subject/ git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc #No output cd /home/alma/project-origin/ git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc /home/alma/project-origin.gitignore:1:/**/*.abc /home/alma/project-origin/top-secret/subject/alma-wade.abc 规则,但是当我在子文件夹中时则不应用。我没办法。我唯一能想到的是这与文件系统(安装了cifs)有关。有人可以帮忙。

2 个答案:

答案 0 :(得分:1)

如果您想忽略每个结尾.abc的文件,那么您只需要:*.abc - **主要用于匹配中包含子目录名称的匹配。

有关**语法(以及其他全局)的一些示例,请参阅https://www.atlassian.com/git/tutorials/gitignore

例如:

$ git init test
$ cd test
$ mkdir -p 1/2
$ touch foo.txt 1/bar.txt 1/2/baz.txt
$ git status
On branch master

No commits yet

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

1/
foo.txt

$ echo "*.txt" >.gitignore
$ git status
On branch master

No commits yet

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

.gitignore

答案 1 :(得分:1)

如果你有嵌套的Git存储库,“外部”存储库中的.gitignore不会影响“内部”存储库:

mkdir outer && cd outer
git init
echo '/**/*.txt/' > .gitignore
touch foo.txt
git status
# Untracked file '.gitignore'
# No mention of 'foo.txt'

mkdir inner && cd inner
git init
touch foo.txt
git status
# Untracked file 'foo.txt'

由于您有一个内部存储库,您似乎没有故意创建,我建议删除其.git/目录(在您认为合适的任何备份之后)。这将使该目录的内容受外部存储库的约束,.gitignore现在应该生效。

您可能希望将内部目录中的文件提交到外部存储库。