git子树分支交换&;目录布局

git子树分支交换&;目录布局,git,Git,所以我是git的新手——或者至少是控制台上的git,一直在使用TortoiseGit。我发现自己处于一个我认为是“普通”的用例: 我计划了几个存储库:通用/共享代码repo\u sN、应用程序代码repo\u appN 某些共享存储库的文件夹结构应如下所示: repo_s0 +---folder_s0_0 | file.txt | \---folder_s0_1 file.txt 应用程序存储库的文件夹结构可能使用多个共享存储库: repo_app0

所以我是git的新手——或者至少是控制台上的git,一直在使用TortoiseGit。我发现自己处于一个我认为是“普通”的用例:

我计划了几个存储库:通用/共享代码repo\u sN、应用程序代码repo\u appN

某些共享存储库的文件夹结构应如下所示:

repo_s0
+---folder_s0_0
|       file.txt
|       
\---folder_s0_1
        file.txt
应用程序存储库的文件夹结构可能使用多个共享存储库:

repo_app0
+---folder_s0_0
|       file.txt
|       
+---folder_s0_1
|       file.txt
|       
+---folder_s1_0
|       file.txt
|       
\---folder_s1_1
        file.txt
现在,我希望将上面的repo_app0文件夹结构提交到远程repo_app0,即包括所有共享的包含内容的子文件夹。 我还希望能够将我在任何文件夹中所做的更改推送回其适当的存储库,并从所述存储库中恢复/拉取更新

然而,出现了两个问题。使用git子树,我只能让事情像这样运行:

git subtree add --prefix=s0 remote_repo_s0 master
这给了我

repo_app0
+---s0
|   +---folder_s0_0
|   |       file.txt
|   |       
|   \---folder_s0_1
|           file.txt
|           
\---s1
    +---folder_s1_0
    |       file.txt
    |       
    \---folder_s1_1
            file.txt
这是不可取的,因为它不会隐藏子存储库已被使用的事实,不必要地扰乱我的源目录,并违反我的工作场所的默认文件夹结构

我使用

git commit -m "My commit"
git push remote_repo_app0 master
git subtree push --prefix=s1 remote_repo_s1 master
但是,这也会推动在文件夹sN中所做的更改,这也排除了所有文件夹sN的公共顶部目录:-/

其次,例如,我可能需要将repo_s0的分支从“master”切换到“compatibility”,以便使用较旧的编译器编译app0。因此,我们的想法是,功能不会改变,而实现不会改变,以符合较旧的语言语法

我一直无法找到如何使用像“常规”git工作目录这样的子树和切换分支


那么这有可能吗?这真的是一个深奥的用例,所有人都只需手动符号链接/复制/???需要零件吗?更重要的是,这里有我缺少的解决方案吗?

为什么不简单地使用子模块呢?嗨,我刚刚重新检查了子模块文档。就我所见,我会有与上面相同的缺点,加上无法将共享代码直接提交到我的应用程序存储库,再加上无法将内容提交并推送到共享代码存储库。因此,目前它似乎比子树更复杂。