将 Git 子模块设置为浅克隆 &结账稀疏?

发布于 2024-11-13 22:00:07 字数 434 浏览 3 评论 0原文

许多供应商 Objective-C 库(例如,facebook-ios-sdk)指示您将其存储库文件/目录的某个子集复制到您的 Xcode 项目中。这样做的一个问题是您不知道您拥有的供应商代码的版本。另一个问题是,如果您对供应商代码进行更改,则通过 Git 贡献更改并不容易。

作为解决方案,我想将每个供应商库添加为项目存储库的 Git 子模块,并进行一些额外的设置(例如,在 .gitmodules 文件中)。这样,如果另一个人克隆我的项目并执行 git submodule update --init,他们的存储库和代码将被复制。子模块将具有与我相同的状态,因为它们将使用我设置的相同默认设置:

  1. 稀疏签出:仅签出子模块的某些文件。
  2. 浅克隆:仅克隆子模块的某个SHA1。

如何为 Git 子模块设置上述设置?

Many vendor Objective-C libraries (e.g., facebook-ios-sdk) instruct you to copy a certain subset of its repo's files/dirs into your Xcode project. One problem with this is then you do not know what revision of the vendor code you have. Another is that if you make changes to the vendor code, it's not easy to contribute your changes via Git.

As a solution, I want to add each vendor library as a Git submodule of my project's repo with some extra settings (say, in the .gitmodules file). This way, if another person clones my project and does git submodule update --init, their repo & submodules will have the same state as mine because they'll be using the same default settings I set:

  1. Sparse checkout: Only check out certain files of the submodule.
  2. Shallow clone: Only clone a certain SHA1 of the submodule.

How do I set the above settings for a Git submodule?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

并安 2024-11-20 22:00:07

使用 git1.8.4(2013 年 7 月)另外 git 子模块浅层更新 (git submodule update --depth 1),您现在可以进行自定义更新

除了选择“rebase、merge 或 checkout-detach”之外,“submodule update”还可以允许使用自定义命令通过“submodule.*”来更新子模块的工作树。更新”配置变量。

请参阅提交6cb5728c43f34a7348e128b44b80d00b9417cb19

用户可以将 submodule.$name.update 设置为“!command”,这将导致运行“command”而不是签出/合并/变基。
这允许用户更细粒度地控制更新的完成方式。

签署人:Chris Packham <[电子邮件受保护]>

这意味着您可以对“命令”进行版本控制,然后将其用于任何子模块更新(通过这submodule.$name.update 设置)。
如果需要,该脚本可以进行稀疏结帐。


2016 年 8 月更新(3 年后)

使用 Git 2.10(2016 年第 3 季度),您将能够执行

 git config -f .gitmodules submodule.<name>.shallow bool

查看“无需额外重量的 Git 子模块< /a>”了解更多。

With git1.8.4 (July 2013), in addition git shallow update for submodule (git submodule update --depth 1), you now can have a custom update:

In addition to the choice from "rebase, merge, or checkout-detach", "submodule update" can allow a custom command to be used in to update the working tree of submodules via the "submodule.*.update" configuration variable.

See commit 6cb5728c43f34a7348e128b44b80d00b9417cb19:

Users can set submodule.$name.update to '!command' which will cause 'command' to be run instead of checkout/merge/rebase.
This allows the user finer-grained control over how the update is done.

Signed-off-by: Chris Packham <[email protected]>

That means you can version a 'command' that you can then use for any submodule update (through the submodule.$name.update setting).
That script can do a sparse checkout if you want.


Update August 2016 (3 years later)

With Git 2.10 (Q3 2016), you will be able to do

 git config -f .gitmodules submodule.<name>.shallow bool

See "Git submodule without extra weight" for more.

临风闻羌笛 2024-11-20 22:00:07

您可以按照与正常稀疏检出相同的方式对子模块进行稀疏检出。只需记住每个模块的 sparse-checkout 文件位于 .git/modules//info/ 中。但是,正如 git 1.7 稀疏签出功能中讨论的,稀疏签出是正是这样:结账。您无法移动文件或共享设置。

You can do sparse checkouts of submodules the same way as normal sparse checkout. Just remember the sparse-checkout file for each module goes in .git/modules/<mymodule>/info/. But, as discussed in git 1.7 sparse checkout feature, sparse checkouts are exactly that: checkouts. You can't move files or share the settings.

淡淡绿茶香 2024-11-20 22:00:07

子模块不能执行存储库的部分。您应该查看子树合并

Submodules can't do part of a repo. You should check out subtree merge instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文