簡體   English   中英

在git或git-svn中,如何修改歷史記錄以僅包含當前HEAD上存在的文件?

[英]In git or git-svn, how do I modify history to only contain files which exist on my current HEAD?

五年前, 尼古拉斯(Niklas)提出了一個非常類似的問題 -我將再次嘗試用不同的措詞。

我想將現有的Subversion存儲庫遷移到git,並在與同事共享之前,先擺脫所有不影響當前trunk / master HEAD的歷史記錄(所有其他歷史記錄應保持不變)。

我的想法是首先git svn clone存儲庫(故意不創建分支):

git svn clone http://my/old/svn/repo/trunk new-git-repo

..然后刪除所有文件,不再需要像這樣的魔術了:

for f in $(all_deleted_files) 
do
    git filter-branch --tree-filter 'rm -f ${f}' HEAD
done 

當然,現在最大的問題是:如何獲取all_deleted_files

我可以編寫一個不錯的Python腳本並收集所有提交中的所有文件,並減去HEAD中仍然存在的文件。 但這是唯一可能的方法嗎?

有人以前做過這個,想用他/她的劇本打動我嗎?

使用不同的(特定於Subversion的)方法-是否可以不克隆后來被刪除的文件?

我認為以前沒有人(或很多人)這樣做過,因為對於大多數存儲庫來說,這樣做沒有太大意義。 通常,同一存儲庫中的不同文件形成一個單元,因此忽略以后刪除文件的歷史記錄會破壞大多數存儲庫的整個歷史記錄。 如果重命名了某些文件,則在重命名之前,您還將丟失歷史記錄。

無論如何,如果您確實想執行此操作,則應執行以下操作:

git filter-branch --prune-empty --tag-filter cat --tree-filter 'files="$(git diff master --no-renames --diff-filter ACMRTUXB --name-only)" && if [ -n "$files" ]; then rm -f $files; fi' master

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM