我在 github 上托管了一个项目,其结构如下
github.com/example/allpackages
.
├── .git
└── packages
├── example-1
├── example-2
└── example-3
在每次推送到 github 时,我希望将每个包的内容推送到与 repo 名称相对应的 repo,例如
github.com/example/example1
.
├── .git
└── example1
github.com/example/example2
.
├── .git
└── example2
等等
有人对如何自动化这个有任何想法吗?有人提到使用 Travis-CI 来完成这项任务,但我找不到任何关于它如何工作的细节。
我的理想解决方案:
- 将完全自动化——这意味着更新不会由推送计算机触发,而是由 github 或外部服务触发。
- 在更新时将历史记录从“allpackages”迁移到相应的子存储库
任何关于从哪里开始研究的指导将不胜感激。提前致谢!
编辑:
@VonC 建议使用子模块,并使用git submodule foreach --recursive
优点:
- Dry - 每个子模块的代码都在一个地方。
- 能够跟踪父中子模块的更改。
- 使用
git submodule foreach --recursive
别名允许单个提交到多个子模块
缺点:
- 查看对子模块所做的更改并不是很清楚。必须深入研究子模块以查看进行了哪些更改。
- 使用
git submodule foreach --recursive
起来很麻烦,而且不像常规提交那样优雅。
对于这个特定的用例。例如,“包”存储库github.com/example/example1
将在某种意义上被读取。我不会直接推给他们。他们只会在更新时收到allpackages
更新。需要创建它们的唯一原因是因为使用它们的包管理器需要为每个包单独的存储库。