Как вы развиваетесь вместе с подмодулем git?

Вот моя структура проекта

MainProject
|  README.md
|  src/
|  lib/      # this is a submodule

Когда я развиваю MainProject, я также буду развивать lib/, я имею в виду MainProject/lib/.

Когда я нажимаю, я скопирую все изменения в MainProject/lib/* в MainProject/../lib/, который является отдельным каталогом git, а затем нажмите.

После этого я сделаю обновление подмодуля в MainProject/lib/ последним с удаленного.

Затем я зафиксирую и нажимаю изменения в MainProject.

Он страдает. Как вы развиваетесь вместе с подмодулем git?

ADD

Я хочу, чтобы все изменения в lib/ были перенесены в удаленный репозиторий lib. И все изменения рядом с lib/ в MainProject переместились на удаленный MainProject.

Итак, если я прямо поместил в удаленный репозиторий lib внутри MainProject/lib А затем добавьте и зафиксируйте и нажимайте изменения рядом с lib/ в MainProject на удаленный.

Если кто-то еще клонирует MainProject и делает submodule update, получит ли он последние источники?

Мой .gitmodules:

 [submodule "lib"]
    path = lib
    url = [email protected]:XXX/YYY.git
    branch = master

Ответ 1

Вам не нужно копировать свои изменения: вы можете напрямую нажать от MainProject/lib до того же самого репозитория восходящего потока (тот, который находится в git remote origin), чем предыдущий репо (git remote origin), найденный в MainProject/../lib.

MainProject/lib - это вложенное репо в своем собственном праве: вы можете добавить commit и нажимать их непосредственно из него.

Но тогда вы должны вернуться к MainProject/, добавить, зафиксировать и нажать, чтобы записать новую gitlink (специальную запись в индексе родительского репо, которая записывает SHA1 подмодуля lib)


добавить и зафиксировать и нажать изменения рядом с lib/ в MainProject на удаленный

Нет: когда вы производите anyhting в lib, это изменит gitlink (запись 'lib' в MainProject index)

Отправляясь к MainProject (это означает, что вы были в MainProject/lib, и вы делаете cd ..), вы можете сделать git add., который будет:

  • добавьте все свои изменения рядом с lib/
  • записать новый SHA1, связанный с подмодулем lib/ (запись 'lib' gitlink)

Но нажав MainProject, в комплекте с обновленной записью "lib" gitlink, вы убедитесь, что кто-то, клонировавший ваш MainProject, вернется lib к этому точно обновленному SHA1.