9

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

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

编辑:为了进一步阐明上述内容,目录有一个尾随,子目录/在目录下缩进,所以blahmore_blah是目录,但Rakefile.gitattributes是文件,但所有四个都是Site.


git-archive从这样的Site目录运行:

git archive --format=tar --prefix=git-v0.0.1/ v0.0.1 | gzip > ../deploy/git-v0.0.1.tar.zip

但无论我在 .gitattributes 中放入什么模式,生成的存档总是包含 .gitattributes Rakefile。我试过了:

  • 耙文件
  • 站点/Rakefile
  • */耙文件
  • ./耙文件
  • 耙文件*
  • *

他们都没有像我预期的那样工作。有人愿意指出对我来说明显但不明显的解决方案吗?任何帮助深表感谢。


我很抱歉不清楚。

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

这是我的.gitattributes(坐在目录中Site

Rakefile        export-ignore
*.local         export-ignore
*.development   export-ignore
*.staging       export-ignore
4

7 回答 7

5

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

tests/* export-ignore

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

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

有了这些行,tests目录终于从存档中消失了。

于 2014-05-23T06:12:33.303 回答
4

注意:要忽略目录,您需要/在所述目录的末尾有一个''。

Rakefile/

对于存档,就像Arrowmaster他的回答中提到的那样,并且像Pro Git book details一样,您需要以下export-ignore选项:

Rakefile/ export-ignore
于 2011-04-02T18:56:42.753 回答
4

我相信@Jefromi 通过他的评论为我提供了解决此问题所需的信息,但我太谦虚了,无法接受,我想将我的接受率保持在 100%(非常正确),所以我会给出答案这里:


第一次编辑:

好的,需要两件事。--worktree-attributes本身不起作用,但是当我将.gitattributes文件从站点目录移到根目录时,它就起作用了。同样,Git 书暗示该文件不需要在根目录中即可工作(注意:死链接)

...(通常是您项目的根目录)


很久以后编辑:

即使是最新版本的文档(2.35.1),也有对不在回购根目录(GIT_WORK_TREE / GIT_DIR)中的 .gitattributes 文件的引用,例如

不在工作树子目录中的 .gitattributes 文件中

访问工作树中的 .gitattributes 文件时,Git 不遵循符号链接。


我对那些文档感到有点失望(一次)。我还认为,当 .gitignore 正常工作时,必须选择加入文件不是你认为的行为,IMO。

于 2011-04-11T16:24:52.527 回答
3

如果您希望 git 忽略文件,请将其放在.gitignore文件中,而不是.attributes文件中。

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

/**/Rakefile

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

如何为这些文件实现模式匹配的几个示例:

对于所有文件夹中的所有文件
/**/*.ext
对于所有文件夹中的文件
/**/some_file.ext
根文件夹中的文件
/some_file.ext
文件夹中的文件
/some_folder/some_file.ext
一个文件夹中的所有文件
/some_folder/*
于 2020-02-27T20:53:04.147 回答
2

对于目录,我在使用不同版本的 git 时遇到了问题,因此我必须包含一个带有和不带有训练斜线的条目:

  • foo/bar 导出忽略
  • foo/bar/ 导出忽略

其中 foo/bar 相对于我运行git archive的位置,但实际的 .gitattributes 位于项目根目录中,除了--worktree-attributes如上所述。

于 2013-10-16T23:31:18.513 回答
2

使用 git 版本 1.7.2.5,这是 debian 挤压的默认版本(因此这篇文章),末尾不能有斜杠来忽略目录。因此,为了忽略上述问题中的部署目录,必须使用以下行(无斜杠):

deploy        export-ignore

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

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

于 2012-08-21T17:54:48.183 回答
1

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

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

Rakefile export-ignore
于 2011-04-02T18:46:54.680 回答