2010-01-08 92 views
5

我在一个本地git仓库中有两个版本的一个项目。我必须将这个存储库提交到两个远程存储库,每个版本一个;如何在一个GIT存储库中跟踪两个版本的项目?

本地GIT(V1/V2) - >远程GIT(V1),远程GIT(V2)

我在当地的Git仓库应该只去REMOTE GIT(V1)的一些文件和其他应只能去REMOTE GIT(V2)。现在我提交完整的本地存储库到两个遥控器。 我只能将一些文件提交给REMOTE1吗?

我需要在一个存储库中同时存在两个版本的项目,但希望有一个选项来分割历史记录。我不认为任何分支都可以提供帮助,因为那样我就不得不对两个分支进行相同的更改。大部分代码中,90%的代码对于VER 1和VER 2是相同的。两个版本的新代码通常是相同的。

+0

首先,理解(并在此张贴)会是一件好事,你想达到什么目的。最小可能的存储库大小?需要合并到VER2从VER1分支出来的东西?还要别的吗? – 2010-01-08 01:45:26

回答

-1

听起来像你需要使用子模块git-submodule。您可以将常用代码存储在主存储库中,但将不同版本存储在子模块中。你不能用git分割历史。每个提交都是基于内容和父母的密码。

+1

子模块用于在源树中的某个位置将另一个项目嵌入到外部存储库中。 OP只有一个项目(分支不同),所以子模块不相关。 – 2010-01-08 01:58:19

3

分支正是你需要的。使用Git进行分支很容易,而且速度非常快,所以除了几次击键之外,不会丢失任何东西。

您可以使用3个分支。创建一个“通用”分支,在这里你将处理两个“叉子”共有的东西,并在提交后合并到它们中。对于特定的东西,在其中一个分支中工作。

Git在文件系统上使用硬链接,所以 分支在速度和使用空间方面都很便宜。

最后,您总是可以选择推/拉哪个分支。

+1

分支机构由于“硬链接”而不便宜。分支是便宜的,因为分支只是一个提交,它通过SHA1 id引用它的所有部分,并且不同提交树中的相同文件将具有相同的SHA1,并且只存储一次。 另一方面,SVN通过拥有完整的目录结构来存储分支,并*使用硬链接来优化。请不要将旧的,丑陋的SVN与新的漂亮的git混淆。 – 2010-01-08 02:27:42

+0

感谢您的纠正,我现在修好了。 – 2010-01-08 08:27:16

+0

@Randal:SVN也不使用文件系统硬链接。 SVN中的一个分支也很便宜,因为它“只是一个提交”。唯一的区别是,在SVN廉价的文件/文件夹副本中,分支和标签都是由相同的机制,而在git分支是一个单独的概念。 – 2010-01-08 12:47:34

0

创建三个Git存储库:core,app_1,app_2。在每个app存储库中,创建一个引用core存储库的Git子模块。

对待core库作为一个纯粹的图书馆和app库为纯图书馆消费者,构建了三个项目,这样你可以把一切都共同在core库和一切事物的两个“版本”,将两者之间的分歧版本在app存储库中。构建app存储库,以便core项目可以批量放置,但不进行修改,放入app存储库中的子目录中。您可能需要在所有app存储库之间共享的最小公共初始化脚本,但这是一个小的代价。

以这种方式构造代码的场景非常普遍。尽管以这种方式使用Git来支持这种代码体系结构方案远不那么常见,但它被认为是一种可行的可能性。

相关问题