假设我有一个名为Shared Features
远程和本地的存储库。
我想将此 repo 添加到另一个 git repo 作为 a submodule
,但我不想使用远程的,而是使用本地的(出于带宽原因)。
所以我想使用这个本地仓库作为子模块和远程仓库之间的代理。这可能吗?
提前致谢。
注意:如果您也告诉我如何在 SourceTree 中执行此操作,我将不胜感激。
假设我有一个名为Shared Features
远程和本地的存储库。
我想将此 repo 添加到另一个 git repo 作为 a submodule
,但我不想使用远程的,而是使用本地的(出于带宽原因)。
所以我想使用这个本地仓库作为子模块和远程仓库之间的代理。这可能吗?
提前致谢。
注意:如果您也告诉我如何在 SourceTree 中执行此操作,我将不胜感激。
子模块可以是您喜欢的任何存储库,但如果您想在本地添加它,则需要支持的协议。
在上面的链接中,第一个描述的协议是Local protocol
允许您clone
使用path
或file://
Local Protocol
最基本的是本地协议,其中远程存储库位于磁盘上的另一个目录中。
如果团队中的每个人都可以访问共享文件系统(例如 NFS 挂载),或者在不太可能的情况下每个人都登录到同一台计算机,这通常会使用。
后者并不理想,因为您的所有代码存储库实例都将驻留在同一台计算机上,从而更有可能发生灾难性损失。
如果您有一个共享的挂载文件系统,那么
clone
您push
可以pull
从local 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
然后,您可以像通过网络一样向该远程推送和拉取。