Извлечь часть репозитория git? - PullRequest
32 голосов
/ 29 марта 2010

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

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

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

Ответы [ 2 ]

37 голосов
/ 29 марта 2010

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

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

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

в клоне хранилища.

1 голос
/ 28 июня 2011

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

Итак, в основном я создал новую ветку, удалил ненужные вещи в этой ветви, а затем использовал 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

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

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

...