2015-05-20 3 views
2

После I git submodule update он всегда проверяет ту же фиксацию. например 34561.git subodule проверяет ту же фиксацию

Я делаю git checkout master для подмодуля, а затем git submodule sync. Затем он указывает на последнюю фиксацию a2344.

Но после update он снова указывает на фиксацию 34561.

Как его изменить? Я имею в виду, почему он решил указать на это совершение, а не на другое?

ответ

2

Я имею в виду, почему он решил указать на это совершение, а не на другое?

Поскольку подмодуль всегда записывает фиксированное SHA1 фиксации в родительском репо как gitlinkspecial entry in the index).
Поэтому подмодуль всегда восстанавливается как detached HEAD branch

Вы можете настроить подмодуль следовать филиал

cd /path/to/your/parent/repo 
git config -f .gitmodules submodule.<path>.branch <branch> 

Субмодуль все равно будет восстановлен фиксированной фиксации, но затем может быть обновлен :

git submodule update --remote 

Убедитесь, что добавить и зафиксировать новый gitlink в родительском репо (с обновлением подмодуль к последней из отрубей ch изменит свой SHA1, записанный в родительском репо как gitlink).
Если вы этого не сделаете, вы вернете свой подмодуль в свое предыдущее состояние, а затем в следующий git submodule update --init.

Подробнее на "Git submodules: Specify a branch/tag".

0

Вам нужно зайти в папку субмодуля и выполнить:

git fetch --all --prune 
git pull origin master 

И теперь вы будете иметь последний коммит в submodole.
Как только вы запустите его updatigng папку .git под подмодулем с последними коммитами. Он будет следить за последними изменениями.

+0

вопрос не в том, как получить последнее, но почему он проверяет, что конкретный '34561' commiy – lapots

+0

Мне нужно, чтобы репозиторий удостоверился, но похоже, что ваш подмодуль не обновляется, поэтому вы продолжаете получать тот же репозиторий. Можете ли вы опубликовать последний идентификатор фиксации своего подмодуля до и после обновления god subodule? – CodeWizard

0

Вы можете выполнить:

git submodule foreach git pull origin master 

Это обновит все ваши подмодулей.

+0

Я делаю то же самое (но просто «git subodule foreach git pull»). Дело в том, что поэтому он всегда обновляется до того же '34561' commit – lapots

+1

Git хранит идентификатор фиксации SHA1 в базе данных репозитория. Блокировка подмодуля с определенным кодом фиксации гарантирует, что ваш код будет работать, и никакие изменения изменений не будут применены ни при каких обновлениях. Однако, если вы вытащите мастер, ваш репозиторий будет блокироваться с последним фиксатором. –

1

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

Если вы изменили заголовок субмодуля вручную в подмодуле, вам нужно сообщить основному проекту, что теперь он должен использовать этот SHA-1 для подмодуля.

git commit -a 

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

Это может быть удивительно, но на самом деле это приятная функция. С проверкой в ​​главном проекте вы в основном говорите своим коллегам, что теперь можно использовать более новую версию подмодуля. Это позволяет людям работать вместе без особого риска потянуть коврик под другие ноги.

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

Смежные вопросы