Можно ли сделать git-репо внутри другого git-репо - PullRequest
10 голосов
/ 22 августа 2011

У меня есть проект django, управляемый с помощью git.Я дерьмо толкаю его своему хозяину.Теперь я хочу иметь возможность перенести только один из каталогов (включая все вложенные каталоги) в другой git-репо.Как это возможно, если это вообще возможно?

Редактировать: Итак, я хочу, чтобы этот каталог был сам git-репо.

Ответы [ 3 ]

22 голосов
/ 22 августа 2011

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

git submodule add git://wherever/blah.git library-code
git commit -m "Added a new submodule called 'library-code'"

Когда вы переходите в подкаталог library-code, это как если бы родительский репозиторий не существовал - выможно изменить origin, чтобы использовать транспорт, который вы можете переместить, а затем нажать, как если бы он был полностью независимым.

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

git add library-code
git commit -m 'Change the submodule version'

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

Чтобы отделить этот подкаталог, сохранив историю, вам нужно будет клонировать свой исходный репозиторий и пользователя git filter-branch, чтобы переписать историю., как описано в этом ответе:

Затем вы можете перенести это во вновь созданный репозиторийGitHub репозиторий, вернитесь в исходный проект, удалите подкаталог и замените его подмодулем, как описано выше.

Если вы не очень хорошо знакомы с концепциями git, то это может быть затруднительно для вас - я рекомендуюзаранее читаем о подмодулях git.

1 голос
/ 22 августа 2011

Вы изучили подмодули git? Это позволяет git-репозиториям аккуратно вкладываться, но оставаться полностью независимыми.

Это означает, что вы можете иметь подкаталог с другим удаленным URL для push / pull и другим деревом коммитов + log, не загромождая основной проект.

https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial

1 голос
/ 22 августа 2011

Когда вы вносите изменения в конкретный каталог, вносите эти изменения, фиксируете и отправляете, вы фактически «проталкиваете» только этот каталог.

Если в другом репозитории Git есть только каталог, который вы хотите протолкнуть, и поэтому вы хотите, чтобы он сам по себе был репо, вы можете посмотреть Подмодули Git .

...