附图:
我希望有两个(或更多)“开发流”/环境相互跟踪,在两个方向之间相互发送变化,而不会完全收敛 - 同时保留某些关键,必要的差异?
详细信息,一个特定示例:
这是一个特别的例子:
我一直是控制我的主目录的版本,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分支,而不是按文件分支。他们不理解两个分支的概念,这两个分支对于大多数文件是相同的,但仅在某些文件中有所不同。
当我试图跟踪两个分支时,我总是最终传播出必要的差异。
有些人建议使用Makefile。没吸引力。
我已经考虑过必要的改变基础转换,并不断变基础。但我不喜欢那么反驳。
更好的想法赞赏。
被子?
答案 0 :(得分:4)
在git中,您可以维护一个master
分支,其中包含所有公共文件(可能加上某些默认状态下的不同文件)和自定义分支,如work
或{{ 1}}。
如果要进行应传播到每台计算机的更改,请在cygwin
中执行此更改。如果你只想要工作/ cygwin机器,你可以在适当的分支机构中进行。
当您在已签出自定义分支的计算机上从master
提取新更改时,您只需从该分支机构master
或git merge master
您应该使用哪一个是优先选择,生成的工作目录是相同的,只有历史记录不同。使用git rebase master
,您将始终看到更新自定义分支的时间,其中包含merge
的更改。使用master
,看起来所有自定义都会从master的尖端分支出来,就好像你先在master中完成了所有操作,然后只提交了任何自定义。
不幸的是我不知道其他DVCS,因为我对它们没有任何经验,但是,我相信git的这个程序非常简单。