2015-04-20 108 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我認爲刪除我的問題,但是,它可以救一個人很長一段時間。