LINUX.ORG.RU

git submodule after clone

 


0

2

Сделал я проект, скажем some-data. Есть отдельная репа common. Мои действия:

1. Создаю репу some-data
2. cd some-data
3. git init
4. change .git/config
5. git clone git@bitbucket.org:some_name/common.git
6 .git submodule add git@bitbucket.org:some_name/common.git;git submodule init
7. git add .;git commit;git push origin master
8. cd ..; rm -rf some-data

Далее я хочу проверить, всё ли ок

1. git clone --recurse-submodules -j8 git@bitbucket.org:some_name/some_data.git
2. cd some-data
ls -a common
.  ..  bash  .git  .gitignore  python

cat common/.git
gitdir: ../.git/modules/common
cd common
touch 1; echo "wefwewwe" > 1
git add .;git commit;git push origin master
error: unable to push to unqualified destination: HEAD
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@bitbucket.org:some_name/common.git'

  1. cd ..
  2. git add .;git commit;git push origin master

коммит проходит, но в репозитории common нет изменений, а в коммите some-data примерно такое:

-Subproject commit f971964634505ed3fd844675da0bd908c7d3a5a1

+Subproject commit 39ca9270f87da8276a8bd7e66f744f9c30e7352a
★★★★

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

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Если я склонирую common в some-data, а потом его зарегаю как модуль

git submodule add git@bitbucket.org:some_name/common.git;git submodule init

то я могу коммитить в него. Можно как-то делать тоже самое, но без ручного клонирования common и перерегистрации модулем common?

bryak ★★★★
() автор топика
Ответ на: комментарий от mord0d

Такой вариант неудобный т.к я работаю в some-data, в common вношу изменения и тестирую работоспособность. Если ок, тогда я хочу, чтобы другие *-data у себя получили этот функционал. Что, вручную копировать изменения из some-data/common в репозиторий common и потом в отдельном репозитории common пушить?

bryak ★★★★
() автор топика
Ответ на: комментарий от mord0d

Всё он может. Сабмодули и есть отдельные репозитории (хоть .git у них может в общей куче лежать). Просто перед пушем надо на ветку стать. Сабмодули привязываются не к веткам, а к хешам (ветки же могут изменится), и после checkout они в состоянии «detached head».

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Всё он может.

Некоторое лучше не делать. ^_~

mord0d ★★★★★
()
Ответ на: комментарий от bryak

Если я склонирую common в some-data, а потом его зарегаю как модуль то я могу коммитить в него.

Во-первых это плохая практика для git-сервисов типа GitHub, во-вторых ты об этом рано или поздно пожалеешь.

Поэтому считай, что ты этого не можешь. ^_~ Не всё удобное — практично.

mord0d ★★★★★
()
Ответ на: комментарий от xaizek

Тут следует добавить, что в книжке Pro Git половина главы про submodules именно о том, как сделать так, как хочет ТС, и какие грабли надо будет обходить потом во всё время работы с таким репозиторием.

Edit: есть перевод на русский

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)

Всем спасибо, разобрался

bryak ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.