git 我自己仓库中第三方仓库的版本分支
git version branch of thirdparty repository within my own repository
我想在我自己的 git 存储库中使用托管在 git 存储库中的第三方代码。
我将需要修改和扩展第三方代码的某些部分。
但我仍然希望能够将对第三方仓库的某些新提交合并到我的项目中。
我尝试为此使用 git submodule
。我将遥控器留在第三方存储库中,以便进行更改。我在不推送到第三方存储库的子模块上创建了一个新分支(反正我没有写入权限)。
但是当其他人克隆我的存储库时,他们将在 git submodule update
上获得 Fetched in submodule path 'thirdparty-repo', but it did not contain abcd
,因为仍然在 .gitmodules
中配置的远程存储库不包含提交 [=15] =].
我该如何解决这个问题?或者是否有更好的方法来实现我的要求?
——fork 子模块——你说:
I should have mentioned that the 3rd party repo is hosted on github, whereas my project is on a private gitlab. I suppose I could perform the fork in a couple of manual steps. But it also seems like kind of an overkill to me. The 3rd party repo is quite large and I'm only modifying a small part of it. Also I would need to publish two repositories later on. Is there no direct way?
确实没有“直接方式”,除非您当然可以说服第三方存储库所有者将您的更改应用到他们的 存储库中。你已经看到了原因:
Fetched in submodule path 'thirdparty-repo', but it did not contain <em>hash-id</em>
一个 Git 子模块,如在任何 Git 存储库中所见,仅由两部分组成:
- 形式说明:如果您需要存储库本身,这里是URL用于克隆。
- 形式的说明:为了使这个超级项目提交具有正确的子模块提交,进入子模块存储库(工作树)并对哈希 ID 为的提交进行分离头检查_______(已填空)
前者是.gitmodules
文件中的一个条目;后者是一个 gitlink,它是一个模式为 [=11= 的“文件”(在超级项目的索引条目中,从超级项目的提交中复制) ] 而不是模式 100644
(常规 read/write 文件)或 100755
(可执行 read/write 文件)。所有索引条目都带有哈希 ID:当文件 是 文件时,这是一个 blob 的哈希 ID。当文件是符号 link(模式 120000
)时,这是包含符号 link 的目标路径的 blob 的哈希 ID。而且,当“文件”是 gitlink 时,这是提交的哈希 ID。
(有些人有时 想要 子模块基于分支名称工作,而不是基于 gitlinks。Git,但是有一个项目可以让它变得更好,我们可能对它有一些未来的希望。现在我们主要停留在 gitlinks 上。这在这里并不真正相关,但值得记住:子模块不'基于分支名称工作,有充分的理由:分支名称通常是无意义和不受控制的,不像哈希 ID 那样是唯一的。)
很少有额外资源可用于您的 GitHub 分支。 GitHub 上的一个分支是 一个克隆,但它是一个与原始 共享存储 的克隆。所以你在这里并没有真正给 GitHub 添加太多负载(尽管想到了骆驼、背和吸管的寓言)——任何克隆你的 repo 的人都会克隆 一些 存储库,当他们到达克隆子模块的点时。这将需要多少 space:无论多少兆字节,如果它们被合并,加上你的提交,如果他们克隆第三方的存储库,无论多少兆字节,加上你的提交,如果他们克隆你的叉子。因为你只是 修改 几个文件,你添加到你的 fork 的额外提交几乎不会增加任何 weight 到你的 fork:它们实际上是 共享所有未修改的文件以及较早的提交。
我想在我自己的 git 存储库中使用托管在 git 存储库中的第三方代码。 我将需要修改和扩展第三方代码的某些部分。 但我仍然希望能够将对第三方仓库的某些新提交合并到我的项目中。
我尝试为此使用 git submodule
。我将遥控器留在第三方存储库中,以便进行更改。我在不推送到第三方存储库的子模块上创建了一个新分支(反正我没有写入权限)。
但是当其他人克隆我的存储库时,他们将在 git submodule update
上获得 Fetched in submodule path 'thirdparty-repo', but it did not contain abcd
,因为仍然在 .gitmodules
中配置的远程存储库不包含提交 [=15] =].
我该如何解决这个问题?或者是否有更好的方法来实现我的要求?
I should have mentioned that the 3rd party repo is hosted on github, whereas my project is on a private gitlab. I suppose I could perform the fork in a couple of manual steps. But it also seems like kind of an overkill to me. The 3rd party repo is quite large and I'm only modifying a small part of it. Also I would need to publish two repositories later on. Is there no direct way?
确实没有“直接方式”,除非您当然可以说服第三方存储库所有者将您的更改应用到他们的 存储库中。你已经看到了原因:
Fetched in submodule path 'thirdparty-repo', but it did not contain <em>hash-id</em>
一个 Git 子模块,如在任何 Git 存储库中所见,仅由两部分组成:
- 形式说明:如果您需要存储库本身,这里是URL用于克隆。
- 形式的说明:为了使这个超级项目提交具有正确的子模块提交,进入子模块存储库(工作树)并对哈希 ID 为的提交进行分离头检查_______(已填空)
前者是.gitmodules
文件中的一个条目;后者是一个 gitlink,它是一个模式为 [=11= 的“文件”(在超级项目的索引条目中,从超级项目的提交中复制) ] 而不是模式 100644
(常规 read/write 文件)或 100755
(可执行 read/write 文件)。所有索引条目都带有哈希 ID:当文件 是 文件时,这是一个 blob 的哈希 ID。当文件是符号 link(模式 120000
)时,这是包含符号 link 的目标路径的 blob 的哈希 ID。而且,当“文件”是 gitlink 时,这是提交的哈希 ID。
(有些人有时 想要 子模块基于分支名称工作,而不是基于 gitlinks。Git,但是有一个项目可以让它变得更好,我们可能对它有一些未来的希望。现在我们主要停留在 gitlinks 上。这在这里并不真正相关,但值得记住:子模块不'基于分支名称工作,有充分的理由:分支名称通常是无意义和不受控制的,不像哈希 ID 那样是唯一的。)
很少有额外资源可用于您的 GitHub 分支。 GitHub 上的一个分支是 一个克隆,但它是一个与原始 共享存储 的克隆。所以你在这里并没有真正给 GitHub 添加太多负载(尽管想到了骆驼、背和吸管的寓言)——任何克隆你的 repo 的人都会克隆 一些 存储库,当他们到达克隆子模块的点时。这将需要多少 space:无论多少兆字节,如果它们被合并,加上你的提交,如果他们克隆第三方的存储库,无论多少兆字节,加上你的提交,如果他们克隆你的叉子。因为你只是 修改 几个文件,你添加到你的 fork 的额外提交几乎不会增加任何 weight 到你的 fork:它们实际上是 共享所有未修改的文件以及较早的提交。