git - 我如何让两个 "streams of development"(分支?)相互跟踪,同时以特定方式保持不同?

标签 git mercurial dvcs bazaar

简介:

我想让两个(或更多)“开发流”/环境相互跟踪,在两个方向上相互发送更改,而不完全融合 - 同时保留某些关键的、本质的差异?

细节,一个特殊的例子:

这是一个特殊的例子:

哦,28 年来,我一直在控制我的主目录 glew-home 的版本。 RCS、SCCS、许多 RCS 包装器、CVS、SVN、早期 DVCS(如 Monotone 和 Darcs)、bzr、git 和现在的 Mercurial 的短暂实验。目前我主要喜欢使用 Mercurial,尽管我会根据需要跳回 git 或 bzr。

现在,我的主目录在许多系统上都很相似,但并不完全相同。 Cygwin 与工作中的各种 Linux 之间的最大区别。我试图让它们尽可能地相似,但差异会出现,并且经常需要坚持。

这是一个简单的差异示例:在 Cygwin 上,在我个人拥有的笔记本电脑上,~/LOG 是到 ~/LOG.dir/LOG.cygwin.glew-home 的符号链接(symbolic link),而在工作时 ~/LOG 是指向类似 ~/work/LOG.dir/LOG.work 的符号链接(symbolic link)。

原因:任何专有的东西都需要继续发挥作用。 ~/work 是一个单独的存储库,~/work/.hg,不会被推/pull 或以其他方式与我的个人计算机同步。

问题:我想让这些符号链接(symbolic link)(和其他几个文件)保持不同。但我想同步所有其他文件。我在两个地方都改变了我的环境。如果我在工作中对 ~/.emacs 进行了更改,我想将其发送回家,反之亦然。

问:我怎样才能最方便地做到这一点?

在过去糟糕的日子里,我会使用一个通用的存储库,比如一个通用的 CVS 存储库。 CVS 不处理符号链接(symbolic link),但说我有一个脚本可以从存储在 CVS 中的模板生成符号链接(symbolic link)。我会安排 ~/LOG 的符号链接(symbolic link)模板为我的 cygwin-laptop 和工作设置不同的分支。我将创建工作区,其中大多数文件指向其相应 RCS/CVS 存储库的同一分支,而 cygwin-linux 和 work 之间不同的文件会将其相应的分支 check out 到相应的工作区中。

这很有效,尽管维护起来有点痛苦。

我还没有找到使用现代 DVCS(例如 Mercurial(或 Got 或 Bzr))执行此操作的好方法。

这些现代 DVCS 工具执行整个存储库分支,而不是每个文件分支。他们不理解大多数文件相同但仅某些文件不同的两个分支的概念。

当我尝试跟踪两个分支时,我总是以传播本质差异而告终。

有些人建议使用 Makefile。没有吸引力。

我考虑过对 base revs 进行必要的更改,并不断地 rebase。但我不太喜欢 rebase 。

更好的想法表示赞赏。

被子?

最佳答案

在 git 中,你可以维护一个 master 分支,其中包含所有公共(public)文件(可能加上某些默认状态下的不同文件)和 自定义 分支,如 workcygwin

当你想做一个应该传播到每台机器的更改时,你可以在 master 中进行。如果你想让某些东西只用于工作/cygwin 机器,你可以在适当的分支中进行。

当你从一台机器上的 master pull 新的更改时,你只需 git merge master 或者git rebase master 来自那个分支。

你应该使用哪一个是一个偏好问题,结果工作目录是一样的,只是历史不同。使用 merge,您将始终看到何时使用来自 master 的更改更新了自定义 分支。使用 rebase 看起来所有的定制都从 master 的尖端分支出来,就好像您首先在 master 中完成所有事情然后才提交任何定制。

不幸的是,我不知道其他 DVCS,因为我没有任何使用它们的经验,但是,我相信 git 的这个过程非常简单。

关于git - 我如何让两个 "streams of development"(分支?)相互跟踪,同时以特定方式保持不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11789875/

相关文章:

mercurial - 从 Mercurial 存储库获取 Bitbake 配方

python - 如何为不同分支中的 Django ROOT_URLCONF 设置设置正确的值

git - 像 Git 这样的 DVCS 是否不适合使用持续集成的团队?

Mercurial仅生成文件名diff

mercurial - 在 Cruisecontrol.net 中更改 DVCS 的操作流程?

git - 来自分支的新 git 项目?

git - 无法通过 Git 在 azure 上部署静态网站

mercurial - 为匿名分支命名

git - 使用 SourceTree 的自定义操作脚本安装 Pod

git 致命 : mmap failed: Invalid argument