2016-01-19 140 views
1

我正在將一個SVN回購站遷移到Git,並且我有7000多個二進制文件,我想排除從一開始就導入併成爲Git歷史記錄的一部分,而不是清理它們之後(參考question)。這些文件的位置並不遵循一個非常規的模式,所以我不得不提供一個長長的git位置列表,並且我有〜8000個提交要考慮的事項。從git中排除文件svn克隆

如果我的目標是避免使用不必要的文件造成回購,那麼最佳方法是什麼?

有沒有一種方法,我可以從一開始就排除這些,也許作爲git svn clone的標誌?在克隆之前將它們添加到.gitignore會阻止它們被添加?

另一種選擇是導入全部文件,然後用git filter-branch重寫整個歷史記錄,以便在與其他人共享回購之前刪除所有這些文件。

+0

這是什麼結構?二進制文件是全部在單獨的目錄中,還是都遵循一定的模式和他們的名字? – Seb

+0

@它們中的很多都屬於一個目錄,但其餘的都在不遵循模式的地方,所以我不能只是'git rm ./**/*。jpg' – blackbird

回答

1

根據你的問題和意見,我不認爲有一種方法可以簡單地克隆沒有你不想要的某些文件。

我相信只要將文件放入gitingore文件中,對於您對回購的git克隆沒有任何影響。

然而,在服務器上你可以創建一個過濾分支,沒有這些文件,你可以從拉動,作爲this問題的答案的一個建議提出了自己類似的問題:

在服務器上:

git checkout master^0 # the ^0 checks out the commit itself, not the branch 
git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD 
git checkout -b filtered 

然後(在一個大項目過濾分支在約2-3每秒提交這裏產生新的歷史記錄),您想要的位置, git的初始化 git的遠程添加給我你的://回購/路徑 混帳取給我過濾

隨着documentation說,濾波器分支命令可用於以下,這似乎有用很好地包括你在:

那些過濾器可以修改每個樹(例如刪除文件或在所有文件上運行perl重寫)或關於每個提交的信息。否則,將保留所有信息(包括原始提交時間或合併信息)。


編輯:這具有額外的獎金,如果你想從這個回購在未來更多的地方拉,那麼它的簡單得多,因爲它是你申請到原來的一次性修復回購,而不是爲每個單獨的克隆完成。

+0

我開始認爲過濾器分支是要走的路,問題是需要永遠的,現在已經運行了45分鐘+並且它甚至沒有通過提交的一半 – blackbird

+1

從正面來看,它將是一次性成本,一旦完成,您應該能夠在正常克隆所需的相同時間內從該分支中​​獲取所有內容。 – Seb