ΠŸΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

ΠŸΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ основного рСпозитория. Π­Ρ‚ΠΎ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ зависимостями ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ вСрсиями ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с подмодулями

РСкурсивная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --recurse-submodules ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git clone для автоматичСской ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ обновлСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ подмодуля Π² этом Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

$ git clone --recurse-submodules https://gitverse.ru/submodules_tutorials/main_repository.git
$ cd main_repository
$ tree
.
β”œβ”€β”€ README.md
└── submodule
    β”œβ”€β”€ README.md
    └── subsubmodule
        └── README.md
 
3 directories, 3 files

Если Π²Ρ‹ ΡƒΠΆΠ΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½ΠΎ Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ --recurse-submodules, Ρ‚ΠΎ см. Ρ€Π°Π·Π΄Π΅Π» РСкурсивноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Ручная инициализация ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:

    git clone URL_рСпозитория
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ рСпозитория ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² .gitmodules:

    git submodule init
  3. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄ΠΎ вСрсии, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, сохранСнной Π² Ρ„Π°ΠΉΠ»Π΅ .gitmodules ΠΈΠ»ΠΈ Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ рСпозитория:

    git submodule update

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ подмодуля

Для добавлСния подмодуля Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git submodule add URL_рСпозитория, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

git submodule add https://gitverse.ru/gitverse_tutorials/repository2_submodule.git

Π”Π°Π»Π΅Π΅ сохранитС ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ измСнСния:

git add .
git commit -m "a new submodule added"
git push

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ подмодуля Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ появляСтся Ρ„Π°ΠΉΠ» .gitmodules для отслСТивания ΠΈ управлСния подмодулями. Π’ Π½Π΅ΠΌ хранится URL рСпозитория подмодуля, ΠΏΡƒΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

ИзмСнСниС Π²Π΅Ρ‚ΠΊΠΈ подмодуля

Для измСнСния Π²Π΅Ρ‚ΠΊΠΈ подмодуля ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΅Π³ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ смСны Π²Π΅Ρ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

cd repository2_submodule
$ git checkout feature_branch

РСкурсивноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° обновляСт всС ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄ΠΎ послСдних вСрсий, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ссли ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, ΠΈ рСкурсивно обновляСт всС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ:

git submodule update --remote --init --recursive

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

Для удалСния подмодуля:

  1. ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ строку ΠΈΠ· Ρ„Π°ΠΉΠ»Π° .gitmodules;
  2. ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΈΠ· .git/config;
  3. Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git rm --cached path_to_submodule (Π±Π΅Π· Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ слэша);
  4. Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅;
  5. ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ подмодуля.

Π’Ρ‹ нашли Ρ‡Ρ‚ΠΎ искали?