RBF*_*F06 4 git bundle git-submodules
如果我有一个包含子模块的存储库,并且我想为sneakernet制作一个捆绑包,如何使该捆绑包包含更新子模块所需的对象?
例如,假设我有一个名为 的存储库parent
,它包含一个名为 的子模块submod
。我想创建一个包含自 commit 以来所有最近工作的包,所以很自然地,我会basecommit
从根目录中执行以下操作:parent
git bundle create mybundlefile.bundle basecommit..myworkingbranch
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为 的文件,其中包含范围内存储库mybundlefile.bundle
中的所有提交对象以及 ref 。问题是,如果这些提交中的任何一个更改了子模块,则生成的捆绑包将不会很有用,因为此类提交仅在更改子模块哈希时存储在捆绑包文件中。因此,存储在捆绑文件中的对象只是说“我正在提交,我将子模块的哈希值从更改为”。但该捆绑包实际上并不包含从捆绑包更新子模块并为.parent
basecommit..myworkingbranch
myworkingbranch
3ba024b
submod
2b941cf
1bb84ec
2b941cf..1bb84ec
myworkingbranch
如何创建捆绑文件,以便还包含子模块存储库中的所有对象。也就是说,如果父存储库的基本提交将basecommit
子模块submod
指向 hash A
,而父存储库的工作分支myworkingbranch
将子模块submod
指向 hash B
,那么我的包不仅需要包含basecommit..myworkingbranch
,还需要包含A..B
。
\n\n\n如何创建捆绑文件,以便还包含子模块存储库中的所有对象。
\n
你不能。捆绑文件特定于 Git 存储库。子模块只是到另一个Git 存储库的链接,因此您必须为单独的 Git 存储库创建单独的包。(然后您可以将各个捆绑包制作为存档。)
\n\n很明显,Git 可以深入到每个子模块并git bundle
在每个这样的子模块中运行,为您生成这些不同的文件。不过,传递给子命令的参数git bundle
很棘手。您必须编写自己的脚本并使用git submodule foreach
它在每个子模块中运行,并让您的脚本找出要使用的参数。
然后,您可能希望将每个捆绑包打包在一起(大概打包成 tar 或 rar 或 zip 或其他存档)以进行传输和解绑/获取。在解绑期间您将需要另一个git submodule foreach
,这可能会更烦人,因为理想情况下,这应该使用一组新的子模块(在解绑顶级子模块并选择适当的提交之后)。
可能有人编写了脚本来执行此操作,但如果是这样,我不知道。它不包含在 Git 本身中\xe2\x80\x94bundle 本身有点笨拙和非主流。
\n 归档时间: |
|
查看次数: |
3550 次 |
最近记录: |