git从存储库中检索单个文件

git从存储库中检索单个文件,git,github,gitlab,Git,Github,Gitlab,从存储库中检索单个文件 我有10个目录/somefiles和pom.xml的存储库,还有一个名为pom.xml的文件在目录之外。所以我需要从那个包含历史记录的repo中检索一个pom.xml。这里的一个问题是pom.xml位于所有10个目录中。当我尝试使用git filter branch-f-prune empty-index filter“git rm-cached-ignore unmatch$git ls files | grep-v pom.xml”检索时,此命令检索所有pom.xml

从存储库中检索单个文件


我有10个目录/somefiles和pom.xml的存储库,还有一个名为pom.xml的文件在目录之外。所以我需要从那个包含历史记录的repo中检索一个pom.xml。这里的一个问题是pom.xml位于所有10个目录中。当我尝试使用git filter branch-f-prune empty-index filter“git rm-cached-ignore unmatch$git ls files | grep-v pom.xml”检索时,此命令检索所有pom.xml,包括目录中的pom.xml。您能否帮助我仅检索除目录中的pom.xml之外的pom.xml

git branch just-pom
git filter-branch --index-filter '
                git read-tree --empty; git reset $GIT_COMMIT path/to/pom.xml
        ' -- just-pom --full-history -- path/to/pom.xml

这将保留有关该文件历史的所有信息。最后一行中-之后的所有内容都是args to git rev list,您可以在这里选择要构建的历史记录的提交提要。

听起来像是一个奇怪的用例。为什么您不能获取整个存储库?我可以获取整个存储库。但我只需要一个位于目录外的pom.xml。问题是,在所有这些目录中,我还有其他10个目录pom.xml和其他文件。如果您可以获取整个存储库,而您只需要一个文件,通常正确的步骤是获取整个存储库,然后仅使用其中的适当文件。这与pom尤其相关,因为pom的依赖关系可能非常复杂:仅仅因为你认为你现在只需要一个pom,并不意味着有一天你会需要全部十个pom。好吧,正如你所说,我得到了整个存储库。到现在为止,我想得到一个pom,它不在目录中。我需要一个目录之外的pom。因此,如果有任何可能,请告诉我。git filter branch-f-prune empty-index filter'git rm-cached-ignore unmatch$git ls files | grep-v pom.xml“。我尝试了这种方法。它也可以获取目录中的所有pom.xml。太棒了。谢谢你的命令,效果很好。awesomeI对您给出的just-pom的上述命令有一个小问题。这里我们为什么需要给出-just-pom in'-just-pom-full history-path/to/pom.xml'这是一个分支名@jthillh,它限制了过滤器分支将重写的内容。