2013-10-26 3 views
-1

Я ищу советы или предупреждения о слиянии трех репозиториев Git. Мне нужно сохранить историю фиксации и все ветви.Замена трех репозиториев Git на один родительский репозиторий

Я исследовал this question и this question, и кажется, что «ГИТ-поддерево» команда сделала бы то, что я хочу, но, похоже, что команда была удалена или что-то (комментарии, кажется, конфликтовать по этому вопросу проблема.) Существует команда «git поддерево», но я не уверен, что она делает, а документация довольно тонкая.

У меня есть три репозитория Git, каждый из которых содержит проект Maven. Файлы и хранилищами не перекрываются вообще (ни один проект не является Git подмодуль любого другого, например.) Они совершенно отдельно для кода B и C, который ссылается на А, за исключением:

ProjectA.git 
    pom.xml 
    /src/.... 

ProjectB.git 
    pom.xml 
    /src/... 

ProjectC.git 
    pom.xml 
    /src/... 

I Would хотел бы объединить их в один «Родитель» репозиторий:

Parent.git 
    /ProjectA 
     pom.xml 
     /src/... 
    /ProjectB 
     pom.xml 
     /src/... 
    /ProjectC 
     pom.xml 
     /src/... 

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

Каков самый простой и надежный способ сделать это? Есть ли способ получить доступ к команде git-subtree (я запускаю Windows 7 с помощью Git 1.8.0) или способ сделать это слияние без этой команды?

ответ

2

Я думаю, что git subtree может быть излишним для этого прецедента, потому что вы хотите просто необратимо объединить хранилища.

Во-первых, в каждом существующем репозитории создайте соответствующий подкаталог проекта (projectA или что-то еще) и переместите в него существующие файлы и каталоги с помощью git mv. Зафиксируйте эти изменения. Затем поочередно проверяйте каждую ветвь и повторяйте этот процесс для каждой ветви.

Затем используйте git remote add, , а затем git merge для каждой пары одинаково названных ветвей в каждой паре репозиториев. Если в любом из репозиториев есть какие-либо ветви с уникальным именем, вам необходимо объединить их с master (используя стратегию слияния или -s theirs в зависимости от того, сходите ли вы от или из них). В противном случае они будут очень странными, потому что у них не будет 2/3rds проекта (но, возможно, это не имеет особого значения, поскольку остальные 2/3rds все равно будут находиться в других ветвях).

Поскольку конфликтов в настоящее время не будет, это должно просто работать и сохранять всю вашу историю. Но я не пробовал это, поэтому не удаляйте старые хранилища какое-то время, на случай, если это пойдет не так!

+0

Спасибо, я попробую это (и сохранить резервные копии всего). – user1071914

+0

Отметьте ответ правильно! – MariuszS

+0

Еще не пробовал! – user1071914

0

О чем вы говорите? Вы запускаете git-поддерево, набрав git subtree, как описано в примере кода вашего первого вопроса.

+0

Да, подкоманды git помечены как «git-commandname» на страницах man, потому что именам man-страниц не разрешено иметь пробелы, вот и все. Однако, я думаю, команда 'git поддерева 'может быть излишней для этого варианта использования. –

+0

Замечания по первому вопросу по-разному говорят о том, что «git-поддерево» было (1) прекращено (2) включено в Git и (3) прекращено, но все еще не включено в Git. Я действительно не знал, во что верить, если кто-нибудь из них.Кроме того, существует по меньшей мере три совершенно разных «ответа» на этот вопрос. Какой из них я должен выбрать? Имейте в виду, что повреждение репозитория исходного кода вашей компании может заставить вас уволить, поэтому я так осторожен. : -D – user1071914

+0

@ user1071914 относительно последней точки, очевидно, сделал бы резервные копии - так как это такая глубокая операция, в этом случае 'git clone' offline - и проверьте внимательно. – djechlin

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