Git

git 從 repo 歷史記錄中刪除一個大型子目錄,該子目錄在幾次送出前被刪除

  • May 9, 2019

這個儲存庫有一個大文件的大型子目錄,幾個月前我從送出中刪除了這些文件,現在我想永遠從儲存庫中刪除。巨大的子目錄不再在下載中,但對象目錄是巨大的。

簽出/複製需要很長時間,我相信這是因為 .git/objects 目錄很大。

repo
   <files to keep>
       <massive subdirectory>

我想刪除大量的子目錄。

https://stackoverflow.com/questions/10067848/remove-folder-and-its-contents-from-git-githubs-history

上面的連結對我放入此腳本的過程進行了長時間的討論:

   #!/bin/bash

   if [ -z "$1" ]; then
     echo "missing argument: subdirectory to remove"
     exit
   fi

   git filter-branch --tree-filter 'rm -rf $1' --prune-empty HEAD
   git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
   echo $1/ >> .gitignore
   git add .gitignore
   git commit -m 'Removing $1 from git history'
   git gc
   git push origin master --force

我已經執行它而沒有明顯錯誤,然後複製了 repo 以發現 .git/objects 目錄的大小沒有減小。

腳本是否缺少某些內容?我錯過了什麼嗎*?*最新版本的 git 是否針對此要求引入了更直接的功能?

還有另一種方法嗎?

這個答案index-filter在其他人沒有的地方對我有用:

https://stackoverflow.com/a/32886427/4386557

引用自:https://unix.stackexchange.com/questions/517671