GIT делит ресурс в нескольких репозиториях - PullRequest
1 голос
/ 04 июня 2019

В настоящее время у нас есть среда, в которой несколько репозиториев содержат одни и те же файлы, которые мы пытаемся «экспортировать», чтобы обновления файлов не заставляли нас обновлять каждый отдельный репозиторий.

Ниже приведен абстрактный макет желаемой настройки, у нас в основном есть папка «share», которая предоставляет пакет, который должен быть включен в другие проекты на удаленном компьютере.

local:
+---1
|       1.txt
+---2
|       2.txt
+---3
|       3.txt
\---share
    \---somepackage
            somefile.txt
remote:
+---1
|   |   1.txt
|   \---somepackage
|           somefile.txt
+---2
|   |   2.txt
|   \---somepackage
|           somefile.txt
\---3
    |   3.txt
    \---somepackage
            somefile.txt

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

Мы используем Windows в качестве среды разработки, но переданные репозитории будут использоваться linuxсистема, которая запускает каждый репозиторий, если это уместно.

Мы думали об использовании символических ссылок, но согласно этот пост SO жесткие ссылки не управляются git, а программные ссылки не будут иметьфункциональность, которую мы желаем.Пост довольно старый и относится к средам разработки Linux, поэтому мне любопытно, были ли какие-либо изменения в этом отношении и можно ли его применить к окнам.

Насколько мне известно, лучшим решением будетсоздать скрипт типа post-merge (, упомянутый в том же посте SO ), который извлекает файлы из-за пределов репо в репо и затем помещает их в удаленный репозиторий.Это сделало бы «предварительный толчок» хуком, если бы мне пришлось дать ему имя.

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

1 Ответ

0 голосов
/ 04 июня 2019

Обычное решение включает git submodule в сочетании с командой git submodule update --remote, выполняемой в каждом хранилище 1, 2, 3

Таким образом:

  • вы отправляете новые коммиты из репозитория shared в его репозиторий верхнего уровня
  • вы выполняете git submodule update --remote в каждом репозитории 1, 2, 3, затем добавляете, фиксируете и нажимаете.
  • любой клон из этих 1, 2, 3 репозиториев будет включать в себя последний общий коммит, как записано на предыдущем шаге, в подпапку shared (при условии, что общий ресурс содержит несколько пакетов, а не только somepackage).

Если вам нужно 1/somepackage вместо 1/shared/somepackage, вам нужно будет добавить символические ссылки в свои 1, 2, 3 репозитория (так как символические ссылки управляются правильно)

...