Kra*_*lew 6 git mercurial dvcs bazaar
简要:
我希望有两个(或更多)"开发流"/环境相互跟踪,在两个方向之间相互发送变化,而不会完全收敛 - 同时保留某些关键,必要的差异?
详细信息,一个特定示例:
这是一个特例:
我一直是控制我的主目录的版本,glew-home,因为,哦,28年.RCS,SCCS,许多RCS包装器,CVS,SVN,早期DVCS的短暂实验,如Monotone和Darcs,bzr,git和现在的Mercurial.目前我主要使用Mercurial,尽管我会根据需要跳回git或bzr.
现在,我的主目录在许多系统上都类似,但不完全相同.最大的区别在于Cygwin与工作中的各种Linux.我试图让它们尽可能地微笑,但是出现差异,并且经常需要坚持下去.
以下是差异的一个小例子:在Cygwin上,在我个人拥有的笔记本电脑上,〜/ LOG是〜/ LOG.dir/LOG.cygwin.glew-home的符号链接,而在工作中〜/ LOG是一个符号链接到某个东西喜欢〜/ work/LOG.dir/LOG.work.
原因:任何专有需要留在工作中.〜/ work是一个单独的存储库,〜/ work/.hg,不会被推/拉或以其他方式与我的个人计算机同步.
问题:我想保持这些符号链接(和其他几个文件)不同.但我想同步所有其他文件.我在两个地方都改变了我的环境.如果我在工作中改变我的〜/ .emacs,我想把它发回家,反之亦然.
问:我怎样才能最方便地做到这一点?
在过去的糟糕时期,我会使用一个共同的存储库,比如一个常见的CVS回购.CVS不处理符号链接,但是说我有一个脚本从存储在CVS中的模板生成符号链接.我会安排〜/ LOG的符号链接模板为我的cygwin-laptop和工作提供不同的分支.我会创建工作区,大多数文件指向相应的RCS/CVS repos的同一分支,而cygwin-linux和work之间不同的文件会将相应的分支签出到相应的工作区.
这很有效,虽然维持起来有点痛苦.
我还没有想出一个使用现代DVCS的好方法,比如Mercurial(或Got或Bzr).
这些现代DVCS工具执行整个repo分支,而不是按文件分支.他们不理解两个分支的概念,这两个分支对于大多数文件是相同的,但仅在某些文件中有所不同.
当我试图跟踪两个分支时,我总是最终传播出必要的差异.
有些人建议Makefiles.不吸引人.
我已经考虑过必要的改变基础转换,并不断变基础.但我不喜欢那么反驳.
更好的想法赞赏.
被子?
在 git 中,您可以维护一个master包含所有常见文件(可能加上某些默认状态下的不同文件)和自定义分支(例如work或 )的分支cygwin。
当您想要进行应传播到每台计算机的更改时,您可以在master. 如果您希望某些内容仅适用于工作/cygwin 机器,则可以在适当的分支中进行。
当您从检出自定义master分支的计算机上提取新更改时,您只需往返于该分支即可。git merge mastergit rebase master
您应该使用哪一个是一个偏好问题,生成的工作目录是相同的,只有历史记录不同。使用时,merge您将始终看到您何时使用 中的更改更新了自定义master分支。使用rebase它看起来所有的自定义都是从 master 的分支中分支出来的,就好像您首先在 master 中完成了所有操作,然后才提交了任何自定义。
不幸的是,我不知道其他 DVCS,因为我没有任何使用它们的经验,但是,我相信 git 的这个过程非常简单。