【问题标题】:Binaries in GitGit 中的二进制文件
【发布时间】:2014-03-11 13:14:41
【问题描述】:

我从朋友那里下载了一个 .zip 文件形式的项目。 我将它导入到 Eclipse 中,一切正常,构建顺利。

现在我想把它放到一个远程 GIT 存储库中。

但是,有很多库文件、IDE 生成的文件和杂项。我的工作区中的二进制文件。

我该怎么做?我不想将工作空间中的所有内容都放入 GIT(为了节省空间)。我怎么知道什么应该受到源/修订控制(甚至一些可编辑的文件永远不会被更改)?

我的最终目标是让其他人从 GIT 中签出项目,将其导入他们的 IDE,然后开始工作。如果我不将二进制文件放入 GIT,它们的构建显然会失败。

【问题讨论】:

  • 你的最后一句话是什么意思,关于构建所需的二进制文件?你说的是这些库依赖吗?

标签: git version-control binary open-source


【解决方案1】:

将.gitignore 文件放在存储库的根目录中。在此文件中,您将指出不签入的文件模式。(例如,构建输出或用户特定文件。)

例如,在 Visual Studio 项目中,构建行为会创建 bin 和 obj 文件夹,因此该文件可能只包含以下文本:

bin
obj

通配符也可以使用,所以要忽略 .user 文件,我可能还包括:

bin
obj
*.user

可能有更通用的.gitignore 文件的示例,涵盖了 99% 的情况。例如,我从事的一个 .NET 开源项目是这样的:

# Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
[Bb]in/
[Oo]bj/

# mstest test results
TestResults

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results
[Dd]ebug/
[Rr]elease/
x64/
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.log
*.vspscc
*.vssscc
.builds

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*

# NCrunch
*.ncrunch*
.*crunch*.local.xml

# Installshield output folder 
[Ee]xpress

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish

# Publish Web Output
*.Publish.xml

# NuGet Packages Directory
packages

# Windows Azure Build Output
csx
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
[Bb]in
[Oo]bj
sql
TestResults
[Tt]est[Rr]esult*
*.Cache
ClientBin
[Ss]tyle[Cc]op.*
~$*
*.dbmdl
Generated_Code #added for RIA/Silverlight projects

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML

我想浏览一些流行的 GitHub 存储库会产生其他类似的示例。当然,GitHub 甚至还有 a repository of examples。正如您所看到的,您可以针对很多特定的事物并为您的存储库/项目定制.gitignore 规则。您是正确的,需要包含依赖库,而不需要包含构建输出。只要它们是可单独识别的,你就可以开始了。

例如,可以将依赖库放在名为lib 的文件夹中,然后将其显式添加到 git 存储库中。事实上,一旦添加了一个文件,即使它在 .gitignore 模式规则中,它也不会被忽略。这些规则告诉 git 哪些文件不要添加,但已经添加的文件会继续被跟踪。

【讨论】:

    【解决方案2】:

    如果您还没有意识到,您可能希望充分利用.gitignore 功能(请参阅here)。您需要列出该文件中不应签入或共享的所有内容,很可能对永远不会签入的特定文件夹或文件类型使用通配符。

    就确定要忽略的内容而言,这可能有点棘手,但这是一个开始。如果您可以执行某种make clean 类型的命令,以清除任何不必要的/生成的/编译的文件,这将使您很好地了解最小文件集可能是什么。

    但是,您要忽略的特定文件取决于您使用的语言、编译器、可能的 IDE(如果适用),以及您是否添加了任何文档或数据文件以用于测试目的,但并不意味着共享。

    通常,如果您的代码要与各种编译器一起使用,您可能希望忽略由特定编译器生成/编译的任何内容。使用多个 IDE 也是如此。通常,您会想要忽略所有二进制文件,但如果您想要拥有一组“规范”构建或库依赖项,则可以将它们签入。但是,您可能希望将它们放在特殊目录中,所以如果你愿意,你仍然可以忽略中间版本。

    关于将二进制文件检查到 git repos 中的几个讨论(以及为什么它通常被认为不太好): Managing large binary files with git 和 http://robinwinslow.co.uk/2013/06/11/dont-ever-commit-binary-files-to-git/

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2014-06-08
      • 2022-01-06
      • 2012-07-06
      • 2011-04-05
      • 1970-01-01
      • 2015-12-14
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多