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

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

14.03.2016, 17:32. Показов 9518. Ответов 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
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 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
Просмотров: 90

Размер: 24.7 Кб

Как там отмечено, сейчас появилась фича subtree, с помощью которой это тоже можно выполнить.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
15.03.2016, 02:09  [ТС]
Спасибо. Это что, самый простой способ? Пилец…
А где-то в нете есть достаточно обширный справоюник по Гиту на русском? А то везде только в основном стандартные частые возможности рассматриваются.
0
Эксперт .NET
 Аватар для Rius
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 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
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
15.03.2016, 13:00
Смысл такой: есть основной рабочая копия, к ней подключаем репозиторий другой рабочей копии, выкачиваем из другого нужную ветку и даём ей новое имя, объединяем нужную ветку основной рабочей копии и новую ветку из другой.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
15.03.2016, 13:48  [ТС]
Но мне нужно не отдельную ветку другого репозитория прикрепить, а всю историю всех его веток.
У меня так получилось, что две части одного проекта в двух разных репозиториях были, теперь нужно всё это слить в один репозиторий.
0
Эксперт .NET
 Аватар для Rius
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
15.03.2016, 13:54
Получите один последний коммит, в нём будет история всех предыдущих. Его ветку и подключите.
Если слияние на самом деле окажется не нужно, просто не делайте merge.

Цитата Сообщение от Андрей Петрович Посмотреть сообщение
Теперь сайт и админку в один движок хочу слить
- это значит слить конкретные ветки.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
15.03.2016, 14:13  [ТС]
Хорошо, скажу по-другому, мне нужно объединить два репозитория, а не просто основные ветки сайта и админки. Т. е. будет один коммит у них общий в месте слияния их основных веток, но должна сохраниться и вся предыдущая история ветвления до слияния. И это всё локально. Как указать Гиту локальные пути до репозиториев? Какой синтаксис? Как ни пробовал, выдаёт ошибки.
0
Эксперт .NET
 Аватар для Rius
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 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
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 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
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
16.03.2016, 18:49
Видеоурокответ специально для Вас


В папке верхнего уровня придётся создать рабочую копию. Хотя бы с одним коммитом.
Либо решите, какой из тех репозиториев важнее. Алгоритм будет тот же.
0
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 117
16.03.2016, 19:16  [ТС]
Спасибо, конечно, но ничего не разобрать, если не знать команды. Вы бы не могли перезалить с разрешением экрана или переснять с крупнейшим раза в 4 шрифтом? Можно даже просто снимки экрана для каждого шага сделать, но с таким же разрешением как у экрана. Мне жаль, что вы постарались для меня, а получилось не всё гладко.
0
Эксперт .NET
 Аватар для Rius
13235 / 7730 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru