Git. сохранение измененных файлов

В проекте используем Git, FileZilla, phpStorm.

Есть ли возможность получить измененные файлы одним пакетом (с сохраненной каталоговой структурой)?

Чтобы каждый раз не перезаливая весь проект, или чтобы не пробегать по измененным файлам по отдельности.

Сервер не имеет возможность подтягивать изменения с репозитория.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Сделайте себе деплой через continuous integration сервер и не ипите себе мозг. Рекомендую — Jenkins или Teamcity.

Дело в том, что гит выдает список измененных файлов. На основе этого я написал маленький тулл для своего пользования (adolis.esy.es/filescopier.
Но вполне возможно что существуют аналогичные плагины для программ типа SmartGit или для того-же phpStorm.

вместо file zilla use winSCP. там есть синхронизация. даже watcher настроить можно.
если я правильно понял.

я пользуюсь winSCP но только для комуникации к виртуальной машине. Обязательно посмотрюю ее возможности к синхронизации

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT HEAD~1 HEAD | tar czf changes.tar.gz -T -
Но лучше пойти по правильному пути и исправить эту оплошность:
Сервер не имеет возможность подтягивать изменения с репозитория.

PhpStorm умеет деплоить по FTP/SFTP, но есть одна проблема: окончания строк он считает как различия. Поэтому если у одного девелопера винда, у другого линукс и изначально об одинаковых окончаниях не договорились — этот вариант отпадает. Возможно в будущих версиях это поправят, тикет такой есть. Ещё один недостаток — это очень-очень медленный метод.
Если есть хоть какая-то возможность — лучше поставить на сервер гит и настроить на репозиторий. Понимаю что это может быть сложным решением и потребовать времени, но потом это себя оправдывает, говорю из личного опыта.

Щоб воно працювало швидко, треба прибрати галочку «Perform code analysis» (здається її, я вже точно не пам’ятаю). Я завжди в PhpStorm роблю автодеплой при комміті й спершу також нарікав на повільність, а потім зрозумів, що PhpStorm перед коммітом просто робить забагато зайвої роботи, тепер деплоїться настільки швидко, наскільки це дозволяє з’єднання із сервером.

Сама синхронізація повільна, а вона зазвичай потрібна щоб бути впевненим, що не затреш нічого важливого

Синхронізація — це окрема операція, яка ніяк не пов’язана з деплоєм. Якщо команда працює через гіт, то саме він має піклуватися, щоб ніхто нічого не затер.
Робити синхронізацію перед кожним деплоєм — повне безглуздя.
Ну, й синхронізація в принципі не може бути швидкою: це ж повне порівняння локальних та віддалених файлів.

Якщо команда працює через гіт
Цитую ТСа:
Сервер не имеет возможность подтягивать изменения с репозитория.

Так і не треба. Я ж не про те. Гіт має піклуватися, щоб в усіх в команді була актуальна версія коду і всі конфлікти мають вирішуватися на етапі синхронізації локального та віддаленого репозиторію. Тобто, коли хтось робить деплой, він вже точно має всі зміни, що є на сервері, бо про це попіклувався гіт.

Звісно, мова йде про те, що деплой відбувається тільки при коммітах і ніхто не вивантажить якийсь файл окремо.

Як видалити файли, які стали зайвими? Як при цьому не зачепити файли, завантажені користувачами? Як не залити зайві файли? Як IDE взагалі визначить які файли заливати без синхронізації?

Як при цьому не зачепити файли, завантажені користувачами?
Ви чули про .gitignore? Директорії, в яких контент змінюється в наслідок роботи користувачів із сайтом, взагалі не мають бути під git! І не тільки ті, куди користувачі щось завантажують, але й ті, куди сам сайт щось пише (наприклад, кеш). І в PhpStorm також вказується, які директорії чи файли слід ігнорувати при деплої.
А з видаленням решти файлів я не бачу жодних проблем: і git, і PhpStorm так само спокійно видаляють файли, як і додають.
Як IDE взагалі визначить які файли заливати без синхронізації?
У мене вже починають з’являтися сумніви, чи працювали ви дійсно колись з PhpStorm.
Якщо деплой відбувається при коміті, вивантажуються всі файли, які присутні в коміті, тобто всі, в яких відбулися зміни в межах поточної гілки.
У мене вже починають з’являтися сумніви, чи працювали ви дійсно колись з PhpStorm.
Щодо вас в мене такі сумніви з початку нашої бесіди.
Якщо деплой відбувається при коміті, вивантажуються всі файли, які присутні в коміті, тобто всі, в яких відбулися зміни в межах поточної гілки.
Спеціально для вас скріншот PhpStorm 9. Знайдіть там «файли, у яких відбулися зміни» c2n.me/3oHqeXo
Спеціально для вас скріншот PhpStorm 9. Знайдіть там «файли, у яких відбулися зміни» c2n.me/3oHqeXo
Спеціально для вас скрін з того ж PhpStorm 9:
6.firepic.org/...15-10/11/9enu3pnknjo1.png

Якщо вам ці кольори нічого не говорять, пояснюю:
синій — файл було змінено після останнього коміту
зелений — файл було створено після останнього коміту.

Якщо вам ці кольори нічого не говорять, пояснюю:
синій — файл було змінено після останнього коміту
В мене для вас новини — це не впливає на deployment, це не більше ніж індикатор для зручності.
А завантажуватися при виборі «Upload to <server name=»">" будуть всі файли, які підпадають під mapping. Тобто навіть без синхронізації це досить довго. При тому є ризики, що налаштування маппінгу вже застаріли (а .gitignore PhpStorm не використовує, коли заливає по FTP/SFTP), тому кращє таки синхронізувати.
А завантажуватися при виборі «Upload to <server name=»""">" будуть всі файли, які підпадають під mapping.
Я у першому ж своєму коментарі написав про автодеплой при комміті. І тоді вивантажуються саме оці кольорові файли і тільки вони.
А «Upload to...» я взагалі не використовую. На тестовий сервер все вивантажується автоматично під час кожного збереження. Відповідно, вивантажуються тільки файли, які зберігаються в поточний момент. На робочий сервер — тільки по коммітах.
Я у першому ж своєму коментарі написав про автодеплой при комміті.
А де таку функцію можна налаштувати (не знайшов у себе) і чи розпізнає вона комміт з консолі, чи потрібно комітити лише через інтерфейс PhpStorm?

Якщо робити комміт через інтерфейс PhpStorm, там у вікні є блок «After Commit», у якому можна обрати сервер, на який треба вивантажити файли з поточного комміту.
Консоль не підтримується, там чистий git, а це функція самого PhpStorm.

це дуже корисна інформація. дякую
prntscr.com/8qdysf

как насчет git format-patch / git apply / git am ?

сорри, не понял, что речь идет про деплоймент. тогда, если дерево исходников совпадает с тем, что на сервере, то rsync. иначе — можно попробовать git diff --names-only и rsync/scp.

Может чёт такое github.com/git-ftp/git-ftp, юзал пару раз для говносайтов на «Украине». Но процесс будет работать если сервер обновляется только через эту тему, никаких правок в ручную на сервере, желательно чтоб обновлял один человек. Иначе будет хаос. А вообще, смотрите в сторону каких-нибудь дешевых vps.

Подписаться на комментарии