您可以使用分支或文件夹来解决这个问题,但它是子模块的主要候选 IMO。我用它们来做这些事情。这是一组 3 个 repos 的示例:
common/ (bare repo of common files)
.git/
wp7/ (regular repo of wp7 specifics)
.git/
common/ (submodule)
wp8/ (same as wp7, but for wp8)
.git/
common/ (submodule)
要制作通用的,您只需定期进行回购和git clone --bare repo optional_bare_repo_name
. 如果你不给它一个名字,它会克隆common
到一个名为 的文件夹common.git
中,这是一个裸版本。现在您可以从任git subdmodule add path/to/common optional_folder_name
一 wp repo 中执行(如果您未指定,它使用 repo 文件夹名称)。这有效地将公共 repo 克隆到每个 wp repo 内的文件夹中。这些也可以是单个 repo 的分支;您只需在每个分支上添加子模块即可。
子模块比分支稍微多一些维护,但它们做了一些分支不能做的事情。它们在您的存储库中为您提供了平行的开发线。当您在任一 wp 存储库中的公共存储库中进行更改时,您将其提交到那里,您可以将其推送回外部的、裸露版本的 common,然后将其拉到另一个 wp 存储库的公共存储库中。它只是一个常规的 repo,但它的克隆存在于 wp repos 中。在您的 wp 存储库中,您将通过首先检查公共存储库中的正确提交,然后在 wp 存储库外部执行git add common
and来告诉它您现在想要哪个版本git commit -m'Update common for feature X'
。这会在 wp 存储库中创建一个提交,该提交仅将提交的哈希存储在公共子模块中。
当您稍后在 wp 存储库中签出此提交时,它将签出 wp 代码,以及公共存储库中的适当提交。基本上,您可以跟踪特定时间的通用回购版本。这很好,有几个原因。一方面,如果您不想要或不需要它,您不必在特定的 wp 存储库中获得最新的共同点。这也意味着您实际上可以在任一公共 repo 中检出较旧的提交,添加它,然后在该 wp repo 中提交它,然后根据需要对旧提交进行处理。不过,这需要做更多的工作,而且您必须记住在 wp 和 common repos 中一起工作。我每天都这样做,但我听很多人说这太麻烦了。
您还可以在 wp 存储库中添加和提交特定版本的 common 以及文件,例如,您可以进入并重构共同的东西,跳出并修复针对 wp7 中的重构的更改,然后添加 common 和 wp7 更改在 wp7 中一起提交并提交它们以跟踪这两个更改。现在,如果您回滚 1 次提交,公共 repo 也将回滚到重构之前,因此您可以在每次提交时拥有正常运行的代码。