2012-02-22 6 views
5

Я довольно новичок в Git: я родом из SVN, и там я нашел действительно мощную внешнюю функцию. Вот в Git я не найти что-то подобное:Нажатие поддеревья в git repo

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

Итак, сценарий таков: у меня есть проект, в который я хочу включить некоторые библиотеки. Мне нужна возможность изменить все эти библиотеки и направить их в свои собственные репозитории. Кроме того, некоторые из этих библиотек являются поддиреями больших проектов (например, если проект включает в себя также демонстрационные или readme-файлы, я не буду включать эти dirs в свой проект).

Как я могу это сделать?

Я пробовал:

Ну, если вы достигли этой точки, спасибо за ваше терпение, теперь я хотел бы еще что-нибудь попробовать, потому что сейчас мой вывод : "поддерево толкая не допускается в Git" ç_ç

+0

http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221: git-подмодули и внешние разные. Но вы можете изменить содержание подмодуля и нажать на его репо: http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194. В принципе, мой ответ будет таким же, как http://stackoverflow.com/questions/9394286/planning-repository-layout-for-git-migration/9395375#9395375 – VonC

+0

ОК, спасибо ... но (пожалуйста, исправьте меня, если Я ошибаюсь) с подмодулями я не могу «включить» только определенный каталог подмодулей ?? Я имею в виду: в моем подмодуле есть два каталога: Demos и Source, и я хочу включить _only_ исходное содержимое в мой родительский проект ... надеюсь, что это понятно ... –

+0

правильный: подмодуль - это собственный репозиторий git: вы должны проверить все. Хотя разрешенная проверка возможна (http://stackoverflow.com/a/2467629/6309), они не рекомендуются. Использование символической ссылки для ссылки только то, что вы хотите видеть, лучше. – VonC

ответ

3

Пара замечаний от комментариев:

Так что я рекомендую:

  • загрузку (GIT проверки) родительский репозиторий и все его подмодули
  • создание другого правильную структуру, с линком подмодулей (или подкаталоги подмодулей, чтобы для достижения того, что вам нужно.
  • периодически возвращайтесь к родительскому репо git ain, чтобы обнаружить какие-либо изменения (dones из другой структуры каталогов, созданной вне Git), чтобы зафиксировать и вытолкнуть все модификации подмодулей, а затем зафиксировать и нажмите родительское репо.не

мерзавец фотографии

parent repo 
    + 
    +--> main project 
    + 
    +-> mainDir1 
    +-> mainDir2 
    +--> lib1 
    + 
    +-> lib1Dir1 
    +-> lib1Dir2 
    +--> lib2 
    + 
    +-> lib2Dir1 
    +-> lib2Dir2 

И ваша собственная структура проекта (например)

+--> main project (symlink to ../parent/main project) 
    + 
    +-> mainDir1 
    +-> mainDir2 
    +-> lib1Dir1 (symlink to ../parent/lib1/lib1Dir1) 
    +-> lib1Dir2 (symlink to ../parent/lib1/lib1Dir2) 
    +-> lib2Dir2 (symlink to ../parent/lib1/lib2Dir2) 

(обратите внимание, что нет lib2Dir1 (например), потому что в Вашем проекте вы не» t необходимо)

+0

спасибо, ваш ответ - действительно фантастическая идея, о которой я никогда не думал. Но теперь я понимаю, что это не то, что я ищу ... Я имею в виду: с вашим решением, если я хочу клонировать проект, я должен делать символические ссылки, поэтому это не готовое решение, которое я бы хотел предоставлять. Да, это намного проще, чем мое предыдущее решение с поддеревьями, но теперь я подумаю, что это «недостаток» Git, не так ли? BTW благодарит много за ваше терпение !! –

1

Решение VonC опрятно, но оно имеет недостаток: Нет ни одного выхода od способ захвата конфигурации вашего проекта + библиотеки в определенный момент времени.

Если вам нужно снова настроить проект, вам необходимо проверить проект + библиотеки, но все они могут находиться на разных ветвях и фиксировать то, что у вас было раньше.

Итак, если вы выполните предложение VonC, возможно, создайте теги в каждом из репозиториев в момент, когда вы делаете выпуск своего проекта, чтобы вы могли, по крайней мере, проверить их снова в одной точке.

В противном случае всегда двигайтесь вперед и никогда не просматривайте более старую версию.