Форум программистов, компьютерный форум, киберфорум
Системы контроля версий
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Кодинг - это искусство...
64 / 64 / 42
Регистрация: 07.01.2013
Сообщений: 156
1
Git

Забрать/перенести все коммиты, относящиеся к определённому файлу/директории

11.01.2018, 09:44. Показов 1933. Ответов 4

Author24 — интернет-сервис помощи студентам
Доброго времени суток, форумчане

Дело было так:
Разрабатывался средненький по размеру проект, содержащий весьма приличное количество коммитов. Примерное дерево проекта на рисунке(спойлер):

Кликните здесь для просмотра всего текста
Забрать/перенести все коммиты, относящиеся к определённому файлу/директории


Каждая директория является подпроектом основного проекта (НЕ git-submodule), и каждым подпроектом занимались разные разработчики в разных ветках. Но все эти проекты были в одном репозитории. Так как каждый занимался своим, то при merge проблем не возникало. И выходит, что в репозитории получилась целая свалка коммитов, поочерёдно относящихся к разным подпроектам...

Теперь появилась задача выделить каждый из подпроектов в отдельные репозитории.

Один из этих подпроектов был очень небольшим (где-то 30-40 коммитов). Поэтому я решил поработать ручками:
  • просмотрел все коммиты, относящиеся к директории подпроекта (git log ./dir1);
  • сделал checkout к самому первому коммиту;
  • создал чистый репозиторий в директории нужного подпроекта и закоммитил исходный его вид;
  • сделал checkout к следующему коммиту в основном проекте;
  • закоммитил изменения в подпроекте с подстановкой даты и времени;
  • снова сделал checkout в основном проекте к следующему коммиту;
  • снова закоммитил изменения в подпроекте с подстановкой даты и времени;
  • повторял эти действия для всего списка коммитов, относящихся к подпроекту.

После чего успешно выгрузил этот подпроект в отдельный репозиторий и сделал его git-submodule.

Однако другие подпроекты весьма ёмки (несколько сотен коммитов) для того, чтобы маяться с ними подобным образом (вручную) .

Сам вопрос(наконец-то):
Можно ли перенести коммиты, относящиеся к определённому(-ой) файлу/директории из одного репозитория в другой средствами git?

Альтернативный вопрос №1:
Ну или, хотя бы, в другую ветку в пределах этого репозитория...?

Вопрос последней надежды:
В общем... Ну хоть как-то вырвать их из всего проекта с сохранением истории изменений только этих(-ой) файлов/директории НЕ вручную?

Заранее большое спасибо всем откликнувшимся !
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2018, 09:44
Ответы с готовыми решениями:

Как перенести коммиты из одной ветки в другую
Есть ветка А и ветка Б, из ветки А сделали ветку С и кинули туда несколько коммитов. Как эти комиты...

Переместить все коммиты с master в developer
У меня сейчас 66 комитов в master. Я создал ветку developer и сделал checkout. Как мне теперь...

В локальной ветве были комиты, но потом сделал check out с origin, в результате все локальные коммиты потерялись
Здравствуйте! С гитом знаком очень слабо, обычно работаю с меркуриалом. Суть в том, что сделал...

Разрешение доступа к определенному файлу в .htaccess
Здравствуйте. На сайте есть папка с некоторым функционалом. Необходимо заблокировать доступ ко всем...

4
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
11.01.2018, 09:55 2
Решение в лоб: можно написать скрипт, который прокрутит историю пошагово для общего репозитория, и запишет изменения в отдельных каталогах (если изменения есть, что можно определить по выводу git status) в отдельные же репозитории. См. параметр --git-dir.
1
Кодинг - это искусство...
64 / 64 / 42
Регистрация: 07.01.2013
Сообщений: 156
11.01.2018, 10:23  [ТС] 3
Ух, да тут уже рождается идея утилитки для решения подобной задачи .
Вариант весьма интересный, спасибо

Но пока подожду немного, вдруг кто еще знает какое-нибудь страшное заклинание для решения
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
11.01.2018, 10:33 4
Лучший ответ Сообщение было отмечено Sckrejjet как решение

Решение

Можете filter-branch попробовать: https://help.github.com/articl... epository/
1
Кодинг - это искусство...
64 / 64 / 42
Регистрация: 07.01.2013
Сообщений: 156
11.01.2018, 11:12  [ТС] 5
100 баллов Гриффиндору!

Круто, получилось, Вы волшебник! Спасибо огромное!
0
11.01.2018, 11:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2018, 11:12
Помогаю со студенческими работами здесь

Вывести в консоль все файлы и директории, какие есть в текущей директории
вывести в консоль все файлы и директории какие есть в текущей директории. подскажите пожалуйста...

Ssh команда, на выявление запросов к определённому файлу (с каких ip)
Доброго времени суток. Меня интересует ssh команды на выявление зловредов, на хостинге, для...

Как привязать файл .less к определенному файлу .css? (sublime)
Добрый день. Как сделать так, чтобы при редактировании определенного лесс файла менялся только...

Показать все Расширения в директории и суб директории.
надо Показать все Расширния в директории и суб директории вот только не знаю как зделать ( ...

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

Помогите отключить юзеров прицепившихся к определенному файлу в расшаренной папке
Надо одним махом отключать всех пользователей, прицепившихся к определенному файлу в расшаренной...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru