Ker*_*ido 10 git version-control git-submodules
我有以下项目设置:
Solution A
Project 1 (轻量级组件)Project 2(包含很多文件并依赖于Project 1)Solution A是一个单一的git存储库.然后我创建了另一个解决方案,发现我可以重用甚至更新其功能Project 1.所以我的第二个解决方案可能看起来像这样:
Solution B
Project 1 (必须分享!)Project 3(取决于Project 1).现在我想Project 1成为一个共享组件.也就是说,每当我Project 1从任一解决方案(A或B)更改源代码时,我都需要另一个相应的更新.
也许这有点像git的子模块功能.但是,我能够使用它的唯一方法是将整体指定为子模块.由于体积庞大,这并不是我想要的理想选择.我只需要它的一小部分就是一个子模块.Solution ASolution BSolution A
我知道它可以在svn中完全按照我的描述工作:在svn:externals属性中指定外部存储库中的目录.
有什么提示吗?或许,我错过了什么?
这肯定与子模块有关(参见子模块的性质)
在您的情况下,理想的解决方案是Project1从SolutionAGit repo中提取:
请参阅如何提取git子目录并从中创建子模块?.
但这涉及重写SolutionA历史记录,如果您已经发布它并且有些人正在从中提取它,这是一个问题.
使用filter-branch进行提取过程.
要重写存储库,使其看起来像是
Project1/项目的根目录,并丢弃所有其他历史记录:
git filter-branch --subdirectory-filter Project1 -- --all
Run Code Online (Sandbox Code Playgroud)
因此,您可以将库子目录转换为自己的存储库.请注意
--,它将filter-branch选项与修订选项分开,并--all重写所有分支和标记.
然后声明Project1为子模块SolutionB:
cd SolutionB
git submodule add /path/to/Project1 Project1
Run Code Online (Sandbox Code Playgroud)
注意:如果您打算发布您的本地URL,请不要在此处使用
SolutionB!
git commit -m "Add submodules Project1"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |