Я знаю, что если бы я использовал SVN, я бы просто держал весь каталог "~ / code /" в большом репозитории, но я понимаю, что это не очень хороший способ делать что-то с Git.
Причина, по которой git отговаривает людей от использования одиночных монолитных репозиториев, заключается в том, что вы не можете клонировать подкаталоги репозитория (как вы можете с SVN)и 15 ГБ.Если вам нужен только подкаталог этого кода, жестко - вы либо получите все 15 ГБ, либо ничего.
Для личного кода это действительно не проблема - у меня есть один «монолитный» репозиторий git, который20 МБ, и я могу с радостью сделать его клонированным на всех машинах, на которых я хочу его использовать.
Никто больше не использует его, никто не коммитит, и я редко делаю много в способе ветвления.На самом деле это просто необычная система с хорошей синхронизацией и удаленным резервным копированием (частный проект GitHub)
Я организовал это следующим образом:
В корневом уровне хранилища у меня естьпапка code
(вместе с папкой sites
, для web-dev - поэтому размер хранилища составляет 20 МБ)
В папке с кодом у меня есть папки на разных языках (python
,ruby
, c
и т. Д.)
В каждом языковом каталоге у меня есть две папки: snippets
и projects
.Внутри фрагментов находится куча файлов, внутри проектов - ряд папок.
Эти проекты - случайные вещи, которые я написал, но на самом деле они мало работают (игрушечные проекты: «Интересно, смогу ли я... "- проекты и т. д.)
Если это один файл Python, он помещается в code/python/snippets/
, если это более одного файла, он входит в code/python/projects/{project name}
Когда я хочупублично выпустить проект (обычно на Github), я создаю новый репозиторий, копирую в него код и синхронизирую его с Github.
Отдельный репозиторий «активный проект» теперь не связан с монолитным репо.Я изучил проект подмодуля, но он не предназначен для этого использования - он предназначен для упрощения клонирования зависимостей, а не для управления рядом несвязанных репозиториев
У меня есть скрипт, который использует Github API для автоматического клонированиявсе мои проекты локально, или обновите их git pull
- это просто автономная версия githubsync.py (я слил github.py в тот же файл).Его можно найти здесь как gist / 373731
Я использовал githubsync.py, чтобы изначально клонировать свои проекты на мой ноутбук и настольный компьютер, а также регулярно запускать его в Dropbox в качестве резервной копии.