Разработка и производство Git Workflow – где мне следует создавать репозитории?

StackOverflow https://stackoverflow.com//questions/9672485

  •  12-12-2019
  •  | 
  •  

Вопрос

Я где-то читал * такая установка была бы хороша:

Две основные ветки, по одной на каждый сервер.

Нажатие на мастер отправляет изменения в действие;

Нажатие на разработку/сцену (или как вы это называете) отправляет изменения в промежуточную версию;

Рабочий процесс:

  • Создать ветку от dev;

  • работайте локально, пока не будете готовы к тестированию;

  • слиться обратно с dev;

  • push в Hub, который отправляет изменения на сервер разработки/промежуточного хранения.

Как только вы будете готовы к запуску:

  • объединиться от разработчика к мастеру,

  • затем отправьте мастер в Hub, который отправит эти изменения на работающий сервер.

Две основные ветки, по одной на каждый сервер.

Таким образом, у меня есть одна филиала «Производство» на «WebRoot/MyLiveApp/» и еще одну ветвь «разработка» на "WebRoot/Devapp/"

Где должен быть репозиторий?

ОБНОВЛЯТЬ:

Я имею в виду:

В соответствии с этим потоком мы будем иметь:

  • Прайм-репо;

  • Пустой центр репо;

  • Клоны;

Ветки разработки и производства должны принадлежать одному репозиторию, верно?

Если это верно, то где нам следует ввести ПЕРВУЮ команду git init?В нашем Prime-репозитории?

Итак, у нас будет:

«webroot/myliveapp/» — производственная ветка;

"webroot/devapp/" - ветка разработки;

«webroot/.git» — основной репозиторий;

Имеет ли это смысл ?

Или репозиторий Prime должен соответствовать расположению нашего производственного филиала?

*Примечание:если вам нужен контекст того, какой рабочий процесс я пытаюсь реализовать, вот этот:http://joemaller.com/990/a-web-focused-git-workflow/

Это было полезно?

Решение

Спасибо за обновленную информацию по вашему вопросу, теперь он более понятен.

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

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

Если вы находитесь в отделении master, и у него есть файл root/foo.txt совершено, и вы проверяете ветку experiment, что делает нет иметь root/foo.txt зафиксировано, вы найдете этот файл ушел когда ты его ищешь.Это часть master, нет experiment, поэтому его нет в вашей файловой системе.Вот почему Git очень требователен к фиксации вашей текущей ветки, прежде чем он позволит вам переключать ветки: если в вашей файловой системе есть непроиндексированные изменения, о которых Git не знает, он отказывается стереть их, перезаписав их другой реальностью.Сначала вам придется вмешаться, чтобы все исправить.

Итак, чтобы ответить на вопрос, не создавайте подкаталоги для «myliveapp» и «devapp» — создайте разные ветви.Просто разместите свою кодовую базу в «webroot».Затем взломайте, скажем, «нестабильную» ветку, зафиксировав изменения как обычно.Затем вы можете переключить все файлы в своем репозитории на версию файлов вашего сервера разработки, переключившись на ветку «devapp», и вы можете аналогичным образом переключиться обратно на «нестабильную» версию в любое время.

Если вы хотите обновить ветку, например.делая обновление вашего сервера разработки, вы можете merge «нестабильный» на «devapp».Это сделает все файлы «devapp» похожими на файлы «unstable», что обновит их.

Еще одна вещь, которую следует отметить:разница между прайм-репо, голым репо и клонами практически равна нулю.В программном обеспечении практически нет разницы;скорее, принято говорить: «Ядро Линуса является каноническим ядром Linux».С этим пониманием:

  • Основное репозиторий — это всего лишь один репозиторий, в котором, по общему мнению, содержится «каноническая» версия программного обеспечения.То есть всякий раз, когда разработчик вносил изменения, они хотят, чтобы все видели, вместо того, чтобы сказать: «Потяните мою версию Devapp», они могут сказать: «Я опубликовал свои изменения в нашем Prime Repo». Это просто легкая конвенция для людей, чтобы сплотиться.
  • Клон — это копия другого репозитория.Я мог бы клонировать основной репозиторий, внести изменения, а затем вы сможете клонировать мой репозиторий.Если вы вносите изменения, вы можете отправить их либо в основной репозиторий, либо в мой, если слияние действительно и у вас есть разрешения на компьютере.
  • У голого репозитория просто нет «рабочей копии» — на этом компьютере нет «корневого веб-каталога».Здесь пусто с только тот .git каталог — это подходит для серверов, где никому не нужно изменять файлы.

Наконец, .git dir не содержит файлы вашего репозитория, он содержит конфигурацию git и базу данных.Это вся история вашего репозитория в форме базы данных, которая используется для заполнения остальной части репозитория определенной версией вашего программного обеспечения.Вот почему я сделал комментарий:ты можешь локально проверить любая версия любой альтернативной реальности репозитория без подключения к сети в любое время — потому что все это находится в каталоге .git.Единственное необходимое сетевое соединение — это когда вы хотите синхронизировать ваш локальный репозиторий в какой-либо другой репозиторий, используя push или pull.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top