Как сделать копию подпапки в отдельном хранилище в Git? - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующий репозиторий foo.git со следующими подпапками.

/foo
----/bar1
----/bar2

Я хочу создать новый отдельный репозиторий bar1.git вместе с его историей коммитов, с двумя копиями содержимого - в bar1.git и foo.git/bar1.

Кроме того, что было бы хорошим способом объединить обновленное содержимое bar1.git с foo.git/bar1 в более поздний момент времени с сохранением новой истории фиксации?

Мне известны команды subtree, submodule и filter-branch, но я не уверен, какая из них и как именно их использовать в моем случае.

1 Ответ

0 голосов
/ 08 января 2019

Решение с git-submodule выглядит следующим образом:

  1. Создать bar1.git хранилище
  2. Перейдите в локальный репозиторий foo и добавьте в него git-submodule с помощью команды:

    git submodule add -b master https://github.com/user/bar1.git bar1
    
  3. Обновить git-submodule с помощью команды:

    git submodule update --init --recursive --remote
    

    Используйте эту команду и после любого нового клона foo.

  4. Вы увидите .gitmodules файл с содержимым, похожим на:

    [submodule "bar1"]
    path = bar1
    url = https://github.com/user/bar1.git
    branch = master
    
  5. Зафиксируйте изменения в foo репозитории

  6. Если вы вносите какие-либо изменения в репозиторий bar1, вам необходимо синхронизировать его с вашим подмодулем foo\bar1. Это можно сделать с помощью набора команд:

    git pull
    git submodule update --init --recursive --remote
    git pull --recurse-submodules
    git submodule foreach "(git checkout master; git pull)"
    git add --all
    git commit -m "Submodule Sync"
    git push        
    

    Эта команда рекурсивно обновляет и синхронизирует ВСЕ подмодули в репозитории foo до последней ревизии в ветви master.

...