Подтвердить что ты не робот

Извлечь часть репозитория git?

Предположим, что мой репозиторий git имеет следующую структуру:

/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2

и в репозитории есть несколько коммитов. Теперь один из подпроектов (SubProject-0) становится довольно большим, и я хочу взять SubProject-0 и настроить его как автономный проект. Можно ли извлечь всю историю фиксации с помощью SubProject-0 из родительского репозитория git и перенести его на новый?

4b9b3361

Ответ 1

См. http://git-scm.com/docs/git-filter-branch

Я думаю, вам нужно что-то вроде

git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all

в клоне репозитория.

Ответ 2

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

Итак, в основном, я создал новую ветку, удалил ненужный материал в этой ветке, а затем использовал git fetch, чтобы вытащить ветку с одного репо на другой. Как только у меня были объекты, слияние сделало трюк.

например.

В репозитории, в котором есть оригинальные материалы:

    git checkout -b temp master
    git rm -r Unneeded_stuff
    git commit -m 'pruning'

Затем вы можете извлечь эту ветку из одного хранилища в совершенно другую (не связанную):

    cd /path/to/other/repository
    git fetch /path/to/source/repo temp:temp

где temp: temp означает "выборка temp на источнике и сохранение здесь как temp здесь". Оттуда вы можете объединить результат с вашим хозяином.

    git merge temp

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

Я уверен, что эти шаги могут быть сжаты немного, но этот набор кажется приятным и понятным.