• Как получать обновления от родительского репозитория GitHub?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Репозиторий созданный из шаблона, не содержит истории «родительского» репозитория. По факту это совершенно другой репозиторий, но созданный на основе последнего состояния проекта в шаблоне. Поэтому не получится так просто получить обновления, как это делается в форках.

    Но можно склеить принудительно:
    # Сохранить адрес шаблона в переменную template 
    git remote add template https://github.com/OWNER/TEMPLATE.git
    # Скачать все обновления
    git fetch template
    # Попробовать сделать слияние ветки BRANCH-NAME шаблона с нашей текущей веткой
    git merge --allow-unrelated-histories template/BRANCH-NAME
    Опция --allow-unrelated-histories нужна, так как истории веток никак не связаны.
    Ответ написан
    Комментировать
  • Можно ли использовать "git pull origin master --allow-unrelated-histories" из за этого потом проблем не возникнет?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Чтобы ошибка не возникала, начинайте свою ветку от той же ветки, в которую вы в конечном итоге хотите обратно влиться. А вы вместо этого вообще новый репозиторий создали? И теперь героически пытаетесь склеить два совершенно разных репозитория. Именно это делает та опция.
    Ответ написан
    Комментировать
  • Как исключить вложенную папку из игнора?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вот правильный .gitignore
    /*
    !/test
    !.gitignore
    Ответ написан
    Комментировать
  • Как сделать reset репозитория если изначально не было gitignore?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Как только файл .gitignore появился в любом каталоге, он сразу начинает работать. Специально ничего делать не нужно.
    Ответ написан
    Комментировать
  • Почему сайт на Next.js после деплоя на GitHub Pages выдает 404?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега GitHub
    Автоматизатор
    GitHub Pages предназначен для статических сайтов и не поддерживает серверные языки, включая Node.js. Если ваш Next.js проект использует Node.js для серверной логики, рассмотрите альтернативные платформы хостинга, такие как Vercel, Netlify или Heroku.
    Ответ написан
    Комментировать
  • Как запушить данные после изменения remote set-url?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Прямым текстом написано
    You are not allowed to force push code to a protected branch on this project

    — у вас нет прав пересоздавать защищенные ветки.

    С какой целью вы пытаетесь затереть другой репозиторий, вместо отправки в новый ПУСТОЙ проект?
    Ответ написан
    6 комментариев
  • Как не обновлять локальный файл docker-compose при git pull?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Git и не удаляет ваши локальные правки. Если вы что-то изменили в рабочем каталоге и не собираетесь это коммитить, то оно и останется в таком состоянии даже после pull. Чаще наоборот спрашивают — почему pull не обновляет такие файлы.

    Но всё равно лучше создать отдельный dev-конфиг — так надежнее.
    Ответ написан
    Комментировать
  • Git выдает ошибку 'credential-store~' is not a git command. Что делать?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Credential Manager забыли установить.
    Ответ написан
    Комментировать
  • Как удалить склонированный репозиторий с локальной машины (linux)?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Рабочий каталог удаляйте таким-же способом.
    cd .. # разумеется надо выйти из него
    rm -r "название каталога"


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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    В 2023 году рекомендованным методом является использование пакета filter-repo
    Задача решается буквально одной командой
    # Клонируем репо в соседний каталог
    git clone --no-local . "../repo2" # тут будет новый репозиторий
    # Перейдем в новый репо 
    cd ../repo2 
    # Оставим в проекте только содержимое подкаталога folder2, 
    # сделав его новым корнем проекта
    git filter-repo --subdirectory-filter "folder2/"
    Ответ написан
    Комментировать
  • Какие программы подойдут для резервного копирования клиентских ПК с медленной сетью и большим объемом данных?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Veeam Backup полностью удовлетворяет вашим условиям.
    1) 2) Копируются только изменения. Первый полный бэкап можно и потерпеть (либо использовать переносной диск), дальше создаются синтетические полные копии быстро если надо.
    3) Управление всеми копиями из единой админки
    4) Поддерживаются репозитории на ReFS под Windows и XFS на Linux. Оба варианта поддерживают быстрое виртуальное клонирование секторов. У меня на одном архивном томе в 5ТБ помещается 18ТБ бэкапов. Каждый день инкрементный снапшот, один комп вообще каждые два часа сохраняю. Раз в неделю создаются полные копии на основе предыдущих инкрементов.
    5) Сервер управления там только под Windows, но на Linux можно хранить репозиторий в XFS, что даёт так же дополнительную фичу неизменяемых бэкапов. Чтобы даже в случае компрометации сервера, вирус не смог бы удалить бэкапы.
    Ответ написан
    8 комментариев
  • Почему Git не дает достать мне что-то из stash?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    В любой непонятной ситуации смотрите git status — там будут все подсказки.
    Ответ написан
  • Как иметь в репозитории 2 ветки и не получать уведомление "Compare & pull request"?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега GitHub
    Автоматизатор
    Это лишь эвристическая подсказка. Она может появиться, а может и нет. Просто не обращайте внимания на неё, если не хотите сливать ветки. В интерфейсе гитхаба много кнопок и вы не обязаны нажимать их все.

    Чаще всего люди спрашивают об обратном — почему такая подсказка у них не вылезла, так как они не знают других способов создать Pull Request. Они привыкли, что гитхаб обычно додумывает за них.

    Ещё вы можете нажать на кнопку, но запрос не создавать. Плашка больше не появится.
    Ответ написан
    Комментировать
  • Как работать в Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Серый цвет у вас скорее всего означает что эти объекты подпадают под игнор.
    Желательно вывести их из игнора, иначе придется индексировать принудительно каждый файл с опцией force
    И не забывайте, что используемый вами ключ --all не будет добавлять в репо новые файлы, обработаются только уже существующие но измененные файлы.
    Ответ написан
    1 комментарий
  • Как залить проект на гитхаб с сохранением папок?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега GitHub
    Автоматизатор
    Эти папки у вас существуют только в рабочем каталоге и их нет в репозитории, потому что гит отслеживает только файлы. Невозможно закоммитить пустой каталог. Каталоги фигурируют лишь как часть полного пути к файлам.

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы же не на пустом месте ветку создали? В момент создания ветки «в неё» сразу попадают все предыдущие коммиты вниз по истории дерева коммитов. И после отправки, в ветке внешнего репозитория появится ровно столько коммитов, сколько было в локальном.

    Другими словами — ветка это не какое-то хранилище, в которое складываются коммиты. Ветка это указатель на точку на дереве коммитов проекта. А дерево уже содержит все коммиты проекта.
    Ответ написан
    Комментировать
  • Как откатить результат если не комитил?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Неважно, что вы делали, гит перед каждым изменением записывает хэш указателя текущей ветки в специальный журнал — reflog. Соответственно вы можете этот журнал посмотреть командой git reflog
    А можно просто сослаться на порядковый номер в журнале и откатить текущую ветку на два шага назад:
    git reset --hard HEAD@{2}
    Как-то как.
    Ответ написан
    Комментировать
  • Как удалить коммит из ветки?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если вы под головным коммитом имеете в виду самый последний и нужно «удалить» предыдущий коммит, то можно использовать опцию --onto, предназначенную для перемещения произвольных цепочек коммитов на новое место:
    git rebase --onto <новая база> <старая база> <конец цепочки>

    или для вашего случая:
    git rebase --onto HEAD~2 HEAD~1 HEAD

    o———A ← HEAD~2
         \
          B ← HEAD~1
           \
            C ← HEAD

    Получим:
    o———A ———С' ← HEAD
         \
          B
    Ответ написан
    Комментировать
  • Как происходит разработка по почте?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Единственный такой проект, о котором я слышал — это разработка ядра Linux. Там изначально велась разработка по почте. Да и сейчас кажется ничего не изменилось. На гитхабе мы видим лишь зеркало проекта. Гит изначально был придуман Торвальдсом специально так, чтобы он максимально прозрачно интегрировался в такой процесс. Даже коммиты при просмотре выглядят как электронные письма — там есть имя и мыло автора, тема, тело с подробным описанием изменений…

    А ответ на вопрос «как?» вы найдете в официальной книге Pro Git. Там этому посвящена целая глава. Учебник продолжает дополняться и переписываться сообществом, в том числе и на русском.
    Ответ написан
    1 комментарий
  • Как опубликовать решение на GitHub без перезаписи существующей ветки?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы наверное забыли задать имя для собственной ветки.
    Сейчас создайте новую ветку, с именем, которого ещё нет на гитхабе и тогда она ни с кем не будет конфликтовать
    Например так:
    git branch ветка # придумать название вашего проекта
    git switch ветка # сделать эту ветку текущей
    git push -u origin ветка # отправить текущую ветку в ветку «ветка» и связать их
    Ответ написан
    1 комментарий