git遥控器如何工作?

Hai*_*ood 5 git version-control git-pull git-push git-remote

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

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

git remote add myplugin <url>

那我可以做 git pull myplugin master

它只是从那个遥控器中拉出变化.

现在让我说我的项目设置为:

/
/index.php
/whatever
Run Code Online (Sandbox Code Playgroud)

并将遥控器设置为

/
/whatever.php
Run Code Online (Sandbox Code Playgroud)

当我拉入遥控器时,我最终会

/index.php
/whatever
/myplugin
/myplugin/whatever.php
Run Code Online (Sandbox Code Playgroud)

这很好.

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

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

它只会推动myplugin的变化吗?或远程作为第二个存储库并将提交整个存储库?

Von*_*onC 6

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

添加远程方法意味着将其所有历史记录并将其合并到您的仓库中,或者将您的所有仓库中的提交推送到远程(不仅仅是来自本地的更改myplugin).

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

 git submodule add url/myplugin myplugin
Run Code Online (Sandbox Code Playgroud)

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