所以我对git有点新手 - 或者至少是控制台上的git,一直在使用Tortoise git。而且我发现自己处于一种我认为相对“常见”的用例:
我计划了几个存储库:通用/共享代码repo_sN,应用程序代码repo_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文件夹结构提交到remote_repo_app0,即包括所有包含内容的共享子目录。 我还希望能够将我在任何folder_sN_N中所做的更改推回到他们正确的存储库repo_sN /从所述存储库中提取更新。
然而,出现了两个问题。使用git-subtree,我只能让事情变得如此:
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
这是不可取的,因为它不会隐藏再次使用子存储库并且不必要地混乱我的源目录并违反我的工作区的默认文件夹结构。
我使用
将提交推回到repo_app0git commit -m "My commit"
git push remote_repo_app0 master
git subtree push --prefix=s1 remote_repo_s1 master
但是,这会推动文件夹sN中所做的更改,这也排除了所有folder_sN_N的公共顶级目录: - /。
其次,例如,我可能需要将repo_s0的分支从“master”切换到“兼容性”,以便使用较旧的编译器编译app0。所以我的想法是功能不会改变,而实现确实符合旧语言的语法。
我一直无法找到如何使用像“常规”git工作目录和切换分支这样的子树。
这有可能吗?这是一个非常深奥的用例,所有人只需手工编号/复制/ ???需要的部分?更多的是,我在这里找不到解决方案吗?