使用.gitignore取消子目录中的特定文件

问题描述 投票:9回答:4

我有一个问题要让.gitignore做我想做的事。我的文件夹结构如下所示:

assets
├── img
|   ├── thousands
|   ├── of
|   ├── folders
|   ├── KEEP_SOMETHING_IN_THIS_FOLDER
|   |   ├── another
|   |   ├── thousands
|   |   ├── of
|   |   ├── folders
|   |   ├── KEEP_THIS_FILE_1.jpg
|   |   ├── KEEP_THIS_FILE_2.jpg
|   |   ├── KEEP_THIS_FILE_3.jpg

我试着保留三个jpgs。我试过了

/assets/img/*
!/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/
/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/*/
!/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/KEEP_THIS_FILE_*.jpg
git gitignore
4个回答
7
投票

您需要在指定的文件夹中创建.gitignore文件。在您的情况下“KEEP_SOMETHING_IN_THIS_FOLDER”。写下这句话:

/**
/*.jpg
!not_ignore.jpg

首先提交此.gitignore文件,然后尝试提交您的文件。 但是如果您的文件已经上传(跟踪),请尝试git rm --cached <filePath>这些文件。


3
投票

你很亲密:

/assets/img/*
!/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/

# changed this:
# /assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/*/
# to:
# /assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/*
/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/*
!/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/KEEP_THIS_FILE_*.jpg

对于子文件夹(第3行),您不需要忽略尾部斜杠。


3
投票

当从* nix工作站运行man gitignore,并查看PATTERN FORMAT部分时,我发现以下声明:

  • 可选前缀“!”否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。如果排除该文件的父目录,则无法重新包含文件。出于性能原因,Git不会列出排除的目录,因此无论在何处定义,所包含文件的任何模式都不起作用。在第一个“!”前放一个反斜杠(“\”)对于以文字“!”开头的模式,例如“!important!.txt”。

注意粗体部分。在您提供的情况下,如果要取消忽略您忽略的目录的子目录下的文件,“un-ignore”!运算符将无法运行。相反,您必须更加具体的忽略模式。

试试这个尺码:

/assets/img/*/*
!/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/KEEP_THIS_FILE*.jpg

1
投票

你可以这样做:

# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar

并喜欢:

# exclude /filepath/includes/a.java
/*
!/filepath
/filepath/*
!/filepath/includes
/filepath/includes/*
!/filepath/includes/a.java

顺便说一句如果你想忽略所有jar(* .jar),但想要排除

/双人床/卖弄/Web app/Web-inf/礼拜/*.jar

在.gitignore中执行此操作

# Package Files #
*.jar
# exclude /src/main/webapp/WEB-INF/lib/*.jar
!/src/main/webapp/WEB-INF/lib/*.jar
© www.soinside.com 2019 - 2024. All rights reserved.