Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.gitignore子目录中的Unignore特定文件_Git_Gitignore - Fatal编程技术网

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

使用.gitignore子目录中的Unignore特定文件,git,gitignore,Git,Gitignore,我有个问题要解决。我想做什么就做什么。我的文件夹结构如下所示: assets ├── img | ├── thousands | ├── of | ├── folders | ├── KEEP_SOMETHING_IN_THIS_FOLDER | | ├── another | | ├── thousands | | ├── of | | ├── folders | | ├── KEEP_THIS_FILE_1.jpg | | ├─

我有个问题要解决。我想做什么就做什么。我的文件夹结构如下所示:

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
我试着保留三个JPG。我试过了

/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

您需要在指定的文件夹中创建.gitignore文件。在您的案例中的“将某物保存在这个文件夹中”。并写下以下几行:

/**
/*.jpg
!not_ignore.jpg
首先提交此
.gitignore
文件,然后尝试提交文件。
但是,如果您的文件已经被暂存(跟踪),请尝试使用git rm--cached来缓存这些文件。

您已经接近:

/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行)不需要在ignore上使用尾随斜杠。

从*nix工作站运行
man gitignore
时,查看
模式格式
部分,我发现以下语句:

  • 可选前缀“!”否定模式;任何匹配的文件 被先前模式排除的将再次被包括它 如果某个文件的父目录为,则无法重新包含该文件 文件被排除。Git没有列出被排除的目录 性能原因,因此包含的文件上的任何模式都没有 效果,无论它们在何处定义。在空格中加反斜杠(\) 对于以文字“!”开头的模式,第一个“!”的前面,用于 示例“!important!.txt”
请注意粗体部分。在您介绍的示例中,您希望取消忽略位于您要忽略的目录的子目录下的文件,即“取消忽略”
操作员将不工作。相反,您必须更具体地使用ignore模式

试试这个尺码:

/assets/img/*/*
!/assets/img/KEEP_SOMETHING_IN_THIS_FOLDER/KEEP_THIS_FILE*.jpg
您可以这样做:

# 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),但想排除

/src/main/webapp/WEB-INF/lib/*.jar

.gitignore中执行此操作

# Package Files #
*.jar
# exclude /src/main/webapp/WEB-INF/lib/*.jar
!/src/main/webapp/WEB-INF/lib/*.jar

虽然这是一种解决方案,但对于OP的要求,这不是必需的。@denns,首先提交这个.gitignore文件,然后再试一次。提交也没有帮助,我git添加了-f文件,但在all@denns我想你的文件已经被转移(跟踪)了。尝试
git rm--cached
这些文件。