当子回购忽略一切时,如何不忽略父回购中的所有内容?

时间:2014-05-15 03:53:42

标签: git gitignore

我有一个repo,它忽略除了几个文件之外的所有内容,.gitignore看起来像这样:

# first ignore everything
*

# then whitelist what's needed
!*/
!.gitignore
!wordpress/wp-content/plugins/check-last-login/*
!wordpress/wp-content/plugins/wp-issuetracker/*
!mediawiki/extensions/single-signon/*

此存储库是子存储库。它位于另一个存储库中,即父级。子存储库忽略了除了少数几件事之外的所有事情,但父母也做了同样的事情,但我不想这样做。

似乎父repo遵循子repo的.gitignore文件的忽略规则。我试过.gitignoring子仓库的.gitignore文件,但这不能使父母跟踪所有文件。

如何让父母不忽略孩子忽略的任何文件?

1 个答案:

答案 0 :(得分:0)

好的,我可以通过在已经跟踪内容的目录中执行git init并且冒险测试全部工作,使git以明显的方式执行此操作。我当然不期待那样。 git显然跟随现有树(repo对象)进入子模块:

   # in a throwaway clone of an existing project
   git init src
   cd src
   mkdir -p .git/info
   echo "*.junk" >.git/info/exclude
   touch foo.junk; git add .; git commit -m-
   git ls-files -s
   cd ..
   git add src
   git ls-files -s src

我有平行的历史。这实际上至少有些意义;它通常不关心那些没有被跟踪的文件,git add必须忽略根树中的.git。具体原因应该git拒绝这样做?我无法想到一个人。

我有点担心有人可能会相当随意地决定这种行为是一个错误并让git在开始的时候开始检查.git,但是考虑一下我认为硬编码被忽略了 - .git - 甚至在根中甚至只在根中甚至可能是有意的。如果您开始与其他repos开始协作而不仅仅是发布,它可能会让您进行一些手动同步,但是编写脚本乍一看似乎很简单,而且您显然已经某些价值超出设置。 <耸肩>

正如您所发现的,回复本地排除了进入.git/info/exclude