2013-05-17 70 views
0

我可以做到這一點就好了:如何通過重命名對文件進行修訂?

git log --format=%h -- filename | while read f; do git show $f:filename; done 

但是,如果我嘗試添加--followgit log呼叫,通過目錄文件移動和更改名稱,因此該路徑變化git show調用失敗。我嘗試過插入各種東西來抓取完整路徑(fullname=`ls-tree --name-only $f -- filename`等)並將其傳遞到git show,但沒有任何工作,並且我沒有發現谷歌和SO搜索。我覺得我失去了一些明顯的東西,比如git log --format

我也接受獲取文件所有完整路徑名,以及獲取不再存在路徑的完整歷史記錄的方法。然後,我可以分階段採取這種做法,儘管我當然更喜歡一次性做法。

回答

0

我設法拔出我需要這方面的數據:

`git log --follow --format='%h' --name-only -- filename | vim -` 

信息排在像這樣的Vim:

21acc7c 

work/oldname 
dea4a67 

work/filename 
103b0ee 

work/subfolder/filename 
387b384 

work/filename 
741bbc7 

filename 

etc... 

我做:g/filename/norm kkJJ到它們連接成這樣:

21acc7c work/oldname 
dea4a67 work/filename 
103b0ee work/subfolder/filename 
387b384 work/filename 
741bbc7 filename 

這讓我把東西變成我需要的東西,儘管我不得不跳過一些箍來保持東西特德,因爲git只能存儲到第二個,並且rebase傾向於在同一時間創建許多提交。父母保持訂單,但這意味着我必須處理循環中的訂購,而不是基於任何類似git showgit log信息。