Пометка старого коммита подмодуля с помощью git - PullRequest
1 голос
/ 13 мая 2011

У меня есть проект git (repo1), включающий один подмодуль (repo2). Чего я хотел бы добиться, так это пометить мой проект, используя более старую фиксацию моего подмодуля (например, HEAD - 3).

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

$ git submodule update 
fatal: reference is not a tree: 2c3d1a5936aa9469ecc1442cd4b101e1bbd3aada
Unable to checkout '2c3d1a5936aa9469ecc1442cd4b101e1bbd3aada' in submodule path 'repo2'

Какая процедура будет самой лучшей и самой лучшей?


Ошибка заголовка субмодуля Git 'ссылка не является деревом' дает начало ответа, но все еще связывает ГОЛОВУ РЕПО2, а не выбранный коммит ...

Предположим, теперь, когда тег завершен, как я могу сказать моему репо1 установить репо2 в правильное состояние для тега:

 git checkout 0.0.1

Согласно обновлению подмодуля git , простое

 git submodule update

должно хватить. Он не проверяет мой субмодуль на указанный коммит. Зачем ? Это ... ошибка ?

1 Ответ

2 голосов
/ 16 мая 2011

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

Полная процедура, начиная с git-репо (repo1) с подмодулем (repo2).

$ git clone git@git:myproject.git
$ cd myproject
$ git submodule update --init

Теперь, если мне нужно пометить старый коммит моего репо2, вот что я буду делать:

$ cd repo2
$ git checkout SOMECOMMITHASHORTAGORELSE
$ cd ..
$ git add repo2

add важно обновить gitlink до хэша коммитов репо2

$ git commit repo2
$ git tag TAGNUMBER
$ git push (--tags if you want to push the tag also)

Теперь, почему submodule update не работал? Дело в том, что я продолжал пытаться оформить коммит, связанный с тегом repo1

$ git checkout TAGNUMBER
$ git submodule update

Это не сработало только потому, что (примечание к себе) я забыл, что:

Пометить ПОСЛЕ совершения

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

...