мы недавно переключились с SVN на Git и в то же время перевели наши действующие системы в систему управления версиями (вместо локальной проверки и копирования файлов в живую).
В проекте мне поручено, чтобы мы все имели доступ к одному и тому же репозиторию, и чтобы внести изменения в жизнь, мы просто git pull
там. Это вызывает проблемы, потому что наши веб-дизайнеры вносят изменения в VCS, которые еще не должны быть активными, но должны быть в среде веб-тестирования.
Когда один из разработчиков начинает работать, он получает все (возможно, незавершенные) изменения.
Я думал о переходе вживую на дополнительную ветку и просто объединяю то, что изменилось, но из-за недостатка знаний о git я понятия не имею как.
Моя идея такова:
- Создайте новую ветку в live (
git branch live
). - Каждый раз, когда что-то должно жить
- Напряжения изменение мастеров (например:
git checkout master; git pull; git checkout live
) git merge master
- Напряжения изменение мастеров (например:
Проблема в том, что переключение на мастер или перетаскивание всего непосредственно в работающую систему может вызвать проблемы, поэтому я бы предпочел этого избежать.
Есть ли способ сделать это или есть лучший способ управлять системой Live (кроме обучения веб-игроков, чтобы они не толкали незаконченные вещи).
git pull --all
по умолчанию не будет извлекать мастер в прямом эфире, он извлечет мастер и объединит его с мастером, и (если он существует на сервере) потянет в прямом эфире, чтобы объединить в оперативный. Вы пробовали это?git checkout -f
для игнорирования проблемы - но сделайте резервную копию!Ответы:
Вы можете использовать его
git stash
перед проверкой master и pull, и после проверки live снова используйтеgit stash pop
(или если ваш git старше,git stash apply
иgit stash clear
при условии , что вы больше ничего не спрятали)источник
git pull --all
извлечет все удаленные устройства, но все равно попытается объединить ветку (или ветку по умолчанию) с текущей веткой.git fetch --all
возможно, был бы лучший ответ--all
опцию, вы объедините осьминога разных версий ветки в текущую. ! Поэтому я советую держаться подальше,--all
если только это не то, чего вы хотите, потому что в большинстве других случаев это вам ничего не даст.Я смог вытащить изменения из
origin/master
воmaster
время работы в другой ветви с помощью этой команды:источник
fetch
! =pull
Решите проблему в первую очередь. Они не должны подталкивать к филиалу, к которому они не имеют никакого бизнеса.
То, что вы спрашиваете, было бы что-то вроде
Это попытается объединить удаленный мастер и вашу живую ветку.
источник
Я рекомендую вам создать тестовое репозиторий git, чтобы каждый мог его принять. Все репо, включая ваш живой сайт, будут клонами тестового репо. Таким образом, любой может перейти к тестированию, не касаясь живого веб-сайта. Когда кому-то нужно обновить действующий сайт, вы можете извлечь его из репозитория git testing. Этот рабочий процесс довольно похож на SVN. Для дополнительной гибкости я рекомендую использовать ветку "live", которую вы описываете.
Подводя итог, можно сказать, что все git-репо являются клоном тестового репо. Сайт живого производства также является клоном тестового репо. В качестве альтернативы, тестирование может быть клоном живой продукции, так что «толчок мерзавца» всегда движется к производству.
Другие варианты, включая добавление «живой» ветки к этой договоренности или включение «промежуточного» репо между тестированием и производством. Для дополнительной безопасности я рекомендую ограничить доступ к живому репозиторию git и заставить людей использовать защищенный сценарий, который позволяет работать в прямом эфире.
источник