2014-01-09 108 views
2

我一直在使用github作爲一個項目一段時間,但僅作爲問題跟蹤器。所以,今晚我花了一些時間用代碼來解決問題,並且犯了一個菜鳥的錯誤:我提交了證書文件和其他不必要的數據。我已經將這些文件添加到了.gitignore文件中,並且它們不再是問題,但是我看到它們在歷史記錄中可用。從github上刪除文件

這提出了一個安全問題,所以我必須對此進行分類並刪除那些敏感數據。我是目前唯一的開發人員,所以這就是爲什麼我只將代碼保存在我的電腦上並在實際的服務器上,但也希望得到一個這樣的代碼。

到目前爲止,我已經嘗試過this article,this one as well,並發現了一些關於SO的問題,但一直未能弄清楚。我主要得到這樣的錯誤:fatal: ambiguous argument 'rm': unknown revision or path not in the working tree.

我會刪除整個回購,但我有相當多的問題跟蹤數據那裏,所以我需要保持這一點,所以這不是一個選項。我不介意其他提交,我可以用本地機器上的代碼從頭開始,但需要某種方式來丟失較早的提交及其完整歷史記錄,或更改這些文件(.gitignore中的某些內容是目錄,因此可能是非常繁瑣的刪除)。

我試過git rebase -i,但在那裏我只看到我最後三次提交(測試),沒有被推送,其餘的在線,其中有10個沒有顯示在那裏。

我使用的回購是私人回購,與我和一個客戶端只能訪問,所以沒有第三方見過這個。

我是新來的git,所以謝謝你的時間和幫助!

+0

你可以創建一個新的回購,複製/粘貼你想要的文件,然後刪除舊的回購? – Hosch250

+0

這會讓我失去所有問題跟蹤歷史記錄,並且有很多討論,所以我需要保持這一點。 –

回答

7

首先,這是重要的一點:考慮您的憑據受到損害。改變它們。無論你現在做什麼,他們都不再安全。

現在yo've做到這一點,你有兩個選擇:

  • 如果你真的只是想從頭開始,覆蓋什麼用git push --force新提交的存在。這可能是你最簡單的前進方向。

    git init <new-directory> 
    $EDITOR README.md 
    git add README.md 
    git commit 
    git remote add origin https://github.com/user/repo.git 
    git push --force origin master 
    
  • 或者,你可以用filter-branch從歷史記錄中刪除的憑據,在GitHub help page on removing sensitive data所概述。

    您的ambiguous argument 'rm'錯誤很可能會導致正確引用該命令。請務必引用它在文章中顯示的內容。

+0

謝謝,這就是我所做的。我瞭解安全風險,但由於這是私人回購,我應該是安全的,對吧? :) –

+1

當然,這取決於你。但我仍然建議改變它們。考慮到做這件事的「痛苦」,與某種違規行爲的痛苦相比。 – Chris

+1

當然,我只是爲了防止在週末這樣做,爲所有領域獲得一組新的證書,以啓動這個新的一年乾淨:) –

2

恕我直言,BFG(這是鏈接到GitHub的幫助頁面上已經提到)是我們的最佳(最容易使用和最快的)工具。這非常簡單,就像examples所示。使用BFG重寫本地歷史記錄後,強制將其推送到服務器,然後進行設置。

+0

謝謝,但我真的不希望Java在我的電腦了:)我也設法用filter-branch做到這一點,但最終決定擦拭一切並開始清理,因爲沒有歷史是非常重要的,15次左右的提交只是我玩github。 –

0

即使你有它一段時間可用它足以成爲一個安全線程。處理真正的問題:您泄露了證書,您必須先更改證書。之後,github上的文件根本就沒有任何價值,你可以在歷史上留下它。爲了更清楚地說明爲什麼你甚至不應該打擾從git​​hub中移除它,假設它被搜索引擎緩存,所以任何人都可以從github中移除後即可獲得該文件。

1

我得到了同樣的含糊說法的錯誤太多,當我試圖運行這個命令:

git filter-branch --force --index-filter \ 
    'git rm --cached --ignore-unmatch path\to\my\file.txt' \ 
    --prune-empty --tag-name-filter cat -- --all 

我能夠通過改變單引號以雙引號來運行它,反斜槓反斜槓。

git filter-branch --force --index-filter \ 
    "git rm --cached --ignore-unmatch path/to/my/file.txt" \ 
    --prune-empty --tag-name-filter cat -- --all 
+0

是的,這對於這個錯誤是有幫助的,但我通過不同的方式解決了它,正如我接受的答案中所建議的那樣。謝謝 –