子模块版本自动填充父模块 [英] Auto populate submodule version to parent module

查看:6
本文介绍了子模块版本自动填充父模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Git运行Windowsversion 1.8.1.msysgit.1

我有两个独立的repos(例如,1和2,都由我维护),repo2作为子模块(作为副本)添加到repo1中。然后,我更改子模块中的某些内容并推送到Remote。如果我在Remote上检查子模块的版本(Repo2)作为单独的repo,我会得到最新的散列。但是,如果在Remote上检查子模块的版本,它仍然是旧的散列。我不能自动完成这项工作吗?(对我来说是远程GitHub)

推荐答案

生成子模块只是通过.gitmodules.git/config文件告诉GIT,您的repo中的特定文件夹应该被视为一个单独的实体,其中包含来自其他地方的整个另一个repo。您可以将整个文件夹视为一个与其他所有内容一起进行版本化的文件,但您在repo中实际进行的版本化是在哪个特定repo上提交。

假设您已经对子模块进行了回购:

git init (or clone) a repo
git submodule add otherrepo path/to/otherrepo

以下是包含子模块的基本工作流程:

# either make some changes to the submodule yourself...
cd otherrepo
make some changes
git add --update .
git commit -m'Change some things'

# ...or pull some in from elsewhere
cd otherrepo
git pull

# now out in your repo, track those changes
cd ..
git add otherrepo
git commit -m'Point to latest commit in otherrepo'

让我们暂时忘掉子模块。您可以对Repo中的文件进行更改,但绝不能添加/提交它们。该文件在未来总是有效的,因为当它与回购中其他地方的更改发生冲突时,您可以修复它。它将与HEAD其余部分中发生的情况相匹配。不过,你在任何地方都回不去了。该文件将保持最新,但回购的历史记录不会正确跟踪它在某些时间的位置。

子模块就是这样。您可以将整个子模块视为单个文件。无论提交到其中的更改是什么,您的repo唯一关心的事情-唯一允许它关心的事情-就是您的repo提交的内容为子模块中的当前内容。它无法触及特定文件并对其执行操作,因此它所能做的就是跟踪整个子模块正在执行的提交操作,这就是它所做的。不过,就像前面示例中的文件一样,您必须小心地将子模块保持在正确的提交状态,并告诉您的repo是哪个提交的,否则您的历史记录将不会正确地知道当您在您自己的repo中返回时将该子模块回滚到哪里。

您必须将其与其他文件一起添加/提交,以告知您的repo的历史记录"这就是此子模块现在应该在的位置"。如果您不这样做,那么您的repo上的每个新提交都会重新添加到上次在您的repo中添加和提交的repo的位置。如果您将子模块向前移动了几次提交,或者如果您引入了一些子模块提交,并且您希望这些新提交现在成为您的repo历史记录的一部分,那么您需要在您的repo中添加并提交该子模块,以更新它认为是当前提交的提交。

这篇关于子模块版本自动填充父模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆