Как я могу переместить один каталог из репозитория git в новый, сохранив историю?

StackOverflow https://stackoverflow.com/questions/811251

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Я мог бы клонировать репозиторий для каждого проекта и каждый раз удалять все другие проекты, но есть ли лучший способ избежать клонированной истории в каждом новом репозитории проекта?

Это было полезно?

Решение

Вы можете использовать ветку git filter переписать историю проекта. Из документации:

  

Переписать репозиторий, чтобы он выглядел как   если foodir / был корнем проекта,   и откажитесь от всей другой истории:

git filter-branch --subdirectory-filter foodir -- --all

Сделайте несколько копий репо, сделайте это для каждого подкаталога, который вы хотите выделить, и вы должны получить то, что ищете.

Другие советы

Чтобы экспортировать папку как новый репозиторий, вам нужно:

<Ол>
  • Чтобы клонировать репозиторий, в котором находится папка, которую вы хотите экспортировать.
  • Чтобы создать пустой репозиторий на вашем хостинг-провайдере как GitHub, чтобы сохранить экспортированную папку.
  • Откройте клонированную папку репозитория и выполните эту команду:

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
    
  • Суть git в том, что история включается в каждый коммит путем хеширования родительского коммита. Вы могли бы "повторить" коммиты (именно так работает svn-импортер) в новый репозиторий с сохранением только каждого подпроекта. Это, однако, разрушило бы значение хэшей коммитов. Если у вас нет проблем с этим, пусть будет так.

    В прошлом я просто клонировал его и пошел дальше. Это делает вещи больше, но дисковое пространство дешевое; мое время дорого.

    Я также не знаю каких-либо инструментов для склейки каталога. Я полагаю, что вы можете выполнить git-log в каталоге, чтобы найти все коммиты в нем, а затем воспроизвести коммиты с помощью чего-то вроде git-fast-export?

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top