我正在使用我的 .gitignore 和各种通配符来仅推送到存储库(与他人共享)特定文件夹或子文件夹。 其中一些 .gitignore 语句涉及执行一般忽略,并且忽略某些其他文件夹除外。 例如。
已解决/#this 阻止推送名为"已解决"的任何文件夹 活动/#this 防止推送名为"活动"的任何文件夹 !01-Excel/Activity #this 允许推送此目录下的 Activity 文件夹,尽管有上面的行。 !01-*/**/Activity #this 允许任何以"01-"开头的文件夹,并且有一个子文件夹,该子文件夹包含一个名为 Activity 的要推送的文件夹,尽管上面有一行。
这是我的问题。
如何在 .gitignore 中使用通配符来允许推送任何具有特定字符串的文件夹。
我有一个这样的文件夹:
01-Excel/Activities/01-Ins_codeStart/Solved/
02-Excel/Activities/02-Stu_codeProgress/Solved/
我希望 git 忽略能够正常工作,以便将任何目录中带有字符串"Ins"的已解决文件夹推送,而任何其他目录下的已解决文件夹则不会被推送。
这是我尝试过的:
!01-Excel/Activities/*-Ins*/Solved
!01-Excel/Activities//**-Ins*/Solved
!01-Excel/Activities//??-Ins*/Solved
这些都无法在其名称中带有"Ins"的目录下推送已解决的文件夹。
我认识到这是杂草丛中的方式,但在我的情况下,实现这一目标的能力将节省大量时间。 谢谢。
这些都无法在其名称中带有"Ins"的目录下推送已解决的文件夹。
您可以使用git check-ignore
检查原因:
git check-ignore -v -- /path/.../Ins/Solved/aFile
我希望
.gitignore
工作,以便将任何带有字符串"Ins
"的目录下的Solved
文件夹推送到其中的任何位置,而任何其他目录下的Solved
文件夹则不会被推送。
每当您需要将文件夹"列入允许列表"时,都需要从.gitignore
中排除所有父文件夹。
这是因为:
如果排除了文件的父目录,则无法重新包含该文件。
因此,您不能忽略文件夹本身Solved/
您可以忽略或不Solved/
文件夹内容(即其子文件和子文件夹)
# Exclude parent folders
!**/
# Ignore Solved folder content
Solved/**
# Exclude specific Solved folder content
!**/*-Ins*/Solved/**
通配递归可以工作,请尝试使用
01-Excel/Activities/**/*-Ins*/Solved
如果我正确理解了您的问题,则如果此文件夹已解决不是字符串"Ins"包含的文件夹的子文件夹,则要忽略文件夹已解决。
然后,您必须在.gitignore
文件中包含以下内容:
# ignore the folder Solved every where in this repository
**/Solved
# expect when the folder Solved is a subfolder of a folder where the string "Ins" contains
!**/*-Ins*/Solved