Как я могу поделиться отдельными файлами между несколькими ветками в Git - PullRequest
3 голосов
/ 11 августа 2010

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

$ 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, но на самом деле это не облегчает. Если подмодуль git может указывать на определенные ветви (могут они?), Я мог бы создать ветку examples, которая используется в других ветвях как подмодуль. Перенос примеров в другое хранилище может сработать, но я бы предпочел хранить все в одном хранилище. Может быть, есть какой-нибудь менеджер слияний или волшебство сбора вишни?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

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

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

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

0 голосов
/ 07 апреля 2018

Я бы создал одну ветку, чтобы включить все эти общие файлы. Всякий раз, когда ветке нужен общий файл, он может получить его, используя

git checkout workingbranch
git checkout sharedbranch <needed file>

Позже вы можете обновить, просто используя ту же команду

git checkout sharedbranch <needed file>
...