本地存储库作为子模块

时间:2016-04-10 23:16:55

标签: git atlassian-sourcetree sourcetree

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

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

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

提前致谢。

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

编辑:我认为我缺乏使我的问题清楚的术语,所以我在这里画出我的意思: enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

  

<强> Local Protocol

     

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

     

如果团队中的每个人都可以访问共享文件系统(如NFS挂载),或者每个人都登录到同一台计算机的可能性较小,则通常会使用此方法。

     

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

     

如果您有共享的已挂载文件系统,那么您可以从 clone pushpulllocal file-based repository进行操作即可。

     

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

     

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

git clone /opt/git/project.git
     

或者你可以这样做:

git clone file:///opt/git/project.git
     如果您在网址开头明确指定file://,那么

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
     

然后,您可以通过网络推送和拉出该遥控器,就好像您是通过网络进行操作一样。