2012-01-19 39 views
3

我在project/public/deploy /下有很多大文件。其餘的都是我的源代碼。當我昨天推動,仍然今天尚未完成,並且我的網絡在這方面已經很慢。我理解它,因爲我擁有最大的文件並被推送,這是不可能的。爲什麼git太慢而無法推送大文件?有什麼方法可以優化或忽略它嗎?

我該如何告訴git push永遠不要推動目錄,project/public/deploy /?

project/ 
./application/<all source codes> 
./framework/<all source codes> 
./public/deploy/download/archlinux.fedora.centos.freebsd.isos.tar.gz 
./public/deploy/tutorial/oracle.bigtable.mysql.db2.why.mp4 
./public/deploy/tutorial/c.cpp.java.d.vala.tutorial.episode1.mp4 
./public/deploy/tutorial/c.cpp.java.d.vala.tutorial.episode2.mp4 
./public/deploy/tutorial/c.cpp.java.d.vala.tutorial.episode3.mp4 
./public/deploy/tutorial/hacking.android.linux.mp4 

有沒有辦法把一個PUSH標誌或放一個小gitignore文件中direcotry它可以不顧一切? (在trakking之前和跟蹤之後,何時有一個無視的建議,它會永遠/永遠忽略該目錄,除非我刪除它?)

+1

你是否試過一個'.gitignore'文件,裏面有一個通配符「*」,在一行中? –

+0

@BasileStarynkevitch:它不工作。曾幾何時(第0天),我做了這個$ touch項目/ public/deploy/download/archlinux.fedora.centos.freebsd.isos.tar.gz;很久之前,我做了一個推動,它創建了一個空文件和它的跟蹤。現在,如果我把.gitignore它似乎不工作,因爲它的軌道? – YumYumYum

回答

6

大的二進制文件不應該存在於您的項目中。正如你已經注意到的那樣,Git並不適合那份工作。這些文件應該在項目的.gitignore中被忽略。添加一條線,如public/deploy/tutorial/*.mp4(或者如果你想要更具體的話)。

現在,由於這些文件已存在於您的存儲庫中,因此您需要修改存儲庫的歷史記錄。 Github上有關於這個問題,這可以歸結爲一個tutorial

git filter-branch --index-filter \ 
    'git rm --cached --ignore-unmatch public/deploy/tutorial/*.mp4' \ 
    --prune-empty -- --all 

現在,倉庫已被清理,你可以把它。它應該像平常一樣快地完成。

+0

好點。你可以爲他建議任何解決方案如何共享或同步視頻文件?例如,通過URL可以獲得 –

+0

。 – KingCrunch

0

您可能不希望Git遵循視頻文件。即使它們處於不斷髮展之中,並且每時每刻都會發生變化,您可能只需索引視頻編輯器的項目文件或類似內容即可。

但是,我建議你把你的巨大項目分成更小的項目。例如。我猜application/代碼依賴於framework/代碼,但只要API沒有被破壞,這些文件夾中的更改就是獨立的。那麼爲什麼不把它們放到2個Git項目中呢?

對於大型視頻文件,我建議將它們放在中央文件共享上並進行同步。如果有幾個人每天都在改變,那麼你可能會找到解決方案來共享項目文件。問另一個問題的細節。

我從來沒有使用過,但它可以非常方便:Git支持子項目。這意味着你可以在你的樹中集成另一個Git倉庫,並且Git將獲取它的提交,但是代碼庫和歷史是獨立的,並且沒有那麼大。也許這是從application/framework/連接的正確方法。

相關問題