Как обрабатывать рабочий процесс git, смешанный с SFTP и удаленными изменениями одновременно?
У меня есть машина разработчика и удаленный тестовый сервер.
Машина разработчика будет фиксировать файлы A + B + C и уже отправила файлы A и C на тестовый сервер через SFTP (в моем редакторе). A и C были изменены с момента последнего коммита, но могли или не могли быть изменены с момента загрузки.
Тестовый сервер имеет как неотмеченные (файлы A + Y), так и неотслеживаемые модификации (файлы C + Z), которые я не хочу ставить или фиксировать.
Я обычно вручную делаю git checkout A
а также rm Y
на тестовом сервере (отмените все модификации SFTP с момента последней фиксации), а затем извлеките фиксацию. Тогда у нас есть те же файлы A + B на компьютере разработчика.
Как мы могли бы сделать это с командами, где нам не нужно указывать точные файлы для checkout/rm на тестовом сервере, в реальном сценарии, где может быть больше файлов для извлечения / rm перед pull?
Этот рабочий процесс имеет преимущество в том, что он поддерживает чистоту истории git, в то же время обновляя тестовый сервер с файлами, которые я редактирую.
--- начало решения ---
git fetch
cd `git rev-parse --show-toplevel`
git diff --name-only origin/mybranch..origin/mybranch~1|cat
// for each x in last output: rm x; git co x
git stash
git pull --rebase
git stash pop
2 ответа
Извините, если я предложу другой путь, но ваш подход, кажется, усложняет ваш процесс за пределы простой простоты, которую вы можете достичь с помощью централизованной структуры git-репо и хорошего виртуального частного сервера.
Моя рекомендация относительно процесса развертывания очень проста:
- Есть центральное хранилище.
- Получите SSH доступ к вашему хосту.
- Каждый во время dev тянет из центрального репозитория (github или bitbucket), с определенной веткой (
live
,master
, что угодно) для кода, который будет развернут, все остальное - это ветки dev или feature. - Развертывание становится только тянуть. Любые изменения должны быть сделаны вне сервера или реплицированы вне сервера, а затем извлечены. Если вам нужно сделать исправления на своем действующем сервере или развернуть сервер, это когда-нибудь понятно, но как можно скорее отодвиньте их обратно в центральное хранилище, поскольку чем больше вы теряете синхронизацию, тем более болезненным будет возможное слияние или перебазирование быть.
- В идеале вы должны вызвать сценарий развертывания, чтобы извлечь последние изменения из ветки staging / master / live. В противном случае, введите SSH в свой ящик, чтобы получить простую ускоренную пересылку git, а затем скопируйте эти файлы в папку развертывания или создайте простой сценарий развертывания.
- Никогда не сохраняйте изменения в развертывании, всегда в репо.
Опять же, это требует изменения точки зрения, потому что переключение с развертывания с SFTP на ssh не легкое, но вы уже используете git! так что вы, вероятно, выиграете от дополнительной гибкости и мощности. Если вы действительно не можете получить ssh-доступ к своему хосту, это будет симптомом использования хоста, не дружественного к разработчикам / с недостаточной мощностью, подумайте о возможности обновления!
git reset --hard
отменяет все модификации с момента последнего коммита.
git clean
очистит все неотслеживаемые файлы (не уверен, что вы опубликовали, если вам это тоже нужно).
Тем не менее, должен сказать, что ваш рабочий процесс немного странный. Обычно вы тестируете свои изменения в локальной среде или в виртуализированной среде разработки. Может быть, вы должны следовать рекомендациям Kzqai и изменить свой рабочий процесс.