2015-04-20 66 views
2

我需要分析整个历史中给定目录中的某些文件到底发生了什么,并且使用像git log the_directory这样的东西不够好。所以我尽管我会创建一个只包含相关文件的分支。git filter-branch困惑

我写了一个perl脚本remove-all-but-stuff并验证它的工作正常。起初,我以为只是删除文件会做,但后来我固定它使用

system qw(git rm -r --ignore-unmatch --quiet), @files 

其中@files包含不必要的目录和文件因为他们在工作树中找到 - 可能这是一个问题?

我创建了一个新的分支,并通过

git filter-branch --tree-filter remove-all-but-stuff my-branch 

,并在年底的文件都没有了过滤,但是,这个发生在最后提交。历史记录包含对不应存在的文件的更改。

我使用git版本2.3.5。任何想法我做错了什么?


现在我甚至加入了一些路径@files没有看看是否存在。有些东西已经改变了(Ref'refs/heads/my-branch'被重写),但不想要的文件(甚至低于添加的路径)仍然在历史中。

+0

我只是在这里离开这里:git gui blame somefile.txt提供了一个GUI呈现文件和所有修改的来源。您可以通过单击与每行相关的提交的散列来浏览文件的历史记录。这是深入了解文件历史的最佳方法(imo)。 –

+0

@FélixCantournet我的问题是一堆文件和其中的许多变化(只有两个重命名)。在命令行中指定它们是一件很痛苦的事情,因为名称和类似犯罪中有空白的文件。过滤之后我得到的好多了。 – maaartinus

回答

0

这很愚蠢,但这是我的错误。 我忽略了一个(隐藏的)错误消息。问题是

error: the following files have changes staged in the index: 

(隐藏在一行的末尾,其后可能有数百个文件)。我猜,我忘了-f修饰符(也忘记了出错)。

实际上,看起来没有理由使用git rm而不是/bin/rm--tree-filter一起使用。


1我认为删除我的问题,但是,它可以救一个人很长一段时间。