2015-07-03 21 views
-1

我對敏感信息做了一些錯誤的提交到git存儲庫old-project,它包含大量未跟蹤的數據和輸出文件。該回購是從上游存儲庫project克隆的,該存儲庫不包含數據文件。我已使用​​清除了project回購歷史記錄中的不良承諾。現在將未跟蹤的文件移動到新的git存儲庫並保留目錄結構

,我想提出一個新的克隆,new-project,清潔project回購,即

git clone git://example.com/project new-project 

,然後將數據文件從old-project移到new-project和維護他們的目錄結構。

我最初的想法是沿

cd old-project 
git ls-files --others --exclude-standard 

然後mv生成的文件與xargs線的東西,但我想知道是否有這樣做的「正確」的方式。

謝謝。

+0

新克隆的目的是什麼?一個直接的'mv舊項目新項目'是否可以達到這個目的? –

+0

'old-project'有一些糟糕的提交(敏感數據),我從'project'中清除歷史記錄,所以我想刪除'old-project'。 –

+1

克隆到'new-project',刪除'.git'目錄下的所有內容,備份(爲了安全)並刪除'old-project/.git','cp -a old-project new-project',然後'git在'new-project'中重置--hard?或者查看'rsync'(告訴它只複製目標中不存在的文件('new-project')?) –

回答

0

您可以使用git filter-branch來檢查每個提交,並刪除不再需要的文件。如果您有結構化oldstuff/和庫newstuff/可以運行:

git filter-branch --subdirectory-filter newstuff -- --all 

你會留下在標籤和分支重寫,只出現在newstuff/文件將存在一個存儲庫。

如果你想刪除某些文件類型(比如,*.log),那麼你可以做一個類似的命令:

git filter-branch --tree-filter 'rm -f *.log' -- --all 

如果您有登錄後續級別文件,你需要適當地調整例如命​​令與xargs

+0

感謝您的回答。我不確定我是否理解這將如何幫助我將未追蹤的**數據文件從'oldstuff'移動到'newstuff'。你可能會擴大一點嗎? –

+0

有關更多信息,請運行'git help filter-branch'查看手冊頁。如果數據未被跟蹤,那麼它不是Git存儲庫的一部分。 – AlBlue

+0

感謝您的回覆。我想我明白你在這裏做什麼。事實上,我已經清理了上游回購庫(我的問題中的「項目」)中的壞提交。我已經更新了這個問題,使其更加明確。 –

相關問題