2014-12-03 102 views
5

一個很小的問題。git只適用於文本文件/源代碼嗎?

是不是也很好用的git我的整個項目(如種不同的存儲之間的同步,版本控制不是主要點),包括圖片,PDF,Word文檔,甚至可能是一些exe文件,文件?

它如何跟蹤pdf,圖像,exe文件的變化?如果它僅僅因爲與HEAD版本有所不同而存儲了整個更改的文件,那麼存儲庫可能會在很少的提交後變得很大。或者它是否仍然只能保存除文本文件以外的其他文件中的增量更改?

底線:git是否適合大項目的同步(或至少可以接受)?對我來說,如果它不比Dropbox差等,就足夠了(就最終結果而言,GUI不是問題)。

回答

4

Git可以看到你改變了你的非文本文件,但是在這種情況下你將無法獲得最好的git。使用文本文件,您可以看到不同版本/提交之間的實際差異。

這就是說,你可以試試這個solution for image diffs in git。我確信應該有一些軟件來顯示其他文件類型之間的差異,您可能需要這些差異來檢查差異。

與dropbox相比,git應該更好,因爲您可以使用提交消息來說明在特定更改中完成了哪些操作,並且您可以創建功能分支;但由於其目的,它會更復雜一點,即跟蹤版本之間的源代碼差異。

EDIT:

和NO,̶GIT不保存的遞增量,非文本文件,̶但同樣沒有收存箱,̶據我̶k̶n̶o̶w̶.̶

它看起來像git被存儲非作爲字符串的文本文件,所以是的,它應該只跟蹤差異。因此,任何好的difftoolmeldBeyond Compare應該能夠告訴兩個圖像之間的差異,例如。例如,我可以看到兩個png圖像與Beyond Compare之間的差異。

它似乎也很好地處理PDF文件,但像exe文件一樣,您不應使用版本控制來跟蹤這些文件類型。請記住它們的源代碼 - 例如LaTeX文件(它們是純文本),而不是PDF。由於其性質,編譯的文件,如exe文件不適合版本控制。原因是,即使您直接編輯到文件的字符串中,您也無法完成很多工作 - 您應該編輯源代碼。

2

Git可以用於大型項目,但不應該檢查生成的文件(如PDF,EXE等)。添加一個.gitignore文件(谷歌的詳細信息),其中寫入git應該忽略哪些文件。

如果你想包含二進制文件但沒有生成的Word文件(或類似文件),有可能告訴git如何「區分」這些文件。這意味着你告訴git如何比較兩個單詞文件並決定如何合併兩個不同的單詞文件。再次,谷歌將你的油炸發現如何做到這一點的細節。

1

如果您在文件中做了更改,那麼git不會僅存儲更改(差異)。相反,它會再次存儲整個文件。例如:如果您更改了2MB文件的單行。 git會用新的更改再次存儲整個文件。 (然後版本庫的大小將爲4MB)

2

二進制文件可以進入該類別之一:可以通過源代碼進行復制

  1. 二進制文件。存儲和跟蹤它們沒有意義。您通常不編輯.exe文件以進行更改。確保存儲所有需要重建構建的構建腳本並將二進制文件添加到.gitignore。

  2. 可以編輯和比較的二進制文件。例如,辦公文件。有一些解決方法將它們轉換爲文本,如所示here。一些GIT IDE可能允許外部工具製作差異。

  3. 可編輯但難以比較的二進制文件。你會如何表現兩個視頻的差異?可能但很難。根據大小我將文件添加到GIT。您始終可以獲得GIT的大部分好處,例如跟蹤不同版本,瞭解某個文件何時發生更改等。您支付的價格是更大的存儲庫大小。比較將需要人類無論如何打開文件..

  4. 二進制文件,通常不會被編輯和用作輸入。例如,A .jar文件作爲依賴項。在這種情況下,您需要這個二進制對象的元數據以及如何獲取它。您可以嘗試像Maven這樣的系統,在其中跟蹤存儲pom.xml的依賴項,並將二進制文件添加到gitignore。其他文件可以通過手動Dependecies.txt文件進行跟蹤(此版本需要My.Lib1.jar版本10.32.3 ...)。每次更改都需要更新文件。它將幫助您瞭解每個版本中二進制文件更改的位置。

相關問題