5

假设我有一个名为Shared Features远程和本地的存储库。

我想将此 repo 添加到另一个 git repo 作为 a submodule,但我不想使用远程的,而是使用本地的(出于带宽原因)。

所以我想使用这个本地仓库作为子模块和远程仓库之间的代理。这可能吗?

提前致谢。

注意:如果您也告诉我如何在 SourceTree 中执行此操作,我将不胜感激。


编辑:我认为我缺乏明确我的问题的术语,所以我在这里画出我的意思: 在此处输入图像描述

4

1 回答 1

5

子模块可以是您喜欢的任何存储库,但如果您想在本地添加它,则需要支持的协议

在上面的链接中,第一个描述的协议是Local protocol允许您clone使用pathfile://

Local Protocol

最基本的是本地协议,其中远程存储库位于磁盘上的另一个目录中。

如果团队中的每个人都可以访问共享文件系统(例如 NFS 挂载),或者在不太可能的情况下每个人都登录到同一台计算机,这通常会使用。

后者并不理想,因为您的所有代码存储库实例都将驻留在同一台计算机上,从而更有可能发生灾难性损失。

如果您有一个共享的挂载文件系统,那么clonepush可以pulllocal file-based repository.

对于clone这样的存储库或将一个作为远程添加到现有项目,请使用path存储库作为 URL

例如,要克隆本地存储库,您可以运行如下内容:

git clone /opt/git/project.git

或者你可以这样做:

git clone file:///opt/git/project.git

如果您file://在 URL 的开头明确指定, Git 的操作会略有不同。

如果你只是指定路径,Git 会尝试使用硬链接或直接复制它需要的文件。

如果您指定file://,Git 会启动通常用于通过网络传输数据的进程,这通常是传输数据效率低得多的方法。

指定前缀的主要原因file://是,如果您想要一个干净的存储库副本,其中包含无关的引用或对象——通常是在从另一个版本控制系统或类似的东西导入之后(请参阅 Git Internals 以了解维护任务)。我们将在这里使用正常路径,因为这样做几乎总是更快。

To add a local repository to an existing Git project, you can run something like this:

git remote add local_proj /opt/git/project.git

然后,您可以像通过网络一样向该远程推送和拉取。

于 2016-04-10T23:24:03.243 回答