2014-02-27 103 views
2

過去幾年來我一直在使用Git和GitHub,這一切都很好,事實上,我打算將它用於其他事情,主要是基於媒體的項目。對於「其他東西」使用Git

在以前的生活中,我是一名音響工程師,在運行錄音時可以看到使用分支策略的巨大優勢。工程師可以創建一個新的功能分支「功能/ Recording_BVs」,並在記錄後直接添加和提交Protools會話(音頻錄製軟件平臺)。這也將有助於解決音樂行業如何備份,共享和協作項目的老問題。

我想知道是否有其他人以這種方式使用Git(即不是純粹作爲基於代碼的回購)。例如photoshop會話,視頻會話等。或者另一方面,如果任何人都可以這樣說服我,那麼有什麼缺點嗎?

+0

這不是你建議的其他東西的類型,但我知道有些人正在使用Git來管理他們的配置文件。 – hvd

+1

[Binaries版本控制]的可能重複(http://stackoverflow.com/questions/104453/version-control-for-binaries)。 – raina77ow

+0

我不喜歡將二進制文件放入git存儲庫中,即使它工作正常。我喜歡做的是將二進制文件存儲在其他地方的任意名稱,可能只是一個序列號。然後在git倉庫中存儲一個* index *文件,只是一個文本文件,說明每個二進制文件哪個磁盤文件包含該文件的相關版本。這可能不是更好,但我覺得更不會在二進制文件存儲在git ... – jcoder

回答

2

我建議不要這樣做,原因之一。版本控制媒體文件與版本控制文本文件不同。

當你更新文本文件上的一行時,git commit會記錄一行從Hello world更改爲Goodbye

當你更新二進制文件的單個字節時,git commit會保留整個文件的記錄。在兩個二進制文件上執行diff毫無意義 - 如果您想合併分支,rebase分支,不管怎樣,git都不知道如何合併兩個二進制文件!沒有安全的方法來做到這一點。

這意味着,隨着時間的推移,你的git回購將會增長併成爲巨大的。 這就是爲什麼它也建議設置git忽略程序集(例如,.dll,.jar等)

+1

不,git會一直記錄一個新的blob對象,其中包含整個文件的新內容。稍後轉移到其他倉庫時,它可能會成爲差異存儲包。 – SzG

+0

@SzG「git將始終記錄一個新的blob對象」 - 這就是我所說的。 – dcastro

+1

Blob對象始終是整個文件的內容。 – SzG

0

我使用git作爲Redmine的備份解決方案。 如果mysql轉儲更改或有新文件,它們將進入git倉庫,這樣我就可以恢復過去任何一天的狀態。另外,這個腳本還能夠從git倉庫恢復Redmine。因此,將Redmine從一臺機器遷移到新機器非常容易。

而且我的個人配置文件當然是:.bashrc.vim*

0

還可以使用Git爲你想跟蹤變化的任何文件。這包括源代碼,但也包括任何文本文件(程序,會話,遊戲的配置文件)。

我知道有人使用minecraft視頻並使用git來保存他的Minecraft聚會(git add . && git commit -m "some interesting point")而不是「cp dir -r dir.old」。

1

git 可以這樣做。但內部git將文件內容存儲爲它們之間的增量(差異)。多媒體文件是壓縮的,因此「內容」(未壓縮)中的幾個字節發生了變化,壓縮文件發生了巨大變化,而git無法很好地處理這些內容。另外,對於文本,很容易看到如何向用戶顯示有意義的改變(熟悉的diff(1)格式,告訴你添加/刪除的行),對於一個聲音文件,比方說不清楚如何做到這一點。因此,對各種文本(合併,修補,撤消修補程序,差異)都很自然的操作很難做到。幸運的是,源代碼更改(給定體面縮進的源代碼,邏輯上組織的行,以及編程類中敲入的所有內容)完全映射到行更改。如果只採用重排文本,添加單詞的更改會改變整個段落,並可能會溢出到文檔的其餘部分。

作爲一個恰當的例子,在這裏一家公司需要存儲軟件設計(使用XML或類似軟件編寫),並嘗試對其應用版本控制。這種失敗原因大致相同:語義更改(「將此模塊移到那裏」)沒有完全映射到面向行的更改。即使是大規模的線條變化(比如說移動一個<tag> ... </tag>結構)也可能具有沒有的語義含義。他們最終創建了自己的差異工具來捕捉有意義的變化。