我正在开发一个复杂的 Ionic 项目。我正在开发的许多组件和提供程序都是通用的,可以在我公司正在进行的其他项目中使用。这在软件开发中很常见。这是我提出的 Git 工作流程(该图显示了分支):
my-company-library-repo ----
|_ component 1 feature branch
|_ company component 1 feature branch testbed
|_ component 2 feature branch
最终的组件代码(只是一个.ts
or .js
在测试台中开发的文件)被推送到组件功能分支。测试台代码保留在测试台分支中。此外,功能分支中还包含该组件可能附带的任何文档。
现在,在应用程序存储库中,我使用以下命令将功能分支添加为子树:
git subtree add -P <destination-dir/feature> --squash <my-company-library-repo-url> <feature-branch-name>
这给了我以下内容(该图显示了文件夹结构):
my-app-repo-------
|_ company-library-feature-subtree
这应该只包含.js
or .ts
它的文档位于它的子文件夹中。我只得到这个部分工作。当它拉动子树时,它只拉动组件及其文档文件,但这些文件被拉入一个很长的子目录列表,如下所示:
my-app-repo/src/feature-branch/feature/src/app/providers/...
这使得使用该库变得困难,因为文件被放置在很多目录(未使用的目录)深处。
那么,当我将 2 个文件从 feature-testbed 分支推送到 feature 分支时,我怎么能不拉动它们的整个目录结构呢?
在添加子树之前my-app-repo
,从中分割出一个子树my-company-library-repo
:
# In my-company-library-repo
git subtree split -P src/app/providers/... -b feature-new feature
这将创造一个新的历史,内容如下:src/app/providers/...
在回购协议的根目录下,从feature
分支,并创建分支feature-new
在这段历史的结束时。
然后将该新分支添加为子树my-app-repo
:
# In my-app-repo
git subtree add -P <destination-dir/feature> --squash <my-company-library-repo> feature-new
现在您将拥有以下内容src/app/providers/...
at <destination-dir/feature>
.
您没有提到是否会定期重复此过程,但这也是可能的。来自git-subtree
手册页:
完全相同的历史记录的重复分割保证是相同的(即产生相同的提交 ID)。因此,如果您添加新的提交然后重新拆分,新的提交将作为提交附加到您上次生成的历史记录之上,因此'git merge
' 朋友们就会按预期工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)