Как правильно управлять репозиторией git в подкаталоге, игнорируемым родительским каталогом, в качестве собственного проекта?

Я хочу использовать Vagrant проект разработки laravel. Чтобы облегчить это, я использую этот проект github, Laravel4-Vagrant.

Конфигурация бродяг управляется как репозиторий git. Часть настройки Vagrant имеет определенный каталог www, который отображается на /var/www после настройки сервера, поэтому вы можете просто работать с файлами внутри гостевого vm непосредственно из хоста vm. Однако в этом каталоге www есть файл .gitignore. Это имеет большой смысл, потому что вы хотите управлять своей бродягой настройкой и начинать с нуля с помощью разработки вашего приложения и т.д.

Тем не менее, вы начинаете разработку своего приложения и выполняете проект в этом каталоге www. Было бы неплохо также управлять этим проектом в git, тогда вы могли бы развернуть свое приложение на другом веб-сервере или новой бродяжнейшей установке. Из-за файла .gitignore нет способа использовать git для файлов в этом каталоге, так как родитель хочет игнорировать его.

Я не уверен, что git -подстановки - это правильное решение здесь или какая-то другая специальная конфигурация.


В более общем виде:

Как создать репозиторий git для проекта, который игнорирует дочерний каталог, но файлы в этом дочернем каталоге (которые игнорируются родителем) управляются на свой собственный git repo?

В идеале я должен иметь возможность упаковывать родительский элемент вверх и дочерний элемент отдельно.

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


Изменения:

Нет никаких реальных требований к структуре и т.д., пока два проекта могут поддерживаться в отдельных репозиториях и могут быть развернуты вместе или один из них (например, я могу использовать свой пользовательский бродяга, созданный для установки другого dev/prod или я могу развернуть проект laravel до существующего развертывания в другом месте). Я бы также рассмотрел другие стандартные системы управления версиями, которые легко работают вместе. Кроме того, будет ли иметь значение, если начальное репаратор laravel был установлен через git? используя приведенный выше проект шаблона github, он не клонирует репозиторий git для начальной установки, но использует установщик larvel.

Ответ 1

Из корня проекта с чистым индексом:

  • git rm www/.gitignore
  • Добавьте/www к вашему .gitignore в корне проекта. Можно также избавиться от этих строк, пока вы на нем:

    /www/bootstrap/compiled.php
    /www/vendor
    
  • git add .gitignore

  • git commit

... и это должно сделать это. Теперь вы можете запускать любые git команды внутри www, не мешая внешнему репо. Оба репозитория могут быть клонированы отдельно, хотя бродячая конфигурация не должна работать, если внутреннее репо не клонируется в нужном месте, конечно.

Ответ 2

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

У меня есть два способа, которыми я обычно настраивал проекты с бродягой. Они могут служить руководством для вас, чтобы решить, что вы собираетесь делать.

Поместите настройку бродяг в ваш проект

При использовании vm, привязанного к одному проекту, я помещаю Vagrantfile и кулинарные книги вместе со всеми файлами src в один репозиторий git.

Структура папок хранилища может выглядеть так:

myProject/src/
myProject/vm/

Внутри vm можно найти папку Vagrantfile, .vagrant (игнорируется git) и файлы обеспечения. В пределах src. Я помещаю все, что было бы нормально в корне репозитория.

Эта настройка удобна, если vm тесно связан с проектом. Vm не нужно использовать, если кто-то не хочет этого делать, но он есть. Разбирая каталоги, можно фильтровать каталог git по каталогу и иметь "чистый" журнал изменений в проекте и vm, если это необходимо.

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

Вы можете, конечно, поместить Vagrantfile в свой корень репозитория вместе с обычной настройкой проекта и иметь папку для ваших файлов обеспечения.

Имейте репозиторий vm и репозитории проектов

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

VM --> vm/project-a --> dev-machine/project-a
   --> vm/project-b --> dev-machine/project-b
   --> vm/project-c --> dev-machine/project-c

Хост-системные папки могут отсутствовать, если пользователь не клонировал эти проекты. Также может случиться так, что пользователь не обновляет репозитории проектов. Затем они получат ошибки, потому что изменения в проекте ломают виртуальную машину.

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

Через короткое время все были использованы для обновления виртуальной машины, если произошли ошибки. Мы также проверили Vagrantfile.dist в репо. Разработчики должны были скопировать его и создать из него свой собственный Vagrantfile. Они изменят синхронизированные папки, чтобы указать на реальные пути проекта на своем хосте. Кроме того, им нужно будет удалить проекты, с которыми они не работали.

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