2013-11-19 5 views
2

У меня есть следующий репозиторий раскладку:Толчок Git подмодуль правильно

Repo 
|-- Folder1 
| |-- file1 
| |-- file2 
| ... 
|-- Folder2 
| |-- file3 
| |-- file4 
| ... 
|-- file5 
|-- file6 
... 

Где Репо "является основным хранилищем и«Folder1»и«Folder2»являются два подмодуля.

Работа с корневым каталогом (файл5, файл6 в примере) прямолинейна, но у меня есть сомнения в том, как правильно нажимать элементы, которые вы изменяете внутри подмодулей.

Прямо сейчас я редактирования файла внутри каждого субмодуля, совершая каждое изменение и толкая его, локальной:

[Repo]$ cd Folder1 
[Folder1]$ vi file1 
... do some changes ... 
[Folder1]$ git add file1 
[Folder1]$ git commit -m "Some changes" 
[Folder1]$ git push 

Если я проверить состояние GIT на субмодуле непосредственно, он выводит, что это до настоящего времени:

[Folder1]$ git status 
# On branch master 
nothing to commit, working directory clean 

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

[Folder1]$ cd .. 
[Repo]$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: Folder1 (new commits) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Поправьте меня, если я ошибаюсь, но я полагаю, что выше из-за мерзавец проверки тока локального репо фиксации ID против информации в сервере мерзавца я толкнул. Итак, что я на самом деле сейчас делаю, это совершить все и подтолкнуть его в основном репо. Правильно ли это работает с подмодулями?

ответ

1
[Repo]$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: Folder1 (new commits) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

выше из-за родительское хранилище Repo указывая на старшую фиксацию в Folder1 субмодуля.

К вашему другому вопросу, да, это правильный способ работы с подмодулями.

  1. Заключить подмодуль.
  2. Нажмите подмодуль.
  3. Заключить в родительский репозиторий.
  4. Нажмите родительский репозиторий.

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

Обратите внимание, что в родительском репозитории не обязательно, чтобы вы фиксировали и толкали каждое обновление подмодуля. Другие пользователи могут работать в ветке master подмодуля и делать стандарт git fetch/git pull, чтобы загрузить новые версии.

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

0

Что я на самом деле сейчас делаю, это совершить все и надавить на главный репо.

Если вы под этим подразумеваете «добавить каждый подмодуль к индексу корня и зафиксировать/вытолкнуть корень», то вы правы.

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

Примечание: не делает обязывает и нажимает ссылки на фиксации подмодулей, которые вы не намерены публиковать! Это может помешать другим разработчикам, ссылаясь на работу, к которой они не могут получить доступ. Кроме того, как уже отмечалось, вам не нужно фиксировать и подталкивать подмодуль к основному проекту каждый раз, когда вы вносите изменения в подмодуль, только когда он достигает нового стабильного состояния.

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