【发布时间】:2020-04-18 11:51:01
【问题描述】:
警告 - 不需要配置 git(如果在最近的 git 版本中将所需选项更改为正确的启用/禁用作为默认值,并且只需要为旧版本进行配置,那么应该没问题)。
git 存储库是托管在 Github 上的远程存储库。
使用--branch <branchname> --depth 1 或--branch <branchname> --single-branch 克隆单个分支似乎很容易。
克隆存储库的子目录有点棘手。我发现了几个 StackOverflow 问题,询问如何执行此操作 -
- How do I clone a subdirectory only of a Git repository?
- Cloning only a subdirectory with git
- clone parts of a github project
但唯一不涉及跳槽的答案对我的用例有一些不利之处 -
- https://stackoverflow.com/a/52269934/4647107 - 我认为文件有 成为本地仓库,不能与远程仓库一起使用。
- https://stackoverflow.com/a/37735157/4647107 - 缺点是 虽然它可以让我克隆远程 repo 的子目录,但它让我可以使用 master 而不是我选择的分支。
顺便说一句,我宁愿不必克隆所有历史记录和分支,因为它是一个巨大的存储库,并保留 --depth 1 或 -r HEAD 或不会克隆所有内容的替代命令。但如果不可能,那也没关系。
【问题讨论】:
-
分支是存储库的一个非常不同的“子集”,而不是子目录。 Git 处理提交。分支是提交的连续子集,作为一个单元获取是有意义的。但是,子目录由可能只需要一组“未连接”提交的文件组成,并且这些提交仍然包含有关存储库中所有文件的信息,而不仅仅是您想要的子目录中的文件。
-
@chepner 这让我觉得顺序需要正确——首先选择我们想要的分支,然后选择我们想要的子目录。这是git不允许的吗?
-
基本上,Git 不是为支持 SVN 工作流而构建的。如果您死忠于 SVN 的做事方式,请坚持使用 SVN 并接受其局限性。但是要求一个特定的机制几乎是现在所谓的“xy 问题”的定义标志,你已经有了一些解决问题的解决方案,并且正在寻求帮助实施该解决方案中的一个步骤,而完全不同的方法会只是简单的工作更好。克隆提交的任意子目录到底是为了解决什么问题?