2010-04-17 3 views
5

У меня есть большая коллекция моих личных сценариев, которые я бы хотел начать с помощью Git. Я ранее организовал свой код следующим образом:Что такое хороший способ организовать большую коллекцию личных скриптов с помощью git?

~/code/python/projects/ (for large stuff, each project contained in an individual folder) 
~/code/python/scripts/ (single file scripts all contained in this directory) 
~/code/python/sandbox/ (my testing area) 
~/code/python/docs/ (downloaded documentation) 

~/code/java/... (as above) 

Теперь я собираюсь начать версионности моего кода, используя мерзавец, так что я могу иметь историю и резервное копирование все мой код на удаленный сервер.

Я знаю, что если бы я использовал SVN, я бы просто сохранил весь свой каталог «~/code/» в большом репозитории, но я понимаю, что это не очень хороший способ сделать что-то с Git.
Основная информация, которую я видел в Интернете, предлагает сохранить все папки моего проекта в одном месте (как и в отдельных каталогах для python или java) с каждым проектом, содержащим его собственный репозиторий git, и просто иметь каталог «snippets», содержащий все однофайловые скрипты/эксперименты, которые позже могут быть преобразованы в проекты.

Но я не уверен, как я отношусь к консолидации всех моих кодовых каталогов в одну область. Есть ли хороший способ сохранить отдельные каталоги кода без изменений, или это не стоит усилий? Может быть, я просто привязан к отдельным каталогам кода, потому что я никогда не знал ничего другого ...

Также (в качестве примечания) я хотел бы быстро просмотреть хронологическую историю всех моих проектов и сценариев. Поэтому я вижу, какие проекты я создал совсем недавно. Я делал это, сохраняя номер в начале всех моих проектов, 002project, 003project.
Есть ли автоматический или простой способ сделать это в git без необходимости добавлять число ко всем названиям проектов?

Я открыт для любых советов по организации практического или философского кода, которые у вас есть. Благодаря!!!

ответ

5

Я знаю, что если бы я использовал SVN, я бы просто держать мой весь «/ ~/код» каталог в большом хранилище, но я понимаю й это не лучший способ сделать что-то с Git.

Причина мерзавец отговорить людей от одно-, монолитные репозиториев вы не можете клонировать подкаталоги репозитория (например, вы можете с SVN)

Скажем, у вас есть git://blah/somecorp_code.git, который имеет миллионы изменений, и 15GB , Если вам просто нужен поддиректорий этого кода, жестко - вы либо получаете все 15 ГБ, либо ничего.

Для личного кода это действительно не проблема. У меня есть один «монолитный» репозиторий git, который составляет около 20 МБ, и я могу с радостью его клонировать на всех машинах, на которых я хочу его использовать.

Никто другой не использует его, никто другой не совершает, и я редко делаю много на пути ветвления. Это действительно просто использовать его фантазию-отмену систему с хорошей синхронизацией и удаленным резервным копированием (частный проект GitHub)

я организовал его следующим образом:

В корневом уровне хранилища, у меня есть папка code (вместе с папкой sites, для веб-Dev вещи - вот почему хранилище 20MB)

В папке кода, у меня есть папки для различных языков (python, ruby, c и т.д.)

В каждом языке каталог, I ha ve две папки, snippets и projects. Внутренние фрагменты - это куча файлов, внутри проектов - серия папок.

Этих проектов являются случайными вещами я написал, но на самом деле не работают на много (игрушечных проектов, «Интересно, если бы я мог ...» - проекты и т.д.)

Если это один файл Python , он идет в code/python/snippets/, если это больше, чем один файл, он идет в code/python/projects/{project name}

Когда я хочу обнародовать проект (на Github, как правило), создать новое хранилище, скопируйте код этого и синхронизировать его с Github.

Отдельный репозиторий «активный проект» теперь не связан с монолитным репо. Я заглянул в проект подмодуля, но он не предназначен для этого использования - он предназначен для упрощения зависимостей клонирования, а не для управления рядом несвязанных репозиториев.

У меня есть скрипт, который использует API Github для автоматического клонирования всех моих проектов локально или обновить их с помощью git pull - это просто автономная версия githubsync.py (я объединил github.py в один файл).Он может быть найден here as gist/373731

Я использовал githubsync.py для клонирования моих проектов на своем ноутбуке и настольном компьютере на начальном этапе, а также регулярно запускал его внутри Dropbox в качестве резервной копии.

+0

Ничего себе, спасибо за подробное объяснение! Вопрос о следующем: «Когда я хочу публично выпустить проект (обычно на Github), я создаю новый репозиторий, копирую код и синхронизую его с Github. Теперь отдельный репозиторий« активный проект » не связанный с монолитным репо ». Когда вы создаете этот новый активный проект, вы помещаете его вне своего личного/кода/каталога? Я бы предположил, что иначе ваш репозиторий кода попытается добавить эту папку проекта, когда вы сделаете что-то вроде «git commit -a». Еще раз спасибо! –

+0

@spooky note Yeh, у меня есть мой личный код repo в '~/code/mycode' и отдельные проекты в' ~/code/{projectname} '- git не обрабатывает репозитории-в-хранилищах особенно полезно, хотя я думаю git должен игнорировать их, когда вы делаете 'git commit -a' (не уверен) – dbr

+0

Отлично, спасибо! Я собираюсь пойти с этим методом - кажется более простым и понятным, чем подмодули. –

2

Я знаю, что если бы я использовал SVN, я бы просто держать мой весь «~/code/» каталог в большом хранилище, но я понимаю, что это не лучший способ делать вещи с Git.

Да, это так.
Но как только у вас есть этот большой репозиторий, вы должны различать детали, которые будут развиваться с их собственным жизненным циклом и их собственным тегом.
Это будет submodules, который будет, как вы сказали, своим собственным репо.

Таким образом, вы все равно получите:

code 
    .git (main project) 
    python 
    .git (main sub-project for all python-related stuff) 
    project1 
     .git (first submodule) 
    project2 
     .git (first submodule) 
    ... 
    scripts 
     .git (one submodules for all your scripts) 
    sandbox 
     .git (sandbox submodule) 
    docs 
     .git (docs submodule) 
    java 
    .git (main sub-project for all java-related stuff) 
    ... (repeat same organization) 

Примечания: хронология создания проектов еще лучше управляться с именованием.

При том, что многие подмодулей, вы можете:

  • фактически клонировать и работать на любой части вашей коллекции без необходимости получить всё
  • или вы можете повторно построили ту же самую старую организацию, вы имели в первое место

 Смежные вопросы

  • Нет связанных вопросов^_^