У меня есть личный репозиторий git, в котором у меня есть собственный проект и некоторые сторонние проекты. Вот его грубая структура:
Root
|- My Project
| |-- myproject
| |-- __init__.py
| |-- __main__.py
| |-- tests
| |-- setup.py
|- Project1
|- Project2
Однако, если я хочу записать это sh в репозиторий publi c, я не могу включить сторонние проекты. Поэтому мне нужно выложить sh мой проект в состояние, отличное от хранилища publi c.
До сих пор я думал о нескольких решениях, но у каждого из них есть свои недостатки:
Использование ветки public
, в которую я добавляю только свои собственные файлы кода. Затем я выполняю pu sh ветку public
в репозитории publi c и ветку master
в моем личном репо. Однако это решение приводит к тому, что publi c репозиторий содержит одну папку, а не выглядит как обычный Python проект (см., Например, numpy git repository ). Я хотел бы получить решение, в котором My Project
в качестве каталога root для репозитория publi c.
Извлечение ветви public
, затем перемещение My Project
в root и удаление всего остального. Однако при таком подходе я не уверен, как будет работать слияние из ветки master
.
Использование поддерева git. Тем не менее, это похоже на те же проблемы, что и при использовании отдельной ветви.
Использование фактического под-репозитория путем запуска git init
внутри MyProject
. Это решает проблему репо root, но делает хранилище publi c по умолчанию, когда каталогом MyProject
является CWD. Так что git
(и любые модули управления версиями в инструментах разработки, которые я использую, использующие git, такие как VSCode), выполнят фиксацию и pu sh в хранилище publi c вместо частного. Я хочу, чтобы большая часть разработки была перенесена в частное репо только с периодическим (преднамеренным) pu sh в publi c репо.
с использованием подмодуля. Однако, насколько я понимаю, подмодули предназначены для использования, когда вы хотите самостоятельно разработать часть своего репозитория, что является своего рода противоположностью того, чего я пытаюсь достичь (я хочу разработать свой репозиторий в целом и только изредка пу sh часть его в републику c репо). Кроме того, субмодуль потребует специальной обработки c при последующем клонировании частного репо. Наконец, я читал, что подмодули редко бывают хорошей идеей (см., Например, первое предложение https://www.atlassian.com/git/tutorials/git-subtree).
Есть ли решение, которое будет позвольте мне подключить мой локальный репозиторий к 2 удаленным (частный и общедоступный c), так что:
- репо publi c будет содержать только мой собственный код из
My Project
; - Публичное хранилище c будет иметь корень в
My Project
; - Любая разработка, которую я делаю, будет по умолчанию добавлена, зафиксирована и отправлена в частный репозиторий (например, если используются точные команды
git add -A; git commit -m "msg"; git push
); - Клонирование частного репо с
git clone path-to-remote-private-repo
приведет к клонированию всего проекта (включая содержимое My Project
); - Я смогу плавно объединить изменения в код из
My Project
в дистрибутив publi c; - (опционально). Я буду в состоянии добавлять для каждого файла определенные файлы из
Project1
и Project2
как дополнительные файлы в дистрибутив publi c. Я, вероятно, могу сделать это легко, используя символические ссылки, но, возможно, есть лучший способ.