Git合并多个回购协议

Git合并多个回购协议,git,git-submodules,Git,Git Submodules,我对git还很陌生,仍然在试图了解它做某些事情的方式,而不是svn,我想知道我尝试做的事情是否可能。我正在尝试为一个Arduino项目创建一个存储库,其中包括几个Arduino“草图”,以及多个库。我将要编写的这些库中有一些来自其他人的现有存储库,它们是我将要编写的代码的依赖项。Arduino项目的本地文件夹结构如下所示: ~/Arduino +libraries +MyLib1/[lib files] +MyLib2/[..] +MySketch1/MySketch1.ino

我对git还很陌生,仍然在试图了解它做某些事情的方式,而不是svn,我想知道我尝试做的事情是否可能。我正在尝试为一个Arduino项目创建一个存储库,其中包括几个Arduino“草图”,以及多个库。我将要编写的这些库中有一些来自其他人的现有存储库,它们是我将要编写的代码的依赖项。Arduino项目的本地文件夹结构如下所示:

~/Arduino
 +libraries
   +MyLib1/[lib files]
   +MyLib2/[..]
 +MySketch1/MySketch1.ino
 +MySketch2/MySketch2.ino
(SketchName.ino只是基本上是main.cpp的Arduino命名约定)

现在,我看到的存储库在结构上有所不同。有些在顶层中包含Arduino文件夹,有些将顶层映射到Arduino文件夹,有些仅包含库,并将顶层映射到Arduino/库。有没有办法将这些多个存储库合并到我自己的存储库中,保留到原始存储库的链接?我已经研究了子模块,但这些子模块似乎只在它们自己的子目录中工作,这对我来说不起作用,因为我需要本地文件夹结构来包含相同~/Arduino文件夹中的所有草图,以及~/Arduino/libraries文件夹中的所有库

因此,我希望上述文件夹结构与另一个repo共存,其中包含:

libraries
 +YourLib1/[..]
 +YourLib2/[..]
YourSketch/YourSketch.ino
AnotherRandomLib/[..]
以及第三份回购协议,包括:

libraries
 +YourLib1/[..]
 +YourLib2/[..]
YourSketch/YourSketch.ino
AnotherRandomLib/[..]
这样最终的结果是一个单一的回购,看起来像这样

~/Arduino
 +libraries
   +AnotherRandomLib/[..]
   +MyLib1/[..]
   +MyLib2/[lib files]
   +YourLib1/[..]
   +YourLib2/[..]
 +MySketch1/MySketch1.ino
 +MySketch2/MySketch2.ino
 +YourSketch/YourSketch.ino

可以这样做吗?如果不能,从回购协议中引用他人代码的“最佳实践”是什么?只需将文件添加到repo(简单、防弹,但会断开与原始repo的链接,失去拉入更新的能力,并导致属性丢失)?将它们排除在repo之外,让用户单独查找和下载这些其他库(这根本不是一个好的解决方案)?有什么想法吗?

考虑到子模块总是存在于它们自己的文件夹中,如果“
”中所需的每个目录都是git repo(可以在父repo中作为子模块引用),那么您的结构就可以工作了


否则,您必须处理符号链接,这些符号链接确实存在于Windows:read.“

是的,子模块将为您提供此功能,但管理起来可能很麻烦。如果arduino生态系统有某种软件包管理,我会朝这个方向走。如果没有,您将无法编辑其他草图中的代码,是的,子模块将正常工作,但是我可以将2个子模块签出到同一目录中吗?我得到的印象是,子模块需要签出到它自己的子目录中,这在这里不起作用。Arduino生态系统没有任何好的功能,比如包管理,它只是在您的用户目录中有一个文件夹,该文件夹被视为与Arduino安装目录位于同一文件夹中(即~/Arduino/libraries/MyLib中的用户库被视为与$(ARDUINOPATH)/libraries中的用户库相同),但是你只能在一个目录~/Arduino中找到,否则你的lib就找不到了。那不行。它们需要是独立的子目录。很抱歉,听起来你和JavaScript在过去二十年里一直在使用同一个词:复制和粘贴:/make你可以为arduino编写一个包管理系统。可惜Windows不支持真正的符号链接。否则,我可以将子模块签出到它们自己的目录中,并在主源代码树中对它们进行符号链接。编辑:事实上,我发现对WindowsVista/7的引用实际上支持符号链接。。。我得调查一下。虚拟盒子…:巨魔脸: