我有一个带有.gitattributes
的git存储库:
my_script.py export-subst
Makefile export-ignore
README.md export-ignore
.gitattributes export-ignore
.gitignore export-ignore
hooks/ export-ignore
tests/ export-ignore
*.pyc export-ignore
但是当我做的时候:
git archive HEAD | tar -x -C ../archive_dir
在archive_dir
目录中,我获取了目录hooks
和tests
:
ls ../archive_dir/
hooks/ my_script.py tests/
为什么?
我的git版本是1.7.9。
答案 0 :(得分:9)
我删除了目录中的/
,这解决了问题
my_script.py export-subst
Makefile export-ignore
README.md export-ignore
.gitattributes export-ignore
.gitignore export-ignore
hooks export-ignore
tests export-ignore
*.pyc export-ignore
我在回答类似问题时找到了解决方案:git ignoring .gitattributes pattern
答案 1 :(得分:2)
自Git 2.2 +(2014年11月)以来,另一种方法是过滤您希望包含在档案中的路径。
commit ed22b41见Nguyễn Thái Ngọc Duy (pclouds
):
archive
:支持使用glob 此修补程序修复了使用时遇到的两个问题:
(glob)
(甚至“*.c
”没有“:(glob)
”。第一个是我们忘记打开
struct pathspec
中的'递归'标志。如果没有这个,tree_entry_interesting()
将不会将潜在目录标记为“有趣”,以便它可以确认这些目录是否具有与pathspec匹配的任何内容。有趣的标记目录有副作用,我们需要走进一个目录才能意识到那里没什么兴趣。到那时,“
archive
”代码已经写下了(空)目录 这意味着结果存档中有很多空目录。当我们知道实际需要时,懒洋洋地写下目录可以解决这个问题。这个实现中存在一个理论上的错误:我们不能编写与那个pathspec匹配的空树/目录。
为了检测不匹配的pathspec,
path_exists()
也变得更加严格,因为当这个'recursive'标志打开时,我们很可能匹配某些目录。最简单的方法是不考虑任何“匹配”的目录。
示例:
git archive -v HEAD -- ":(glob)**/sh"
git archive -o docs.zip v2.2.0 'Documentation/*.html'