我们正在开发一个大型项目,其功能是“捆绑”功能(编辑:“捆绑”只是我们内部用来指代特定功能包的术语,并且不是'这意味着作为一个git术语)扩展到几个不同的git存储库。我正准备向上游发送一批更改以供审核和测试,但我遇到了一个障碍,试图让所有内容很好地协同工作。
到目前为止,我所做的是clone
从包含代码包的repo进入我的主项目,只要它获取了他们需要的文件。但是,当我转到add/commit
和push
时,来自“bundle”repo的文件将不会随之而来,可能是因为它们是我正在推送的不同git存储库的一部分从
要求团队中的所有其他开发人员在每次更改时都引入我的“捆绑包”并不是一个可行的选择(特别是因为它在开发周期中仍处于早期阶段,并且看到了大量的修改和重构),每次我需要发送文件时,我都不想手动复制文件。最好是,我可以设置一些东西,这样我就可以从我的“捆绑”仓库进入我的主仓库,然后整体推动这些变化。
有没有办法用git做我正在寻找的东西?
答案 0 :(得分:2)
我没有清楚地了解你想要的东西(单词bundle的用法在这里看起来不合标准?);但是,
man git-remote
可能就是您所需要的git push --mirror
(可能以git clone --mirror
答案 1 :(得分:2)
是的,你可以用分叉来做。
以下是一些如何分叉存储库并进行所需基本操作的教程:http://help.github.com/fork-a-repo/(GitHub帮助)
在这里,您可以找到有关遥控器的更多信息(此功能用于处理叉子):http://help.github.com/remotes/
答案 2 :(得分:1)
我的描述仍然不是很清楚,但听起来您可能需要使用submodule,subtree merge或git subtree
(“第三方”工具) )。
您应该询问您的项目周围是否有计划如何处理这种情况。有人可能已经计划过如何将“捆绑”存储库中的内容集成到“主”存储库中的其余代码中。
Submodules是将链接从一个存储库发布到另一个存储库的标准方法(使用.gitmodules
文件中的特殊“gitlink”树条目和数据)。子模块的使用允许其他用户重新建立您在开发过程中在本地创建的存储库内部存储库设置(听起来像)。
使用子模块将需要对需要访问它们的任何其他人进行一些工作流更改(即git submodule update
(第一次使用--init
)以确保他们在更新后检出了正确的提交子存储库提交(例如拉入“主要”存储库)。
subtree merge是一种直接将来自不相关提交(例如,从库的存储库)的内容合并到主项目的子树(子目录)中的方法。只有需要提取(或推出)子树下内容的更新的用户实际上需要做不同的事情(例如,他们可以使用git merge -s subtree
合并对源历史的更新)。有些人不喜欢子树合并,因为它将主要项目的历史与“子树历史”的副本合并(“污染”)。
git subtree
tool(第三方工具)可以帮助管理正常的子树合并。例如,git subtree split
子命令可以在主存储库的历史记录上进行提交并重写它们,以便它们出现在子树的原始历史记录之上。这样可以轻松地对子树内容进行“本地”更改,然后将其推向“上游”。它还具有--squash
模式,可以提供正常子树合并的许多好处,同时防止历史“污染”。
git subtree
的作者linked to a tutorial似乎非常有用。