Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 自动将子模块版本填充到父模块_Git_Git Submodules - Fatal编程技术网

Git 自动将子模块版本填充到父模块

Git 自动将子模块版本填充到父模块,git,git-submodules,Git,Git Submodules,我使用git1.8.1.msysgit.1版运行windows 我有两个独立的回购协议(例如,1和2,均由我维护),回购协议2作为子模块(副本)添加到回购协议1中。然后我在子模块中更改了一些内容,并将其推到remote。如果我将子模块(repo 2)的版本作为远程上的独立repo进行检查,我会得到最新的散列。但是,如果检查远程上子模块的版本,它仍然是旧的哈希。我不能自动化这个吗?(对我来说是远程github)创建子模块只是通过.gitmodules和.git/config文件告诉git,您的re

我使用git
1.8.1.msysgit.1版运行windows


我有两个独立的回购协议(例如,1和2,均由我维护),回购协议2作为子模块(副本)添加到回购协议1中。然后我在子模块中更改了一些内容,并将其推到remote。如果我将子模块(repo 2)的版本作为远程上的独立repo进行检查,我会得到最新的散列。但是,如果检查远程上子模块的版本,它仍然是旧的哈希。我不能自动化这个吗?(对我来说是远程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中的文件进行更改,但决不添加/提交它们。该文件将始终有效,因为当它与回购协议中其他地方的更改发生冲突时,您将修复它。它将与
头部的其余部分相匹配。不过,你不可能在任何地方倒退。该文件将保持最新,但您的回购历史不会正确跟踪在特定时间的位置

子模块就是这样。您可以将整个子模块看作一个文件。无论提交到其中的更改是什么,您的回购协议唯一关心的事情——它唯一允许关心的事情——是提交您的回购协议所说的子模块中的当前更改。它无法访问特定的文件并处理这些文件,所以它所能做的就是跟踪整个子模块的提交状态,这就是它所做的。不过,与前面示例中的文件一样,您必须小心地将子模块保持在正确的提交位置,并告诉您的repo这是哪个提交,否则,当您在自己的repo中及时返回时,您的历史记录将无法正确地知道将子模块回滚到何处


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

如果您推送到远程存储库,另一个存储库将拉动更改。我无法让远程上的父repo显示新版本号。我将子模块(从任一位置,作为子模块或独立模块)推到远程。它的回购协议会用新的散列号更新。母公司回购仍显示
a。submodule@oldhash
。如果我试图从远程获取母公司回购协议,它会告诉我一切都是最新的。如果需要的话,我可以制作一张图表来澄清。母公司回购协议中的所有内容都是最新的。父repo只跟踪子模块的版本。如果在父级中执行
git status
,您应该会看到子模块说有“新提交”。您必须
git add submodulename
告诉父级repo更新对子模块当前提交的引用,然后
commit
将其提交。正如您必须
在回购协议中添加
提交
更改一样,您也必须这样做来跟踪子模块中的更改。好的,谢谢。我让它像这样工作。仍然与子模块非常混淆。在父模块和子模块之间只有一个很小的链接,它似乎是.gitmodules文件。哇,谢谢你花时间给我解释清楚。如果stack有这个功能,我会给你一杯啤酒^^