如何让gitignore跟踪文件的子目录实例而忽略其他所有内容?

时间:2012-10-08 15:04:44

标签: git gitignore

  

可能重复:
  Git - Whitelisting files in a complex directory structure

我希望git存储库只跟踪名为eg的文件SOURCES而其他一切都将被忽略(例如,每个SOURCES文件列出其起源的pdf文件树)。最简单的镜头就是

*
!SOURCES
.gitignore中的

。但是排除在例如A/SOURCES覆盖了*,要求我使用git add -f。如何修改.gitignore以忽略除名为SOURCES的文件之外的所有内容而不需要强制添加?

编辑由于目录结构未修复,因此发布here的解决方案将无法执行,即不应将包含SOURCES文件的新目录添加到{{ 1}}手工......

1 个答案:

答案 0 :(得分: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