2016-12-05 4 views
1

Я работаю с git-подмодулями в первый раз. Борясь с пониманием того, как создавать филиалы по всем направлениям и добавлять их ко всем удаленным репозиториям.Создание нескольких удаленных ветвей с git-подмодулями

В настоящее время моей структура файла напоминает следующее:

-parent_repo 
    | 
    |_ submodule_1 
    |_ submodule_2 
    |_ submodule_3 
    |_ submodule_4 
    |_ submodule_5 
    |_ submodule_6 
    |_ submodule_7 

Если я создаю ветку на родительском репо:

(master) $ git checkout -b feature/my_feature 
(feature/my_feature) $ git commit -m "created my_feature" 
(feature/my_feature) $ git push -u origin feature/my_feature 

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

Пробовал следующие шаги:

$ git submodule foreach -b branch_name 
$ git push --recurse-submodules=on-demand 
$ git submodule foreach "(git checkout branch_name; git pull)&" 

..Just терпит неудачу. Первая команда не найдена.

..И если я:

$ git config -f .gitmodules submodule.submodule_1.branch branch_name 
$ git submodule update --remote 

GIT возвращается:

fatal: Needed a single revision 
Unable to find current origin/branch_name revision in submodule path 'submodule_1' 
+0

'git subodule foreach -b имя_файла' должен быть' git subodule foreach 'git checkout -b имя_информации' –

ответ

1

См Submodule tips:

Например, предположим, что мы хотим, чтобы начать новую функцию или сделать исправление, и у нас есть работа в нескольких подмодулях.
Мы можем легко спрятать всю работу во всех наших подмодулямах:

$ git submodule foreach 'git stash' 
Entering 'CryptoLibrary' 
No local changes to save 
Entering 'DbConnector' 
Saved working directory and index state WIP on stable: 82d2ad3 Merge from origin/stable 
HEAD is now at 82d2ad3 Merge from origin/stable 

Тогда мы можем создать новую ветку и переключиться на него во всех наших подмодулямах:

$ git submodule foreach 'git checkout -b featureA' 
Entering 'CryptoLibrary' 
Switched to a new branch 'featureA' 
Entering 'DbConnector' 
Switched to a new branch 'featureA' 

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

Но помните: это разные ветви (даже если они имеют одно и то же имя), каждый из которых относится к собственному репо (либо родительскому репо, либо репозиторию подмодуля).

+0

Как только я создаю и проверю ветку, как вы упомянули выше. Что работает. Вы знакомы с тем, что можете «нажимать -u origin featureA» на все репозитории без необходимости входить в каждый из них и создавать удаленную ветку. Что-то вроде '$ git subodule foreach 'git push -u origin featureA''. Поскольку подмодули создаются с использованием ссылки http на репо, а не ssh, мне предлагается ввести учетные данные. – Josh

+0

@ Вы можете попробовать это в одном подмодуле и кешировать эти учетные данные раз и навсегда: см. Начало http://stackoverflow.com/a/13386417/6309. – VonC

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