КРАТКИЙ ОБЗОР:
Я хочу, чтобы два (или более )«потока разработки» / среды отслеживали друг друга, отправляя изменения друг другу в обоих направлениях, не сходясь полностью -, сохраняя при этом определенные ключевые, существенные различия?
ДЕТАЛЬ, ОДИН КОНКРЕТНЫЙ ПРИМЕР:
Вот один конкретный пример:
Я управлял версиями моего домашнего каталога, 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 -дома, а на работе ~/LOG — это символическая ссылка на что-то вроде ~/work/LOG.dir/LOG.work.
Причина :в том, что все проприетарное должно оставаться в работе. ~/work — это отдельный репозиторий, ~/work/.hg, который НЕ загружается/извлекается или иным образом не синхронизируется с моим персональным компьютером (s ).
Проблема :Я хочу, чтобы эти символические ссылки (и несколько других файлов )отличались друг от друга. Но я хочу синхронизировать все остальные файлы. Я вношу изменения в свою среду в обоих местах.Если я внесу изменения в свой ~/.emacs на работе, я хочу отправить его домой, и наоборот.
Q :как это сделать удобнее всего?
В старые добрые времена я бы использовал обычный репозиторий, скажем, обычный репозиторий CVS. CVS не обрабатывает символические ссылки, но, скажем, у меня был скрипт, который генерировал символические ссылки из шаблона, хранящегося в CVS. Я бы сделал так, чтобы шаблон символической ссылки для ~/LOG имел разные ветки для моего ноутбука cygwin -и для работы. Я бы создал рабочие пространства, в которых большинство файлов указывало бы на одну и ту же ветку соответствующих репозиториев RCS/CVS, в то время как файлы, отличающиеся между cygwin -linux и work, должны были бы выгружать соответствующие ветки в соответствующие рабочие пространства.
Это сработало, хотя поддерживать его было немного больно.
Я не нашел хорошего способа сделать это с современными DVCS, такими как Mercurial (, Got или Bzr ).
Эти современные инструменты DVCS выполняют ветвление всего -репо, а не ветвление по -файлу. Они не понимают понятия двух ветвей, идентичных для большинства файлов, но различающихся только определенными файлами.
Когда я пытаюсь отслеживать две ветки, я всегда получаю распространение существенных различий.
Некоторые предложили Makefiles. Не привлекательный.
Я подумал о том, чтобы внести существенные изменения в базовые обороты и постоянно перебазировать. Но я не очень люблю перебазировать.
Лучшие идеи приветствуются.
Одеяло?