git只对文本文件/源代码有用吗?

时间:2014-12-03 09:51:23

标签: git synchronization

非常的菜鸟问题。

在我的整个项目中使用git也是好的(作为不同存储之间的同步,版本控制不是主要的一点),包括图像,pdf,Word文档,甚至可能是一些exe文件?

如何跟踪pdf,图像,exe文件的变化(如果有的话)?如果它只是因为与HEAD版本存在一些差异而存储整个更改的文件,那么在几次提交之后存储库就会变得非常大。或者它是否仍然只能保存文本文件以外的文件中的增量更改?

底线:大型项目的同步是好的(或至少是可接受的)?对我而言,如果它不比Dropbox等差,那就足够了(就最终结果而言,GUI不是问题)。

4 个答案:

答案 0 :(得分:5)

Git可以看到您更改了非文本文件,但在这种情况下您将无法获得最好的git。使用文本文件,您可以看到不同版本/提交之间的实际差异。

话虽如此,你可以尝试这个solution for image diffs in git。我确信应该有软件来显示您可能需要的其他文件类型之间的差异,这样可以检查差异。

与dropbox相比,git应该更好,因为您可以使用提交消息来说明在特定更改中执行的操作,并且您可以创建功能分支;但由于它的目的,它有点复杂,即跟踪版本之间的源代码差异。

EDIT:

和NO,̶GIT不保存的递增量,非文本文件,̶但同样没有收存箱,̶据我̶k̶n̶o̶w̶.̶

看起来git将非文本文件存储为字符串,所以是的,它应该只跟踪差异。因此,任何好的difftool meldBeyond Compare都应该能够分辨两个图像之间的差异。例如,我能够看到两个png图片与Beyond Compare之间的差异。

它似乎也可以很好地处理PDF文件,但是,与exe文件一样,您不应该使用版本控制来跟踪这些文件类型。而不是PDF,跟踪他们的源代码 - 例如LaTeX文件(纯文本)。由于它们的性质,编译文件(如exe文件)不适合版本控制。这样做的原因是,即使您直接编辑文件的字符串,也无法实现太多 - 您应该编辑源代码。

答案 1 :(得分:3)

Git可用于大型项目,但您不应该检查生成的文件(如pdf,exe等)。添加一个.gitignore文件(google了解详细信息),其中包含git应忽略的文件。

如果你想包含二进制文件但不生成的Word文件(或类似文件),有可能告诉git如何“区分”这些文件。这意味着你告诉git它如何比较两个word文件并决定如何合并两个不同的word文件。再次,谷歌将是你的油炸,找出如何做到这一点的细节。

答案 2 :(得分:3)

如果您对文件进行了更改,则git不会仅存储更改(差异)。相反,它再次存储整个文件。例如:如果您更改了2MB文件的单行。 git将使用新的更改再次存储整个文件。 (然后存储库的大小将为4MB)

答案 3 :(得分:3)

二进制文件可以分为以下类别之一:

  1. 可以通过源代码复制的二进制文件。存储和跟踪它们没有意义。您通常不编辑.exe文件来进行更改。只需确保存储所有需要重新构建的构建脚本,并将二进制文件添加到.gitignore。

  2. 可以编辑和比较的二进制文件。例如,办公室文件。有一些解决方法,例如将它们转换为如here所示的文本。一些GIT IDE可能允许外部工具进行差异化。

  3. 可以编辑但很难比较的二进制文件。你会如何表现两个视频的差异?可能但很难。根据大小,我会将文件添加到GIT。您总是可以获得GIT的大部分好处,例如跟踪不同版本,知道何时更改了一个文件等等。您支付的价格是更大的存储库大小。比较将需要人眼睁开文件..

  4. 通常不会编辑并用作输入的二进制文件。例如,一个.jar文件作为依赖项。在这种情况下,您需要此二进制对象的元数据以及如何获取它。您可以尝试像Maven这样的系统,您可以在其中跟踪存储pom.xml的依赖项,并将二进制文件添加到gitignore。其他文件可以通过手动Dependecies.txt文件进行跟踪(此版本需要My.Lib1.jar版本10.32.3 ...)。每次更改都需要遵守规则来更新文件。它将帮助您了解每个版本中二进制文件的更改位置。