git忽略.gitattributes模式

时间:2011-04-02 17:35:06

标签: git gitattributes

我有一个像这样的目录结构:

root/
  .git
  deploy/
  Site/
    blah/
    more_blah/
      something.local
      else.development
    Rakefile
    .gitattributes

编辑:为了进一步说明上述情况,目录中有一个尾随/,子目录在目录下缩进,因此blahmore_blah是目录,Rakefile和{ {1}}是文件,但所有四个都是.gitattributes的子项。


我正在Site目录中运行git-archive,如下所示:

Site

但无论我放入.gitattributes的模式,生成的存档总是包含git archive --format=tar --prefix=git-v0.0.1/ v0.0.1 | gzip > ../deploy/git-v0.0.1.tar.zip 。我试过了:

  • Rake文件
  • 站点/ Rake文件
  • * / Rake文件
  • ./ Rake文件
  • Rake文件*
  • *

它们都没有像我期望的那样工作。是否有人愿意指出明显但不明显的解决方案?非常感谢任何帮助。


我为不清楚而道歉。

  • 我说我使用的模式似乎没有用,但我在模式之后使用“export-ignore”。
  • Rakefile不是目录,只是文件
  • .gitattributes文件成功从存档中删除其他模式,Rakefile不是唯一使用的模式,但是唯一不起作用的模式。无论我是单独使用它还是使用其他模式,以及文件中的任何位置,它都不起作用。这不是真的,因为重命名某些文件但没有使用重命名归档提交我是似乎取得了一些好成绩。我的错! :S

这是我的Rakefile(位于目录.gitattributes

Site

7 个答案:

答案 0 :(得分:4)

不确定这是常见的情况,但我在从源树中排除文件夹tests时遇到问题,因为源树有许多嵌套级别的文件夹。如果我只将这一行写入.gitattributes

tests/* export-ignore

它没有工作,整个目录仍保留在存档中。解决方案是为所有子目录级别添加通配符:

tests/* export-ignore
tests/*/* export-ignore
tests/*/*/* export-ignore
tests/*/*/*/* export-ignore
tests/*/*/*/*/* export-ignore

使用这些行,tests目录最终从存档中消失。

答案 1 :(得分:3)

我相信@Jefromi提供了我所需要的信息,可以通过他的评论来解决这个问题,但是太谦虚了,不值得信任,而且我希望将我的验收等级保持在100%(非常正确)所以我会在这里给出答案:


好的,需要两件事。 --worktree-attributes本身不起作用,但是当我将.gitattributes文件从Site目录移动到根目录时,它就起作用了。再次,the Git book implies that the file doesn't need to be in the root for it to work“......(通常是项目的根目录)”,所以我觉得这些文档有点失望(一次)。 IMO,我认为当.gitignore正常工作时,必须选择加入文件并不是你想要的行为。

答案 2 :(得分:2)

注意:要忽略目录,您需要在所述目录的末尾加上“/”。

Rakefile/

对于存档,例如Arrowmaster中的his answer提及,以及Pro Git book details,您需要export-ignore选项:

Rakefile/ export-ignore

答案 3 :(得分:2)

使用git版本1.7.2.5,这是debian squeeze的默认设置(因此这篇文章),必须最后才能成为忽略目录的斜杠。因此,为了忽略上述问题中的deploy dir,必须使用以下行(不使用斜杠):

deploy        export-ignore

这与文档(man gitattributes / man gitignore)和git book相矛盾。 gitattributes的文档引用了gitignore。有趣的是,在.gitignore文件中使用斜杠(deploy /)工作。

我没有测试更高版本的git。

答案 4 :(得分:2)

对于目录我遇到了不同版本的git的问题,所以我必须在有和没有训练斜杠的情况下包含一个条目

  • foo / bar export-ignore
  • foo / bar / export-ignore

foo / bar相对于我运行的地方 git archive ,但实际的.gitattributes除了 - worktree-attributes 之外还在项目根目录中如上所述。

答案 5 :(得分:1)

您是否尝试将文件包含在存储库中,而不是从git archive创建的存档中?如果是这样,.gitattributes文件的语法错误。如果没有,则.gitattributes不是您应该使用的。

要从git archive生成的档案中排除文件,您应将以下内容放入.gitattrubutes

Rakefile export-ignore

答案 6 :(得分:1)

如果您想让git忽略文件,请将其放在.gitignore文件的.attributes文件中。 不是

如果要忽略Rakefile,请将以下内容放在项目根目录的.gitignore文件中。

/**/Rakefile

如果您有多个路径并且只想忽略其中之一,请指定完整路径。

一些如何对这些文件实施模式匹配的示例:

对于所有文件夹中的所有文件
/**/*.ext
对于所有文件夹中的文件
/**/some_file.ext
根文件夹中的文件
/some_file.ext
资料夹中的档案
/some_folder/some_file.ext
文件夹中的所有文件
/some_folder/*