Я был одержим этой проблемой, когда я изучал Руби. Это было лучшее, что я мог сделать:
def spiral(matrix)
matrix.empty? ? [] : matrix.shift + spiral(matrix.transpose.reverse)
end
Вы можете проверить некоторые из моих других решений, отступив через ревизии в этом gist . Кроме того, если вы перейдете по ссылке, к которой я разветвлял суть, вы найдете некоторые другие умные решения. Действительно интересная проблема, которая может быть решена несколькими элегантными способами - особенно в Ruby.
Примечание. В Git 1.8.2 добавлена возможность отслеживать ветки. См. Некоторые ответы ниже.
Немного запутанно привыкать к этому, но подмодули не находятся в ветке. Они, как вы говорите, просто указатель на конкретную фиксацию репозитория подмодуля.
Это означает, что когда кто-то другой проверяет ваш репозиторий или извлекает ваш код и выполняет обновление подмодуля git, подмодуль проверяется на этот конкретный коммит.
Это отлично подходит для подмодуля, который не часто меняется, потому что тогда каждый в проекте может иметь подмодуль в одной фиксации.
Если вы хотите переместить подмодуль в конкретный тег:
cd submodule_directory
git checkout v1.0
cd ..
git add submodule_directory
git commit -m "moved submodule to v1.0"
git push
Затем другой разработчик, который хочет изменить submodule_directory на этот тег, выполняет эти изменения
git pull
git submodule update --init
git pull
, которые фиксируют его каталог подмодуля, указывающий на .
Пример как я использую подмодули Git.
И это выглядит примерно так:
git init
vi README
git add README
git commit
git submodule add git://github.com/XXXXX/xxx.yyyy.git stm32_std_lib
git status
git submodule init
git submodule update
cd stm32_std_lib/
git reset --hard V3.1.2
cd ..
git commit -a
git submodule status
Может быть, это поможет (хотя я использую тег, а не ветку)?
Подмодули Git немного странные - они всегда находятся в режиме «отдельной головы» - они не обновляются до последней фиксации в ветке, как вы могли ожидать.
Это хотя, если подумать, имеет некоторый смысл. Допустим, я создаю репозиторий foo с подмодулем bar . Я нажимаю свои изменения и прошу вас проверить фиксацию a7402be из репозитория foo .
Затем представьте, что кто-то фиксирует изменение в репозитории bar , прежде чем вы сможете создать свой клон. ] Когда вы проверяете фиксацию a7402be из репозитория foo , вы ожидаете получить тот же код, что и я. Вот почему подмодули не обновляются, пока вы явно не скажете им об этом, а затем не сделаете новый коммит.
Лично я считаю, что субмодули - самая запутанная часть Git. Есть много мест, где можно лучше объяснить подмодули, чем я. Я рекомендую Pro Git Скотта Чакона.