2016-05-30 3 views
3

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

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

Я читал про git hooks, и я обнаружил, что могу это сделать, используя post-receive hook. Однако, похоже, это не работает. Вот что я сделал:

  1. из корневого каталога основного проекта, я нашел следующий каталог /.git/modules/submodule-directory/hooks
  2. Я создал post-receive файл с исполняемым разрешения допускается.
  3. Содержание post-receive файла:

    #!/bin/sh 
    git pull 
    
  4. Выдвинутого изменение от моей локальной машины в подмодуле репо, но ничего не произошло.

Что я делаю неправильно?

EDIT: Я собираюсь уточнить некоторые моменты, касающиеся моего вопроса.

У меня есть два репозитория: «Основной» репозиторий, который представляет собой весь проект; и другой репозиторий, который является внешним видом (представления, активы и т. д.). Назовем это хранилище «frontend».

В мой основной репозиторий я добавил frontend repo как подмодуль, расположенный внутри/подмодулей/frontend. Таким образом, сторонние сторонние разработчики не смогут ничего увидеть о реальном проекте. Они будут видеть только то, над чем они работают.

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

Наш проект имеет два отдельных сервера - сервер разработки и производственный сервер. Сервер разработки всегда должен находиться в главной ветке как для основного репо, так и для внешнего репо. Таким образом, как внешняя команда, так и бэкэнд-команда смогут увидеть их обновления. Несмотря на то, что команда frontend в основном работает с шаблонами, шаблоны имеют доступ к данным, которые хранятся в базе данных, и используют множество материалов, которые интегрированы в бэкэнд (например, модели).

Для того, чтобы эта «система» работала, мне нужно, чтобы ретрансляция frontend всегда извлекалась и объединялась всякий раз, когда в «frontend» совершалась новая фиксация. удаленный репо. Другими словами, если внешняя команда делает git commit и git push, подмодуль «frontend» репо в сервере разработки должен немедленно git pull. Итак, когда участники фронтэнда проверяют свои вещи, они сразу видят последние изменения.

Я читал, что post-receive крюк может это сделать, но мне нужен этот крюк, чтобы существовать только для субмодуля. Итак, после некоторого рытья я обнаружил, что все подмодульные крючки существуют в /.git/modules/submodules/frontend/hooks.Итак, я создал post-receive крюк в этой директории со следующим кодом:

#!/bin/sh 
git pull 

Но это не сработало. Мой вопрос заключается в том, как заставить крючки работать с post-receive внутри подмодуля?

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

Надеюсь, это имеет смысл.

+0

Руководство «git pull» может дать вам подсказку. – renemilk

+0

. Еще одна предел точности: например, о сервере разработки, вы нажимаете из своего локального хранилища, где находится? в репозиторий '--bare'? непосредственно в каталог, используемый в разработке? – Asenar

+0

Я нажимаю на репозиторий '--bare', расположенный в Gitlab.com – Gasim

ответ

2

Когда вы git pull, это (в основном) эквивалентно git fetch && git merge. Это не обновит подмодули.

Если я понимаю ваши потребности, то, что вы хотите, может быть сделано с помощью команд git submodule update (или git submodule foreach 'git pull') в ваших крючках после приема (в основном каталоге .git/hooks).

ADD (на основе ваших изданий): на основании того, что я понял, что вам нужно добавить post-receive крюк в хранилище gitlab во внешнем интерфейсе, и ваш крючок должен выполнить команду git submodule update (или, может быть git submodule foreach 'git fetch && git merge' на сервере разработки (с ssh-команда или что-то еще)

Но может быть проще переосмыслить, как установлен ваш сервер разработки, вы можете установить 2 репозитория как полностью разделенные (не frontend, являющийся подмодулем) и, возможно, добавить подмодуль/интерфейс к вашему .gitignore. Это необязательно означает, что вам нужно удалить frontend из подмодуля, но просто не использовать его на вашем сервере разработки.

+0

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

+0

По-прежнему мне непонятно, что вы называете 'commit to main repository'' commit' ≠ 'push'? локальное подмодульное репо? удаленный субмодульный репо? местный «основной проект репо» и т. д. – Asenar

+0

Я всегда совершаю и нажимаю, поэтому я просто говорю фиксацию. См. Мое редактирование. Я уточнил всю терминологию, которую я использую, и то, как я хочу, чтобы она работала. Извините за путаницу. – Gasim

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