亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從git / GitHub的歷史記錄中刪除文件夾及其內容

從git / GitHub的歷史記錄中刪除文件夾及其內容

Git
狐的傳說 2019-10-04 14:22:09
我在GitHub帳戶上的存儲庫上工作,這是我偶然發現的一個問題。帶有安裝了幾個npm軟件包的文件夾的Node.js項目包在node_modules文件夾中將該文件夾添加到git存儲庫中,并將代碼推送到github(當時不考慮npm部分)意識到您并不需要該文件夾作為代碼的一部分刪除該文件夾,將其推送在那種情況下,總git repo的大小約為6MB,而實際代碼(除該文件夾以外的所有代碼)僅為300 KB左右?,F在我最后要尋找的是一種從git的歷史記錄中刪除該軟件包文件夾的詳細信息的方法,因此,如果有人對其進行了克隆,則不必下載價值6mb的歷史記錄,而只有這些文件才可以獲取截至上一次提交將為300KB。我為此找到了可能的解決方案,并嘗試了這兩種方法從git存儲庫中刪除文件(歷史記錄)http://help.github.com/remove-sensitive-data/https://gist.github.com/1588371Gist似乎在運行腳本后在哪里工作,它表明它刪除了該文件夾,并表明修改了50個不同的提交。但這并沒有讓我推送該代碼。當我嘗試推動它時,它說Branch up to date但顯示對50個提交進行了修改git status。其他2種方法也無濟于事?,F在,即使顯示它擺脫了該文件夾的歷史記錄,當我在本地主機上檢查該存儲庫的大小時,它仍約為6MB。(我也刪除了該refs/original文件夾,但沒有看到存儲庫大小的變化)。我要澄清的是,是否有一種方法不僅可以消除提交歷史記錄(這是我認為唯一發生的事情),而且可以擺脫那些git一直假設要回滾的文件??梢哉f為此提供了一個解決方案,該解決方案已在我的本地主機上應用,但無法復制到該GitHub存儲庫,是否可以克隆該存儲庫,回滾到第一個提交執行該技巧并將其推送(或者這意味著git將還有所有這些提交的歷史嗎?-又名6MB)。我的最終目標是從根本上找到擺脫git中文件夾內容的最佳方法,以便用戶不必下載6MB的內容,而仍然可以擁有從未觸及modules文件夾的其他提交(這很漂亮很多))在git的歷史中。我怎樣才能做到這一點?
查看完整描述

3 回答

?
青春有我

TA貢獻1784條經驗 獲得超8個贊

我發現--tree-filter其他答案中使用的選項可能非常慢,尤其是在具有大量提交的大型存儲庫中。


這是我使用--index-filter選項可以從git歷史記錄中完全刪除目錄的方法,該方法運行起來要快得多:


# Make a fresh clone of YOUR_REPO

git clone YOUR_REPO

cd YOUR_REPO


# Create tracking branches of all branches

for remote in `git branch -r | grep -v /HEAD`; do git checkout --track $remote ; done


# Remove DIRECTORY_NAME from all commits, then remove the refs to the old commits

# (repeat these two commands for as many directories that you want to remove)

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch DIRECTORY_NAME/' --prune-empty --tag-name-filter cat -- --all

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d


# Ensure all old refs are fully removed

rm -Rf .git/logs .git/refs/original


# Perform a garbage collection to remove commits with no refs

git gc --prune=all --aggressive


# Force push all branches to overwrite their history

# (use with caution!)

git push origin --all --force

git push origin --tags --force

您可以使用以下命令檢查存儲庫的大小gc:


git count-objects -vH


查看完整回答
反對 回復 2019-10-04
  • 3 回答
  • 0 關注
  • 1069 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號