2009-05-11 5 views
4

У меня есть репозиторий, содержащий контент & Исходные файлы. Разработчики должны работать только с исходными файлами. Чтобы сэкономить место, разработчики не должны клонировать файлы содержимого (которые находятся в ГБ) в локальное репо. Исходные файлы отсутствуют в проекте в качестве подмодулей, а они находятся в том же месте, где находится содержимое.Слияние только измененных файлов с использованием Git

Мой подход, как это - я создал филиал Источник от Master, а затем удаляются файлы содержимого из этой ветви. И я опубликовал ту же ветку для клонирования для разработчиков.

Как я слияния изменений из Источник филиала обратно в Master файлы содержимого становятся удалены в Master. Как его ограничить? И если это невозможно, то есть ли способ достичь моего требования иметь отдельный ветвь/клон, имеющий только отфильтрованные файлы, то есть исходные файлы в нем?

ответ

1

Использование git-merge объединить две ветви, а затем git-revert удалить коммита, что удаленные файлы содержимого.

% git checkout Master 
% git merge Source 
% git revert <content-removal-commit-id> 

Или вы могли бы сделать это с точностью до наоборот, и удалить содержимое удаляющий совершить, прежде чем вы сливаться в Master. Это немного сложнее, но это может привести к тому, что ваша история мастера станет немного чище.

% git checkout Source 
% git branch SourceMerge 
% git checkout SourceMerge 
% git revert <content-removal-commit-id> 
% git checkout Master 
% git merge SourceMerge 
2

Вы не должны удалять файлы из ветки Source вообще. Если Source и Master - это только ветки в том же хранилище, ваши разработчики будут иметь контент в любом случае; нет никакого вреда в том, чтобы он лежал.

+0

Тип файлов содержимого: flv, wmv, pdf, doc, размер которых превышает 200 ГБ. Это приведет к огромным накладным расходам в сети во время удаленного клонирования, поскольку это команда по разработке кросс-локации. И я думаю, что это будет узким местом производительности для Git, а также для сканирования такого огромного количества файлов, чтобы обнаружить изменения в некоторых исходных файлах. – kaychaks

+0

«Вы думаете»? Итак, вы попали в действие, не проверив, действительно ли это проблема? Duh. 1) Моя точка зрения по-прежнему стоит: если Source и Master являются ветвями в репозитории _same_, они будут клонированы к машинам разработчиков в любом случае. 2) Как часто вы планируете клонирование полных репозиториев? 3) Git сначала использует время модификации файлов; только если они отличаются, содержимое проверяется. Здесь нет потерь. 4) Пусть ваша удаленная команда клонирует репозиторий один раз, а затем пусть люди там клонируют этот репозиторий. Проще простого. – Bombe

5

Очевидным ответом является то, что у вас должно быть отдельные репозитории исходного кода и контента. Или просто оставите контент.

+0

Рамка приложения не позволяет отделять исходные файлы от содержимого. Могу ли я использовать Git для создания отдельных репозиториев с использованием шаблонов файлов (например, .java, .groovy и т. Д. Для исходных файлов и отдыха для контента) из того же источника? – kaychaks

+0

+1 Согласен.В моем собственном проекте CMS у меня есть корневой проект, который содержит код, тестовый проект, который содержит небольшие примеры файлов данных для тестирования и проект контента, который является главным и содержит только конфигурацию и контент. –

+1

@kaychaks: Получить исходный код для платформы приложения и исправить ошибку. Если вы не можете получить источник, напишите отчет об ошибке. –

0

Вы уверены, что хотите включить эти медиа/документы в свой репо? Вы хотите отслеживать изменения медиа-библиотеки 200 ГБ?

Если вы разместите ссылку на dir-ссылку своего владельца в файле .gitignore, когда вы находитесь в своей ветви источника, git будет игнорировать эти файлы, поэтому они не будут касаться/удалять их.

http://git-scm.com/docs/gitignore

+0

Он будет игнорировать их только в том случае, если они не отслеживаются, и я думаю, что это не так. – Bombe

Смежные вопросы