子模块版本自动填充父模块 [英] Auto populate submodule version to parent module
问题描述
我正在使用Git运行Windowsversion 1.8.1.msysgit.1
推荐答案
生成子模块只是通过.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屋!