git遥控器如何工作?

时间:2012-09-13 05:11:09

标签: git version-control git-push git-pull git-remote

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

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

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的变化吗? 或者远程充当第二个存储库并将提交整个存储库吗?

2 个答案:

答案 0 :(得分:6)

只有当远程仓库已包含git pull myplugin(不是juut /myplugin/whatever.php

时,您才会在/myplugin/whatever.php之后whatever.php结束

添加远程工具意味着将其所有历史记录合并到您的仓库中,或者将您的回购提交从所有您的仓库推送到远程(不仅仅是来自您当地的myplugin的更改“)。

您所描述的内容(仅推送'myplugin'中的更改,或仅在'myplugin中提取提交')称为 submodules

 git submodule add url/myplugin myplugin

那会添加一个目录myplugin,你可以在其中找到第二个嵌套的Git repo,就像你在问题中描述的一样。
它不仅仅是一个新的远程,而是一个子模块URL,用于在特定SHA1的子目录中包含另一个repo。

答案 1 :(得分:0)

遥控器确实像第二个存储库一样,因为它是一个......当你发出推送命令时,GIT会将修改过的内容复制到遥控器上,有效地将其恢复到本地存储库的位置。

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

如果您询问尚未提交到本地存储库的更改是否会被推送到远程数据库,则答案为否。