25

可能重复:
有没有办法只克隆 git 存储库的子目录?

我正在尝试克隆 github 项目的一部分,但我只能获取根文件夹。这是我第一次尝试使用 github,我刚刚安装了 tortoisegit,我习惯于使用 svn 和 cvs,在那里你可以只取一个你想要结帐的文件夹,但似乎 git 在根文件夹中只有一个 .git 文件所以我不知道该怎么办。

4

3 回答 3

8

有子树合并。

但这是一个更简单但部分解决方案,可能足以满足您的需求。只需fork 并定期合并回来

  1. 分叉(克隆)存储库
  2. 删除您不需要的部分并将子文件夹移动到您确实需要的位置
  3. 犯罪

将来,当您想与上游 Git 代码同步备份时,只需将其与您的 fork 合并即可。您保留的文件将与来自上游的文件同步备份,您可能需要进行一些小的清理工作,这些清理工作很容易从git status.

于 2009-10-24T13:52:42.657 回答
7

在 Git 社区中,您想要的称为“部分结账”。Git 目前不支持它,但它每隔一段时间就会出现在邮件列表中。Git 具有支持部分结帐所需的一些内部结构,但作为用户使用它们并不容易。我猜 Git 最终将能够进行部分签出,但它可能需要一段时间才能发生。

除了jhs 的答案(子树合并;rm、mv、提交、合并)之外,还有一个第三方“子树”命令可能有助于更轻松地处理部分签出。虽然这不是它的主要目标,但你如何使用它来处理部分结账并不明显。如果你已经足够了解 Git,你可以解决它,但如果你是 Git 新手,这个子树命令可能会相当不透明。

最后,如果您只想下载最新的文件,您可以使用git archive下载特定分支或标签(或任何 commit-ish)的 tar 文件。这可能不适用于 GitHub(这取决于服务器配置),我没有检查过。即使它不能直接工作,您也可以克隆到您自己的“裸机”镜像仓库,然后从中提取(子树)档案。

于 2009-10-27T09:11:57.753 回答
-1

这并不是你在 git 中所做的事情。请记住,您使用的是 DVCS,因此您正在拉下整个存储库历史 - 更改您拉下目录之外的文件的提交应该发生什么?

如果一个项目足够大,那么您正在克隆的任何 repo 的维护者都应该使用子模块来划分部分,以便开发人员只能拉下他们想要处理的区域。

Git(好吧,一般来说是 DVCS)不是为最终用户设计的,而是为开发人员设计的。我发现 git(尤其是与 github 结合使用)对编码非常有帮助。如果 github 上有一个我想贡献的项目,我只需 fork 它,将其拉下,hackhackhack,push up,然后发送拉取请求,easypeasy,而不是进行结帐,破解,创建差异,试图找到将它通过电子邮件发送到哪里,并希望在开发人员开始合并之前差异不会中断。

Git作为一个整体肯定比svn复杂,但那是因为编码是一个复杂的过程。集中式 VCS 工作流程对我来说非常痛苦,因为我是在 DVCS 上长大的,而且我不能做我习惯做的各种事情。所以,是的,如果你做同样的事情,使用 git 和 svn 会更复杂,但优点是你可以 的事情更多Git 是为 linux 内核开发而开发的,它显示了。

于 2009-11-03T19:58:24.093 回答