忽略Git中除子文件夹外的所有内容

7

我浏览了其他的问题,但是没有找到适用于我的项目的有效解决方案。我的项目是一个Magento项目,我想排除除此之外的所有内容:

/app/design/frontend/default/theme_name # and obviously all subfolders
/skin/frontend/default/theme_name # and all subfolders

我尝试了很多组合但都没有成功。目前我卡在这个.gitignore文件上:

*
!/app/
!/app/*

app/*
!/app/design/
!/app/design/*

但是它在设计文件夹下无法递归工作。它只添加了我创建的设计文件夹内的一个测试文件。

3个回答

5

我做了一些研究,以下方法对我有效:

/*
!/directory
!/another
/another/*
!/another/directory

使用这个命令可以正确跟踪/directory的子目录。但奇怪的是,第一行输入只有 / 或者只有 * 时无法正常工作 - 我不确定原因。


不幸的是,!/another/directory 对我不起作用。我应该在每个级别上忽略/取消忽略。 - s3v3n
我不确定是否取决于git版本。我正在使用 git version 1.7.4.1 - Paweł Obrok
我有完全相同的 $ git --version git version 1.7.4.1 - s3v3n
它只是忽略了/another/directory。正如manojlds所指出的那样,它被简单地忽略了,因为它的父目录被忽略了。 - s3v3n

5
请看我在这里的答案:Can't understand how gitignore ignores the folders 引用自该网页:
以下讨论很有帮助:http://git.661346.n2.nabble.com/negated-list-in-gitignore-no-fun-td1675067.html,特别是来自Linus的以下内容:
“这是有意设计的。你选择忽略那些目录;它们与“*”匹配。因此,“git add .”不会进入它们查找文件。”
所以基本上,对于每个级别,您都必须进入其中一个级别,取消忽略该文件夹,并忽略该文件夹内的内容。
另外,您应该考虑在子目录中使用.gitignore而不是仅在根级别使用它,因为由于上述解释,如果您必须从根.gitignore到子目录级别,则变得非常复杂,因为对于每个级别,您都必须取消忽略文件夹,然后忽略其内容,依此类推。

设计缺陷造成的 bug :o - Rag
@Briad Gordon - 这就是 Linus 的风格 :D - manojlds

0
/**
!/**/
!/app/design/frontend/default/theme_name/**
!/skin/frontend/default/theme_name/**

解释:

  1. 递归地忽略所有文件和文件夹(注意双星号)。
  2. 递归地排除所有文件夹(按照设计,git 不会提交空文件夹,但一个包含被忽略文件的文件夹会被计算在内。我们需要这个来使下面两个排除生效)。
  3. 递归地从此位置排除所有文件和文件夹。
  4. 递归地从此位置排除所有文件和文件夹。

我通常对子文件夹执行此操作,因此我不知道第一行是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接