5

如果我有一个受版本控制的主项目。

然后我为第三方插件添加一个遥控器

git remote add myplugin <url>

然后我可以做git pull myplugin master

它只是从该遥控器中提取更改。

现在假设我的项目设置为:

/
/index.php
/whatever

遥控器设置为

/
/whatever.php

当我拉入遥控器时,我最终得到

/index.php
/whatever
/myplugin
/myplugin/whatever.php

这很好。

我想知道的是,如果我对 myplugin 进行更改,

如果我发出git push myplugin master什么推送?

它只会推送 myplugin 中的更改吗?还是远程充当第二个存储库并提交整个存储库?

4

2 回答 2

6

只有在远程仓库已经包含(不是 juut )之后git pull myplugin,你才会在 a 之后结束/myplugin/whatever.php/myplugin/whatever.phpwhatever.php

添加远程意味着提取其所有历史并将其合并到您的存储库中,或者将您的所有存储库中的提交推送到远程(不仅仅是来自本地“ myplugin”的更改)。

您所描述的(仅推送来自“myplugin”的更改,或仅在“myplugin”中提取提交)称为submodules

 git submodule add url/myplugin myplugin

这将添加一个目录 myplugin,您会在其中找到第二个嵌套的 Git 存储库,其行为就像您在问题中描述的那样。
它不仅仅是一个新的遥控器,而是一个子模块 url,用于在子目录中包含特定 SHA1 的另一个 repo。

于 2012-09-13T05:32:31.207 回答
0

远程确实像第二个存储库,因为它是一个……当您发出推送命令时,GIT 会将已修改的内容复制到远程,有效地将其重新与您的本地存储库保持一致。

如果您要问的是推送是否会遍历子目录,那么答案是肯定的。

如果您询问是否将尚未提交到本地存储库的更改推送到远程,那么答案是否定的。

于 2012-09-13T05:15:16.310 回答