Форум программистов, компьютерный форум, киберфорум
Git
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117

Как слить два локальных репозитория?

14.03.2016, 17:32. Показов 9399. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Есть два репозитория на локальном компьютере. Как их слить в один с сохранением истории каждого? Т. е., чтобы получились две ветки, которые потом сливаются в одну.

Делал отдельно сайт и админскую часть. Т. е. было два репозитория. Никаких удалённых репозиториев нет, только локальные. Теперь сайт и админку в один движок хочу слить, соответственно и репозиторий правильнее будет вести один. Нужно текущие соединить в один и далее вести только его, но с сохранением истории текущих как бы в двух отдельных ветках-предках.

Важно: речь идёт именно о локальных репозиториях.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2016, 17:32
Ответы с готовыми решениями:

Как слить два кода с++ в один
Народ прошу помощи Как слить две части кода в одно целое До меня недоходит как тут что скрестить можно 1часть кода #include...

Как слить два DataTable'а в один?
Задача следующая: Имеется датасет с двумя таблицами (parent и child с релэйшионом по ключу) необходимо сделать одну таблицу с определённым...

Как слить два запроса в один?
Здравствуйте. Есть две таблицы. :wall: Ну кто придумал кнопкой enter постить сообщения на форум Щас допишу вопрос.... Добавлено...

16
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
14.03.2016, 20:26
Probably the simplest way would be to pull the XXX stuff into a branch in YYY and then merge it into master:

In YYY:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
git remote add other /path/to/XXX
git fetch other
git checkout -b ZZZ other/master
mkdir ZZZ
git mv stuff ZZZ/stuff             # as necessary
git commit -m "Moved stuff to ZZZ"
git checkout master                
git merge ZZZ                      # should add ZZZ/ to master
git commit
git remote rm other
git branch -d ZZZ                  # to get rid of the extra branch before pushing
git push                           # if you have a remote, that is
I actually just tried this with a couple of my repos and it works. Unlike Jörg's answer it won't let you continue to use the other repo, but I don't think you specified that anyway.

Note: Since this was originally written in 2009, git has added the subtree merge mentioned in the answer below. I would probably use that method today, although of course this method does still work.
Отсюда: http://stackoverflow.com/quest... to-another

Получается вот такое:
Название: Clip2net_160314222832.png
Просмотров: 88

Размер: 24.7 Кб

Как там отмечено, сейчас появилась фича subtree, с помощью которой это тоже можно выполнить.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
15.03.2016, 02:09  [ТС]
Спасибо. Это что, самый простой способ? Пилец…
А где-то в нете есть достаточно обширный справоюник по Гиту на русском? А то везде только в основном стандартные частые возможности рассматриваются.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
15.03.2016, 06:02
Это первый способ. 12 команд сложно? Пипец...
Самый просто, возможно, это через subtree.
Справочник - книга Pro Git.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
15.03.2016, 12:46  [ТС]
С командами по отдельности я разобраться могу, а с логикой действий в цепочке пока проблемы. Не могли бы вы кратенько описать логику, что там и для чего происходит? Справочник этот ещё до́ просмотрел, но так и не нашёл, как обращаться именно с локальными репозиториями, как их локальные пути прописывать.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
15.03.2016, 13:00
Смысл такой: есть основной рабочая копия, к ней подключаем репозиторий другой рабочей копии, выкачиваем из другого нужную ветку и даём ей новое имя, объединяем нужную ветку основной рабочей копии и новую ветку из другой.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
15.03.2016, 13:48  [ТС]
Но мне нужно не отдельную ветку другого репозитория прикрепить, а всю историю всех его веток.
У меня так получилось, что две части одного проекта в двух разных репозиториях были, теперь нужно всё это слить в один репозиторий.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
15.03.2016, 13:54
Получите один последний коммит, в нём будет история всех предыдущих. Его ветку и подключите.
Если слияние на самом деле окажется не нужно, просто не делайте merge.

Цитата Сообщение от Андрей Петрович Посмотреть сообщение
Теперь сайт и админку в один движок хочу слить
- это значит слить конкретные ветки.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
15.03.2016, 14:13  [ТС]
Хорошо, скажу по-другому, мне нужно объединить два репозитория, а не просто основные ветки сайта и админки. Т. е. будет один коммит у них общий в месте слияния их основных веток, но должна сохраниться и вся предыдущая история ветвления до слияния. И это всё локально. Как указать Гиту локальные пути до репозиториев? Какой синтаксис? Как ни пробовал, выдаёт ошибки.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
15.03.2016, 14:19
Цитата Сообщение от Андрей Петрович Посмотреть сообщение
Т. е. будет один коммит у них общий в месте слияния их основных веток, но должна сохраниться и вся предыдущая история ветвления до слияния.
Она сохранится. Это же git.

Bash
1
$ git remote add secondary /c/Work/Projects/other-project-work-copy
Добавлено через 23 секунды
И не забывайте делать бэкапы перед такими махинациями.
1
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
16.03.2016, 13:38  [ТС]
Появилась проблемка с командой git mv stuff_REP_2 podpapka_2/stuff_REP_2.

Я пробую так:
cd e:/papka_proekta
git remote add -f podpapka_2 /f/papka_proekta/podpapka_2
mkdir podpapka_2
…???

У меня куча файлов, как их все сразу перенести в отдельную папку podpapka_2?
Можно ли как-то сразу стянуть удалённый репозиторий в podpapka_2, без транзита через papka_proekta?

Ещё раз моя ситуация:

//существующее состояние
papka_proekta
—podpapka_1
—podpapka_2
//отдельный репозиторий в этой папке, назовём REP_2
—podpapka_3 //отдельный репозиторий в этой папке, назовём REP_3
—fajl_1
—fajl_2


//необходимое состояние
papka_proekta//единый общий репозиторий проекта
—podpapka_1
—podpapka_2
—podpapka_3
—fajl_1
—fajl_2


И ещё, я так понял, что в самом первом вашем примере некоторые команды для меня лишние.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
16.03.2016, 17:49
Это не мой пример. Это пример к той ситуации, что поставлена в вопросе по указанной ссылке.

Цитата Сообщение от Андрей Петрович Посмотреть сообщение
//существующее состояние
papka_proekta
- вот здесь репозитория нет? Только в папке 2 и 3?
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
16.03.2016, 18:23  [ТС]
Да, всё именно так, как я указал, никак иначе.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
16.03.2016, 18:49
Видеоурокответ специально для Вас


В папке верхнего уровня придётся создать рабочую копию. Хотя бы с одним коммитом.
Либо решите, какой из тех репозиториев важнее. Алгоритм будет тот же.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
16.03.2016, 19:16  [ТС]
Спасибо, конечно, но ничего не разобрать, если не знать команды. Вы бы не могли перезалить с разрешением экрана или переснять с крупнейшим раза в 4 шрифтом? Можно даже просто снимки экрана для каждого шага сделать, но с таким же разрешением как у экрана. Мне жаль, что вы постарались для меня, а получилось не всё гладко.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,265
Записей в блоге: 14
16.03.2016, 19:19
Там надо качество 720p или 1080p поставить в настройках.
Лучше скачайте видеофайл с Youtube и посмотрите через более удобный плеер.

Добавлено через 1 минуту
История команд:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
git status 
git remote add rep2 ./subdir_2
git remote add rep3 ./subdir_3
git fetch rep2
git fetch rep3
git checkout -b rep2-master rep2/master
git checkout -b rep3-master rep3/master
git checkout master
 
# здесь я удалил старые каталоги через Проводник
 
git checkout rep2-master
mkdir subdir_2
git mv subdir_2_file_* ./subdir_2/
git commit -m "files moved to subdir_2"
git checkout rep3-master 
mkdir subdir_3
git mv subdir_3_file_* ./subdir_3/
git commit -m "files moved to subdir_3"
git checkout master
git merge rep2-master -m "merged rep2"
git merge rep3-master -m "merged rep3"
1
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
17.03.2016, 04:43  [ТС]
Там максимальное 720 и его не хватает, интерполяция из разрешения экрана всё размыла. Буду читать код. А видео вы сделайте в 1024, я нигде про слияние локальных репозиториев не нашол. Думаю, не только мне пригодится. Как разберусь со своим вопросом, выложу окончательное решение.

Добавлено через 9 часов 15 минут
Окончательное решение задачи у меня получилось такое.

//начальное состояние
papka_proekta
—podpapka_1
——fajl_a
——fajl_b
——fajl_v
—podpapka_2
——.git
//отдельный репозиторий в этой папке, назовём REP_2
——fajl_a
——fajl_b
——fajl_v
—podpapka_3
——.git //
отдельный репозиторий в этой папке, назовём REP_3
——fajl_a
——fajl_b
——fajl_v
—fajl_1
—fajl_2


Далее не в Гите, а Тоталом файлы репозиториев поместил в единственные папки, т. е. привёл к тому виду, в котором они должны быть в конечном результате, и закоммитил всё это для каждого репозитория.

papka_proekta
—podpapka_1
——fajl_a
——fajl_b
——fajl_v
—podpapka_2
——.git
//REP_2
——podpapka_2
———fajl_a
———fajl_b
———fajl_v
—podpapka_3
——.git
//REP_3
——podpapka_3
———fajl_a
———fajl_b
———fajl_v
—fajl_1
—fajl_2



Тоталом создал папку для слитого проекта и поместил туда все новые файлы и папки, которые уже не попали в существующие репозитории. Инициализировал новый репозиторий [REP_DLYA_SLITIYA] для слияния двух существующих и сделал первый коммит.

papka_slitigo_proekta
—.git
//REP_DLYA_SLITIYA
—podpapka_1
——fajl_a
——fajl_b
——fajl_v
—fajl_1
—fajl_2



Теперь дело только за Гитом.

Bash
1
2
3
4
5
6
7
git remote add -f REP_2 /e/www/papka_proekta/podpapka_2
git remote add -f REP_3 /e/www/papka_proekta/podpapka_3
git checkout -b REP_2 REP_2/master
git checkout -b REP_3 REP_3/master
git checkout master //REP_DLYA_SLITIYA
git merge REP_2 -m "Прицепляем REP_2"
git merge REP_3 -m "Прицепляем REP_3"

Результат.

papka_slitigo_proekta
—.git
//REP_DLYA_SLITIYA, единый общий репозиторий проекта
—podpapka_1
——fajl_a
——fajl_b
——fajl_v
—podpapka_2
——fajl_a
——fajl_b
——fajl_v
—podpapka_3
——fajl_a
——fajl_b
——fajl_v
—fajl_1
—fajl_2



Всё, теперь два проекта стали одним с сохранением истории в отдельных ветках.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2016, 04:43
Помогаю со студенческими работами здесь

Как слить вместе два текстовых файла?
Есть два тхт в которых есть строки, пример такой в первом im1,im2,im3 во втором in1,in2,in3,in4 результат должен быть таким и должен...

Как слить два упорядоченных массива в один?
Есть два упорядоченных по возрастанию массива. Нужно создать из них третий, чтобы в нем все значения тоже были упорядочены. Ключевой...

Как слить воедино два приложения Windows Forms?
Делаем вдвоем одну программу. Начало положил проекту я и далее проект делал мой напарник.(он занимался работой с другими формами) ...

как соединить два локальных диска
как мне соединить два локальных диска?

Слить два массива в третий
Добрый день! Помогите написать часть программы на встроенном asm,а именно произвести слияние двух массивов в третий(т.е. по коду это str...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru