在.gitignore中使用'*.sh',但允许跟踪'A/B/C.sh'

在.gitignore中使用'*.sh',但允许跟踪'A/B/C.sh',git,gitignore,Git,Gitignore,注意:我已从副本中删除此问题,因为在使用时!run.sh对我有效,我希望允许ansible/files中的任何文件(我将来可能添加的任何文件)。我发现的其他解决方案对我无效。 我想从我的存储库中排除所有.sh文件,为此我使用了*.sh,但我想在ansible/files 当前,我的.gitignore文件如下所示: # Ignore python environment venv/ # Ignore .pyc files *.pyc # Ignore .log Files *.log #

注意:我已从副本中删除此问题,因为在使用时!run.sh对我有效,我希望允许ansible/files中的任何文件(我将来可能添加的任何文件)。我发现的其他解决方案对我无效。

我想从我的存储库中排除所有
.sh
文件,为此我使用了
*.sh
,但我想在
ansible/files
当前,我的
.gitignore
文件如下所示:

# Ignore python environment
venv/

# Ignore .pyc files
*.pyc

# Ignore .log Files
*.log

# Ignore any __pycache__
__pycache__/

# Ignore .sh files
*.sh

# Allow any `.sh` file(s) in ansible/files folder
!/ansible/files/*.sh

# Allow any file(s) in ansible/files folder
!/ansible/files/*
但这不起作用,
ansible/files/run.sh
是一个存在但无法跟踪的文件。 问题:为什么
.gitignore
忽略
/ansible/files/*.sh
&
/ansible/files/*
;如何允许跟踪该文件夹中的任何文件

注意:我已从副本中删除此问题,因为在使用时!run.sh适合我,我希望允许
ansible/files
中的任何文件(我将来可能添加的任何文件)
我发现的其他解决方案对我不起作用。

路径前面可能缺少一个通配符。这只是一个假设,但我怀疑您是否有能力将目标定为
(root)/ansible

试试这个:

# Allow any `.sh` file(s) in ansible/files folder
!*/ansible/files/*.sh

# Allow any file(s) in ansible/files folder
!*/ansible/files/*
此外,您必须将
*.sh
的规则更改为以下内容:

# Ignore .sh files
*/*.sh

如果我执行
*/*.sh
操作,它不会忽略
app/scripts/prod/run.sh
中的其他
.sh
文件(包括我要包含的文件,但也包括任何文件夹的第二个子目录中的任何文件)。do
git的可能重复项请选中ignore-v ansible/files/run.sh
,查看与该文件匹配的规则。可能在
ansible
ansible/files
中有一个带有覆盖规则的
.gitignore
,或者路径上可能有一些尾随空格。它将是沿着这些路线的东西。