1

可能重复:
Git - 将复杂目录结构中的文件列入白名单

我想要一个 git 存储库只跟踪名为 eg 的文件SOURCES,而其他所有内容都应被忽略(例如,一棵 pdf 文件树,其中每个SOURCES文件都列出了它们的来源)。最简单的镜头是

*
!SOURCES

.gitignore. 然而,排除 egA/SOURCES被 覆盖*,需要我使用git add -f. 如何.gitignore修改以忽略除命名文件之外的所有内容SOURCES而不需要强制添加?

编辑此处发布的解决方案将不起作用,因为目录结构不固定,即SOURCES不应该.gitignore手动添加包含文件的新目录...

4

1 回答 1

1

您无法仅使用.gitignore

Git 不跟踪路径。它仅跟踪对象(〜文件)。

那么,为什么不反转表格:

git add -f -- */*/SOURCES */SOURCES

或者

shopt -s globstar
git add -f -- **/SOURCES

或者拿出大枪:

git add -f -- $(find -type f -name SOURCES)

甚至

find -type f -name SOURCES -exec git add -f -- {} \+

未经测试的想法也许像这样的东西可能在预提交挂钩中?


更新更多自动化的想法:

将此添加到 .git/config

[alias]
ac = "!_() { git add -f -- */*/SOURCES && git commit \"$@\"; }; _"

现在,你可以说

git commit -m 'like you usually work'

它会自动添加*/*/SOURCES

于 2012-10-08T15:11:54.550 回答