【问题标题】:clone parts of a github project [duplicate]克隆github项目的一部分[重复]
【发布时间】:2010-12-09 17:38:55
【问题描述】:

可能重复:
Is there any way to clone a git repository’s sub-directory only?

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

【问题讨论】:

  • 你只有 .git 目录似乎很奇怪。您是否正确克隆了存储库?
  • 我想你误会了,我得到了所有文件,但我只想要项目的一个子文件夹。

标签: git github tortoisegit


【解决方案1】:

有子树合并。

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

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

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

【讨论】:

  • 听起来很复杂,为什么有人会使用 git 而不是 svn 或 cvs?
  • 在 GitHub 的上下文中,我想说 Git 让与他人合作变得更容易,无论是作为专门的团队还是偶尔的贡献者。
【解决方案2】:

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

除了jhs's answers(子树合并;rm、mv、commit、merge)之外,还有a third-party ‘subtree’ command 可能有助于更轻松地处理部分签出。虽然这不是它的主要目标,但你如何使用它来处理部分结账并不明显。如果你已经足够了解 Git,你可以解决它,但如果你是 Git 新手,这个子树命令可能会相当不透明。

最后,如果你只想下载最新的文件,你可以use git archive to download a tar file of a specific branch or tag (or any commit-ish)。这可能不适用于 GitHub(这取决于服务器配置),我没有检查过。即使它不能直接工作,您也可以克隆到自己的“裸”镜像仓库,然后从中提取(子树)档案。

【讨论】:

  • 这可能是从 09 年 10 月开始添加的,但要从 GitHub 获取存档,实际上在任何 repo/fork/branch/commit 的右上角都有一个 Download 按钮让您从该历史点提取代码的存档副本(例如,如果您先导航到那里,则更早的提交)
【解决方案3】:

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

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

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

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

【讨论】:

  • 我不明白为什么它不应该是 git 提供的东西。请求“在提交 6789abc 时给我所有匹配 /foo/bar/.* 的文件”,定义明确且有用。
猜你喜欢
  • 2016-11-30
  • 2013-07-12
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 2019-04-30
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多