Git publi c subrepository - PullRequest
       2

Git publi c subrepository

0 голосов
/ 02 апреля 2020

У меня есть личный репозиторий git, в котором у меня есть собственный проект и некоторые сторонние проекты. Вот его грубая структура:

Root
|- My Project
|  |-- myproject
|      |-- __init__.py
|      |-- __main__.py
|  |-- tests
|  |-- setup.py
|- Project1
|- Project2

Однако, если я хочу записать это sh в репозиторий publi c, я не могу включить сторонние проекты. Поэтому мне нужно выложить sh мой проект в состояние, отличное от хранилища publi c.

До сих пор я думал о нескольких решениях, но у каждого из них есть свои недостатки:

  1. Использование ветки public, в которую я добавляю только свои собственные файлы кода. Затем я выполняю pu sh ветку public в репозитории publi c и ветку master в моем личном репо. Однако это решение приводит к тому, что publi c репозиторий содержит одну папку, а не выглядит как обычный Python проект (см., Например, numpy git repository ). Я хотел бы получить решение, в котором My Project в качестве каталога root для репозитория publi c.

  2. Извлечение ветви public, затем перемещение My Project в root и удаление всего остального. Однако при таком подходе я не уверен, как будет работать слияние из ветки master.

  3. Использование поддерева git. Тем не менее, это похоже на те же проблемы, что и при использовании отдельной ветви.

  4. Использование фактического под-репозитория путем запуска git init внутри MyProject. Это решает проблему репо root, но делает хранилище publi c по умолчанию, когда каталогом MyProject является CWD. Так что git (и любые модули управления версиями в инструментах разработки, которые я использую, использующие git, такие как VSCode), выполнят фиксацию и pu sh в хранилище publi c вместо частного. Я хочу, чтобы большая часть разработки была перенесена в частное репо только с периодическим (преднамеренным) pu sh в publi c репо.

  5. с использованием подмодуля. Однако, насколько я понимаю, подмодули предназначены для использования, когда вы хотите самостоятельно разработать часть своего репозитория, что является своего рода противоположностью того, чего я пытаюсь достичь (я хочу разработать свой репозиторий в целом и только изредка пу 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. Я, вероятно, могу сделать это легко, используя символические ссылки, но, возможно, есть лучший способ.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...