2010-08-10 5 views
2

У меня есть a repository, содержащий программное обеспечение в отрасли master и его начальная страница в отрасли gh-pages. Проект содержит каталог examples с исходными файлами, которые должны содержаться в ветке master. Домашняя страница должна содержать скомпилированные примеры и, возможно, исходные файлы. Как я могу поделиться примерами (которые зависят от ветви master для компиляции) между обеими ветвями? Нужный Последовательность действий:Как делиться отдельными файлами между несколькими ветвями в git

 
$ git checkout gh-pages; ls examples/ # directory is empty 
$ git checkout master; ls examples/ # directory contains .tex source files 
author.tex 
$ make examples && ls examples/  # compiles .tex files to .png files 
author.tex author.png 
$ $MAGIC_COMMIT_TO_BRANCH_SELECTED_FILES gh-pages author.png author.tex 
$ git checkout gh-pages; ls examples/ 
author.tex author.png 

Отделение gh-pages уже может содержать примеры так просто переход к этой ветви будут перезаписаны вновь скомпилированные файлы. Скомпилированные файлы не должны быть привязаны к ветви master. Я думал о создании другой ветки examples, но это не делает ее проще. Если god-подмодуль может указывать на определенные ветви (может они?), Я мог бы создать ветвь examples, которая используется в других ветвях как подмодуль. Перемещение примеров в другой репозиторий может работать, но я бы предпочел сохранить все в одном хранилище. Может быть, есть какой-то менеджер слияния или волшебство вишни?

+0

«переключение на эту ветвь перезаписывает вновь скомпилированные файлы»: нет, git откажется от переключения ветвей, поскольку это приведет к перезаписи этих файлов и, возможно, приведет к потере данных. – Cascabel

+0

Кроме того, вы просите что-то очень отличное от того, что у вас есть определенные файлы на двух ветвях (что было бы просто). Вы просите, чтобы одна ветка содержала скомпилированные версии файлов в другой ветке. – Cascabel

+0

Вы правы - исходные файлы должны быть на обеих ветвях (которые могут быть решены путем выбора вишни, если я правильно понимаю), но скомпилированные файлы должны быть созданы в одной ветке и переданы на другом. Цепь make, git-ls-files, copy-to-temp, switch branch, copy-from-temp, commit может решить мою проблему с помощью уродливого взлома. – Jakob

ответ

1

Я не думаю, что вы поняли, что такое контроль версий. По крайней мере, мне кажется, что вы используете ветви неправильно. Это грязный дизайн репозитория, который вызывает все ваши проблемы. Нет смысла иметь источник на двух ветвях, в то время как скомпилированные файлы должны быть созданы из одной ветви и переданы по другой, тогда вы можете также произвести и передать скомпилированные файлы в той же ветви, что и источник, из которого он был произведен.

Кажется, что вы используете ветви вместо использования отдельных репозиториев. Если вы компилируете код из какого-либо источника в одной ветви и фиксируете файлы на другой ветке, как вы знаете из версии WHAT источника, из которого она была скомпилирована?

Я не понимаю, почему вы не можете иметь источник И скомпилированные файлы в одной ветви, работать и компилировать, пока вы не закончите, а затем слейте изменения в мастер. Затем у вас есть исходные и скомпилированные файлы на двух ветвях, но что? :) Альтернативой является сохранение источника в одной ветви, работа над источником до тех пор, пока вы не «сделаете», не зафиксируете источник и не слейте изменения в мастер. Проверьте основную ветвь, скомпилируйте и зафиксируйте новые скомпилированные файлы.