Можно работать только с частью репозитория git?

Я разрабатываю настольное приложение с JGit для того, чтобы построить облачную систему для хранения файлов.

Сейчас несколько пользователей вносят свой вклад в один и тот же репозиторий, но не всем интересно работать со всем проектом.

Например, я разрабатываю с другими программное обеспечение с MVC архитектура, мне просто нужно получить доступ к контроллеру-подкаталогу проекта. Для этого, когда я clone/pull/push хранилище я хочу просто работать с той частью, которая мне нужна. Я видел возможность создавать подмодули или оформить заказ с git, но я не понял, является ли правильный путь для моей проблемы.

2 ответа

Простой ответ заключается в том, что вы можете сделать это, но длинный ответ таков:

Git хранит снимки ВСЕГО содержимого репо в каждом коммите, если вы хотите использовать только его часть, вам в основном нужно будет извлечь только ту часть, которая вам нужна, а когда вы совершите коммит, вам понадобится весь контент репозитория. текущий коммит.

Итак, снова вы можете сделать это, но вы ничего не получите от этого.

Вы упомянули, что слышали о субмодулках.


Вот полное объяснение субмодуля / поддерева

Вы можете попробовать прочитать о подмодулях.

Submodules разрешить встраивание внешних репозиториев в выделенный подкаталог дерева исходных текстов, всегда указывающий на конкретный коммит.


git submodule

Разбейте ваш большой проект на подпроекты, как вы делали до сих пор.
Теперь добавьте каждый подпроект в основной проект, используя:

git submodule add <url>

После того, как прогноз будет добавлен к вашему репо, вы должны его инициализировать и обновить.

git submodule init
git submodule update

Начиная с Git 1.8.2 новая опция --remote был добавлен

git submodule update --remote --merge

будут fetch последние изменения из апстрима в каждом подмодуле, merge them in, а также check out последняя редакция субмодуля.

Как документы описывают это:

--remote

Эта опция действительна только для команды обновления. Вместо того, чтобы использовать записанный SHA-1 суперпроекта для обновления подмодуля, используйте статус ветви удаленного отслеживания подмодуля.

Это эквивалентно запуску git pull в каждом подмодуле.


Тем не менее, как бы я протолкнул коммит в сценарии исправления ошибок в C, который влияет на код, общий для родительских слоев?

Опять же: использование субмодуля поместит ваш код в ваш основной проект как часть его содержимого. Различие между локальным размещением в папке или наличием его как части подмодуля состоит в том, что в подмодуле контент управляется (передается) в другой автономный репозиторий.


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


git subtree

Git поддерево позволяет вам вставить любой репозиторий как подкаталог другого

Очень похоже на submodule но главное отличие в том, где ваш код управляется. В подмодулях контент размещается внутри отдельного репо и управляется там, что позволяет вам клонировать его и во многие другие репо.

subtree управляет контентом как частью корневого проекта, а не как отдельный проект.

Вместо того, чтобы записывать, как его настроить и понять, как его использовать, вы можете просто прочитать этот отличный пост, который объяснит все это.

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

Вы можете создать новую ветку для него. Git - Филиалы, вот учебник.

Когда вы закончите со своей работой, объедините ее так, чтобы каждый в проекте мог увидеть эффект.

Другие вопросы по тегам