Git: включить часть проекта в другой проект

У меня довольно сложная ситуация: в одном проекте (git repo) у меня есть файл, а он мне нужен в другом проекте (другой репозиторий git). Есть ли какой-нибудь понятный и (насколько это возможно) простой способ вставить это в свой проект? Это выглядит так:

git-repo-1:
    lib/foo
    lib/ololo

git-repo-2:
    lib/*foo* (from repo-1)
    lib/bar
    lib/baz 

У меня вопрос: 1. Как мне это сделать? 2. Как я могу обновить файл (в т.ч. из git-repo-1) в моем репо (git-repo-2)?

p.s. Да, я видел много страниц о поддеревьях, но ... для меня это все еще не так ясно. Какие-либо предложения? Даже инструкция ;-) Я буду очень признателен за все.

UPD: Что хочу: http://git-scm.com/book/en/Git-Tools-Subtree-Merging НО! Я хочу, чтобы в репозиторий моего проекта была только часть «стоечного» репозитория.

Возникает вопрос: как выделить нужный мне файл из одного репо и слить его с другим?


person shootnix    schedule 20.09.2013    source источник
comment
Попробуйте использовать подмодули?   -  person F.X.    schedule 20.09.2013
comment
Я не могу понять как. Можешь мне помочь?   -  person shootnix    schedule 20.09.2013
comment
Просто используйте file:///path/to/your/git-repo-1 в качестве удаленного URL, это поможет. Немного погуглить, наверное, тоже поможет;)   -  person F.X.    schedule 20.09.2013
comment
Спасибо, но это не совсем то, что я хочу: частичное включение одного репо в другое или включение части одного репо в другое.   -  person shootnix    schedule 20.09.2013


Ответы (4)


извлеките lib / foo в новый проект под названием common.
затем включите полный общий проект в проект 1 и 2

person DerekC    schedule 07.10.2013
comment
Это правильный способ сделать это, поскольку он минимизирует накладные расходы на управление зависимостями. - person Biggsy; 19.07.2017

Я думаю, у вас есть два отдельных вопроса. Во-первых, как включить одно репо в другое (для чего предназначены функции модулей или поддеревьев). Второй - как использовать только ЧАСТЬ репозитория git.

Я не эксперт по git, но некоторые из них говорили, что на самом деле невозможно использовать только части репозитория - из-за того, как работает git, где много истории и изменений хранятся как "дельты" ( поэтому только те части файлов, которые изменились от одной версии к другой, хранятся в более новой версии ... или что-то в этом роде).

Итак ... Я думаю, что лучше всего вынести проект 2 в совершенно отдельный каталог, а затем скопировать только те файлы, которые вам нужны, в свой проект 1. (Или настроить какую-то символическую ссылку / псевдоним, чтобы вы не нужно их копировать).

person Jordan Lev    schedule 12.12.2013

Боюсь, вы не можете включить в свой только часть другого репозитория. Чтобы справиться с этой проблемой, у меня есть небольшой скрипт, который проверяет последнюю версию нужного мне файла в текущем рабочем каталоге. Если вы используете "git archive", вы можете получить последнюю версию из апстрима:

Например :

git archive --format=tar --remote ssh://git@gitserver:7999/infra/scripts.git HEAD supplier.csv | tar xf -


git add ./supplier.csv ;


git commit -m 'Update suppliers from upstream'
person Bvoid    schedule 25.06.2019

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

Вы можете выполнить нужную работу вручную или с помощью скрипта:

cp path/to/git-repo-1/lib/foo path/to/git-repo-2/lib/
git add .
git commit -a -m 'updated lib/foo'
person WebPal    schedule 20.09.2013
comment
К сожалению, это невозможно. - person shootnix; 20.09.2013