Ответы пользователя по тегу Git
  • Как сжать папку .git?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    1. git хранит всю историю. Но встроенный garbage collector может удалять коммиты, которые не привязаны ни к какой ветке. Поэтому для начала:
    * Удалите ненужные бренчи.
    * Выполнте "git gc --aggressive --prune" после удаления бренчей.

    2. Затем нужно разобраться с тем, что у вас занимает место. Если вы напихали крупных файлов в ваш гит репо и они присутствуют в активном бренче, то никак их не удалить. Точнее можно попробовать удалить сами файлы вручную или при помощи bfg-repo-cleaner, но при этом надо синхронизировать это со всеми участниками. Если у вас гит репо локальный и никто им не пользуется, это проще. Но при этом вы ломаете коммиты - откатиться на них уже будет нельзя.

    3. Наконец следует потратить вечерок и почитать про git-flow, или даже посмотреть 3-4 ютуб ролика от разных авторов которые показывают разные флоу работы с гитом. Там вы поймете почему и зачем люди пользуются rebase, squash, зачем удаляют ненужные ветки и содержат dev/master в хорошем состоянии, когда там нет промежуточных коммитов с commit message типа "апечатка" "забыл" "еще" и подобного мусора. И гит репо занимает минимальный объем.
    Ответ написан
    Комментировать
  • Как правильно реализовать continuous deployment для запуска миграций?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Ну все руками делается.
    Делаете каталог для файлов миграции и в нем какой-то главный типа control.sh
    в control.sh инклюдите актуальные файлы миграции
    Для дедупликации проще всего в базе сделать таблицу, в которую при миграции добавляется "дата, имя скрипта миграции, статус (completed/failed), и при выполнении скрипта миграции соответствнено он проверяет по базе выполнялся уже или нет, чтобы не запускаться вторично. Может быть какие-то скрипты наоборот нужно прогонять каждый раз, тогда можно в таблицу добавить колонку для такого флага.

    И все. При автодеплое конкретной версии - в ее ветке оно найдет в control.sh список миграционных скриптов, control.sh через базу данных может перепровить надо ли их запускать или пропустить, если они уже выполнились, или выполнить независимо от этого и сделает запись в базу о выполнении.

    Естественно контроль - ответственность разработчиков, магии тут не будет. И предполагается, что вы всегда деплоите более позднюю версию поверх старой.
    Ответ написан
    Комментировать
  • Как релизить фичи сразу в две ветки?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Варианта два.
    1. Переразбить каталоги в репозитории таким образом, чтобы общие вещи было /common, разные вещи были в /prod1 /prod2 и при сборке соответсвенно собирать разные дистрибутивы из (common+prod1) или (common+prod), каждый со своим набором фич. Для этого и джобы в CI разные сделать. Можно даже девелоперов в разные команды распределить. Зависит от того, насколько далеко будут расползаться ваши продукты

    2. Сделать, чтобы включение фич зависело от конфигов. Тогда дистрибутив будет один, но в конфиге prod1 будет feature1=enabled, feature2=disabled и в prod2 будет наоборот.

    Выбирайте что вам подходит больше. Может какая-то смесь.
    Ответ написан
    Комментировать
  • Как синхронизировать два репозитория Git между собой и с репозиторием SVN?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    делать пуш в один репозиторий и в другой репозиторий.
    Ответ написан
  • Как правильно решить конфликты в dev ветке для двух веток в разработке?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    1. Работая над долгоживущей веткой, разработчик просто должен периодически из мастера мержить в свою ветку изменения (можно использовать ребейз или мерж). Тогда при пуше назад в мастер конфликтов либо не будет, либо будут минимальны.

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

    3. Почитайте про гит-флоу, оно не совсем об этом, но позволяет значительно улучшить вид репозитория и истории коммитов
    Ответ написан
    Комментировать
  • Как удобней развернуть действующий проект на тестировании?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Все что вы задали, это не вопросы по гиту. Это вопросы по SDLC - и на эти вопросы можете ответить только вы.
    Гит это просто инструмент версионирования, а не доставки контента.
    Тем более, что даже неизвестно сайт у вас крутится на виртуалке или на хостинге, и в принципе там git поставить есть возможность или нет.

    Да, гитом тоже можно синхронизировать изменения между разными енвайрнментами, но вот те вопросы которые вы задаете - вы сами должны придумать удобный пайплайн и выбрать инструменты (git, scp, rsync, какой-нить CI/CD инструмент или что угодно)
    Ответ написан
    Комментировать
  • Курс или полный гайдлайн по git?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Посмотри пару видяшек в ютубе о git-flow и зачем он нужен.

    Буквально 2-3 примера разных флоу будет достаточно для ознакомления с преимуществами каждой. А дальше мутишь в своем проекте под свои нужды.

    Кому-то нужно CI/CD прямо в продакшен каждый раз как закоммитил. Кому-то нужны коробочные релизы раз в полгода. Кому-то нужны простые регулярные релизы, но при этом распределенная команда из 100 разработчиков 300 тестеров, которые работают в разные спринты, и пока один релиз тестят, другой уже разрабатывают.

    Но это не курс по git, а именно по git-flow (или другими словами настройка code-review/ci/cd процессов).

    Например, если у вас CI с автоматическими тестами не настроен, то мерж любой фича ветки может ломать develop/master ветку. А CI это уже вообще не гит.
    Ответ написан
    Комментировать
  • Как в bitbucket отменить нескольких коммитов?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    если изменения уже запушились в битбакет, то "откатить" их уже нельзя.
    Можно просто откатиться на определенный коммит и закоммитить его еще раз, как новые правки.

    Проделайте это в отдельно взятом бренче, если все будет выглядеть ок - вмержить в мастер или что у вас там основное.
    Ответ написан
    7 комментариев
  • Почему ветки стали странными?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    В чем именно странность?

    IMHO все нормально. Видимо в локальной ветке сделали несколько коммитов, перед тем как сделать пуш. На истории и показывает, что мерж был не одного коммита, а ветки с двумя коммитами в мастер, в котором уже кто-то другой сделал еще один коммит.
    Ответ написан
    1 комментарий
  • Как правильно пушить коммиты?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Никаких "должен одним коммитом или не должен" не существует

    Если ты один, ты можешь вести только один мастер.

    Если команда - вы договариваетесь в команде, как вам удобнее, оформляете это в правила и следуете.

    Продукты бывают разные.
    Довольно распространет git-flow, но его бездумное применение приводит к бардаку и оверинжинерингу.

    Если есть какая-то фича, которую ты за один коммит не можешь сделать, то можешь сделать отдельный фича-бренч для этой фичи, И вести в ней разработку. При этому в случае срочной необходимости что-то исправить в мастере, у тебя мастер стабильный. Потом как фичу доделаешь - вмержишь в мастер.

    Второй вариант использования фича-бренча - это pull request, если вы используете какой-нить code review, и перед пушем в мастер должны быть выполнены дополнительные действия - ручной код ревью или какие-от автоматические тесты, в общем что там в вашем CI наделаете.

    Бывает, что одновременно разрабатывается несколько версий, тогда и "мастеров" может быть несколько (релизные ветки).

    В простых проектах, обычно просто договариваются о name-convention для веток, с которыми потом проще генерировать различные release-notes, или в названии ветки включать номер тикета в багтрекере.
    Ответ написан
    Комментировать
  • Как поддерживать 2 сайта используя один шаблон?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    1. Сделайте две директории со стилями, в зависимости от сайта выливайте на нужный домен нужный каталог.
    2. Если вместо нормального деплой процесса на сайте делаете git pull (ай ай ай, хоть .git скрыли), то можно сделать две директории для разных сайтов, а использовать третью, которая будет являться ссылкой на нужную и присутствовать не в гите а прямо на сайте
    Ответ написан
  • Зачем нужен Git и GitBash?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    github это хостинг, под капотом git и возможно git-bash
    Ответ написан
    Комментировать
  • Как не учитывать компилируемый код в системе GIT, но при этом выкатывать его на прод?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Процедуру деплоя на прод нужно изменить
    Вместо git pull на продакшене, собирайте прод дистрибьюшн на промежуточном сервере в какой-нить tgz и выкладывайте его на прод уже скомпилированным.
    Ответ написан
    Комментировать
  • Как заменить гитовский проект целиком?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Никак. Оставить эти проекты в своих раздельных репозиториях.
    При попытке соединить, если у вас совпадут имена бренчей (а как минимум мастер совпадет), будет жесть.

    Если очень надо - переименовать проект A в A_ARCHIVED а проект B в проект А.
    Ответ написан
    Комментировать
  • Как в git добавить определенную папку?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    git add directory
    Добавит все файлы и поддиректории из directory

    Но естественно в directory должны быть файлы. пустые директории не добавятся.
    Ответ написан
    3 комментария
  • Когда надо пушить git push --tags?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    tag вешается на конкретный коммит.
    Можно повесить тэг на коммит и запушить вместе
    Можно запушить коммит, а потом повесить и запушить тэг.

    Это ваше решение.
    Суть в том, зачем вам нужен тег.
    Многие пользуются бренчами, без тегов.
    Ответ написан
    4 комментария
  • Как и где хранить общие файлы?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    1. а что за общие файлы?
    2. сделать для общих файлов третий репозиторий и коммитить туда
    3. гит сабмодули наверное не самое лучшее решение. Но надо понять что за файлы.
    Ответ написан
    6 комментариев
  • Как большие компании организовывают совместную работу и контроль версий в Unreal Engine?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Чисто гит не проблема поднять на своем корпоративном сервере или у себя дома.

    Гитхаб это не только система контроля версий типа git, но и система код-ревью, с пулл реквестами, настройками доступа. Таких тоже полно - Bitucket, Gitlab, Gerrit, и их тоже можно ставить у себя на своих серверах.
    Ответ написан
    Комментировать
  • Для добавления в gitignor можно дописать нужные папки и сделать еще один коммит, так получится убрать их с гита?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Автоматом убрать не получится.
    Файлы добавленные в .gitignore не будут автоматически коммититься, но если они уже существуют в репозитории, или вы явно добавите какой-либо подобный файл, то сами по себе они удалятся не будут, и их изменения будут автоматически попадать в коммит.

    Поэтому нужно и добавить в .gitignore и явно удалить их из репо.
    Ответ написан
  • Почему при деплое на AWS слетают права на директории?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    git pull не должен ломать права доступа на уже существующие директории, только если вы добавили новую директорию.

    А git clone естественно создает все заново.

    git хранит только executable bit для исполняемых файлов, все остальное создается с дефолтными правами согласно umask.
    Ответ написан
    Комментировать