针对特定需求的代码存储库-Git能否提供';小型下载';?

针对特定需求的代码存储库-Git能否提供';小型下载';?,git,open-source,cvs,repository,code-sharing,Git,Open Source,Cvs,Repository,Code Sharing,我的代码目前是“开源”的,但不容易访问,因为它不能从存储库中获得。我的想法是通过SourceForge或Github提供它,但我愿意使用任何支持需求的免费站点 项目说明 该项目由许多模块中的代码(org.pscode层次结构下的Java包)和一些依赖项(例如50兆交叉编译插件,5-10兆MP3..)组成。该项目包含许多独立的应用程序,就像为开发人员准备的交叉编译编译器和为最终用户准备的音乐自动点唱机一样。但也有一些单独的类(比如可以容纳大型声音片段的类),它们在其他非项目本身的应用程序中很有用。

我的代码目前是“开源”的,但不容易访问,因为它不能从存储库中获得。我的想法是通过SourceForge或Github提供它,但我愿意使用任何支持需求的免费站点

项目说明 该项目由许多模块中的代码(org.pscode层次结构下的Java包)和一些依赖项(例如50兆交叉编译插件,5-10兆MP3..)组成。该项目包含许多独立的应用程序,就像为开发人员准备的交叉编译编译器和为最终用户准备的音乐自动点唱机一样。但也有一些单独的类(比如可以容纳大型声音片段的类),它们在其他非项目本身的应用程序中很有用。虽然一些软件包实际上是“自包含的”(例如),但其他软件包是跨一系列现有应用程序使用的组件

我机器上的整个项目已经达到200兆

作为一个想要播放长片段的开发人员,我会犹豫是否要下载200多兆字节的项目,仅仅是为了得到一个代码足够短的类来发布

代码库需求
  • 代码存储库/共享系统,允许用户只下载他们需要的部分
  • 如果它由主项目的许多独立部分组成,则会自动下载这些部分
  • 提供一种自动方式来计算(向用户显示)每个“子”项目需要多少下载。好吧,这不是一个“决定或破坏”我选择的要求,但它会非常方便
我一直在关注Git,因为它似乎比旧的CVS形式有很多进步,并且正在阅读&到达了其中的第3点开始

考虑到没有主存储库,很明显存储库必须完整地存在于DVCS中的每个节点上

这让我担心,但我不确定我是否完全理解它,或者Git中是否有其他机制来提供所需的行为

问题: Git能否满足上述要求


另一方面,对于大多数开发人员来说,这是一个“非问题”吗?如果人们通常会下载200兆的project,只为了得到3KB的代码来解析一个逗号分隔的值文件,那么也许我什么都不用担心。

您可以使用git子模块。git存储库中的子模块是对另一个git存储库的引用。通常,克隆git存储库时,必须复制所有内容。但是,子模块是将大型项目拆分为多个独立存储库的一种方法

但是请注意,子模块需要位于单独的子目录中,因此,如果您希望在单独的子模块中包含源代码,则可能需要将它们四处移动,或者更改链接

克隆主项目时,它不会自动下载所有子模块。您需要指定手动拉取所有子模块。但是,可以快速下载所有子模块,以了解更多详细信息:


这在Git中是不可能的。尽管如此,如果您将代码托管在Git存储库(如github)上,用户可以浏览您的文件并下载他们认为必要的文件。见:

Git要求您克隆整个存储库(包括历史记录),并创建一个工作副本,该副本至少镜像版本控制项的一个子集


尽管Git的子模块特性可以帮助解决这个问题,但您必须管理多个存储库并确保它们之间的协调。如果您仍处于开发阶段,这可能会有点混乱,可能需要一些重构。

谢谢。我还查看了一些子模块的文档,但很快就得到了(显然是错误的)印象,认为它们不是我要找的。我会做更多的阅读和报告。(来自链接)“Git从一开始就是作为一个分布式版本控制系统设计的。”我怎么强调“分布式”部分在多大程度上不是必需的。直到今天我才想到这个概念。若有人想要建立一个代码库分支,那个么他们是受欢迎的,但我不在乎这需要他们付出多少努力。这让我更仔细地看待Subversion。谢谢你的链接,不是真的。如果你对历史不感兴趣,你可以直接结帐,这样你就完成了。当然,您也可以签出单个文件。因此,使用git进行分发是可选的,不是必需的。通常情况下,您需要历史记录和分布,因此您可以这样使用git。但你不是被迫的。我相信你必须先做一个克隆,然后才能结账。在这种情况下,您将获得完整的历史记录。