• Как скопировать не все файлы из github?

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

    Тут неплохо бы связаться с админами репозитория и попросить вычистить мусор оттуда, пока ситуация не усугубилась.

    А если вам сейчас не терпится скачать проект, то можно вытянуть отдельный коммит из старой истории, когда лишней папки там ещё не было. Если вы узнаете хэш, то скачать коммит в пустую папку можно так
    git init
    git fetch --depth=1 <repository_url> <commit_hash>
    git checkout FETCH_HEAD


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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    по мнению status никаких неотслеживаемых файлов нет, а по мнению pull есть неотслеживаемые файлы которые будут перезаписаны. Как так?

    Легко! В вышестояшем репозитории эта папка закоммичена. При pull возникает конфликт.

    А вот кстати и коммит который пытаюсь спулить:
    [htdocs]$ git status

    Коммит то где? Статус рабочего каталога это не коммит.

    Что может быть не так?

    Забудьте про команды типа
    git add --all .
    git commit -am "..."

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

    И покажите свой .gitignore
    Ответ написан
    Комментировать
  • Можно ли частично изменить маску подсети в сети организации?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Смогут ли хосты со старыми настройками выходить в интернет?

    Да, хосты с маской /23 смогут выходить в интернет, если:
    • Шлюз настроен правильно (10.0.100.1).
    • Роутер настроен на работу с сетью 10.0.100.0/22.

    Почему это работает:
    • Маска /22 охватывает сеть /23, поэтому роутер корректно маршрутизирует трафик от хостов с /23.
    • Хосты со старыми настройками продолжат считать, что их сеть состоит из 10.0.100.0–10.0.101.255, а для остального трафика обращаться к шлюзу.


    Будет ли работать проброс портов с роутера на статический хост со старыми настройками?

    Да, проброс портов будет работать при следующих условиях:
    • Роутер настроен на маску /22 и принимает трафик для всей сети 10.0.100.0/22.
    • Правила NAT и проброса портов корректно настроены.

    Почему это работает:
    • Роутер с маской /22 считает, что хосты с маской /23 принадлежат этой сети.
    • Маска хоста не влияет на обработку трафика роутером, если тот маршрутизирует пакеты корректно.
    Ответ написан
    2 комментария
  • Как правильно использовать гит, если нужны данные из другой ветки?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Создать ветку от актуального мастера и потом влить в нее нужные правки из другой ветки это нормально.

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

    Черипикать опасно. Этим вы можете нечаянно обнулить все доработки первой задачи, которые будут там сделаны позднее.
    Ответ написан
    Комментировать
  • Почему запрашивается пароль при git push если авторизация по ключу настроена?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если вы хотите аутентификацию по ключу, то вам нужен remote с URL для SSH-протокола, а у вас тут HTTPS-протокол, на который ваши SSH-ключи никак не влияют — там аутентификация своя — по паролю, либо токену.

    Скорее всего вам надо поменять ссылку на правильную.
    git remote set-url origin git@gitlab.com:malashko/bla-bla-bla.git
    Ответ написан
    1 комментарий
  • Как откатить состояние папки в Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Отменить все незакоммиченные изменения в рабочем каталоге поможет команда
    git reset --hard

    PS. Немного подумав мне теперь нравится такой универсальный и более корректный способ.
    git restore --source=хеш_коммита --staged --worktree .

    Затем не забудьте закоммитить новые изменения.

    Указывая --source=хеш_коммита, вы говорите Git использовать содержимое файлов из этого коммита.

    Флаг --staged значит, что изменения будут сразу проиндексированы, как если бы вы их добавили с помощью git add. Этот флаг особенно полезен, если вы хотите сбросить изменения, которые уже были добавлены в индекс, но ещё не закоммичены.

    Флаг --worktree указывает Git восстановить файлы в рабочем каталоге до состояния указанного коммита. Это означает, что любые незакоммиченные изменения в рабочих файлах будут сброшены, и файлы будут восстановлены до состояния, соответствующего указанному коммиту.

    Точка в конце команды указывает, что операция восстановления должна быть применена ко всем файлам в текущем каталоге и его подкаталогах. Это значит, что все файлы в проекте будут восстановлены до состояния, соответствующего указанному коммиту.
    Ответ написан
    5 комментариев
  • Как удаленно инициализировать репозиторий на GitHub в 2024 году?

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

    Чем вам вообще не устроил официальный GitHub CLI?
    gh repo create Sushilka
    Одна строка вместо вашей портянки и никакие токены не нужны.
    Ответ написан
    Комментировать
  • Как удалить отслеживание версий в случайно созданном репозитории Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Чтобы прекратить отслеживание версий в случайно созданном репозитории в каталоге C:\Users\<МойПользователь>, можно воспользоваться командой в Git Bash:

    rm -r "~/.git"

    Команда удалит каталог .git и все его содержимое (рекурсивно) из указанного пути. В данном случае, путь указывает на домашний каталог пользователя (обозначенный как ~)
    .git — это скрытый каталог, используемый Git для хранения всех данных о репозитории (коммиты, история, конфигурация и т. д.). Удаление этого каталога приведет к удалению всей информации о репозитории, фактически «разгитив» проект.
    Ответ написан
    Комментировать
  • Почему проект на GitHub не виден другим пользователям?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега GitHub
    Автоматизатор
    Это может быть связано с тем, что ваш аккаунт подвергся ограничению за нарушение правил сервиса — своего рода «теневой бан». Рекомендую проверить свою почту на наличие писем от GitHub с темой Your account has been flagged. Если такое письмо есть, вам нужно будет следовать инструкциям в нем, чтобы разблокировать свой аккаунт.
    Ответ написан
    Комментировать
  • Как отменить локальный коммит средствами Visual Studio?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Не надо ничего добавлять. В интерфейсе Visual Studio уже всё есть.
    Кликаете на коммит, на который хотите сбросить историю и выбираете Reset — Keep Changes (--mixed)
    В русском интерфейсе это наверное будет Сброс — Оставить изменения. Аналог смешанного сброса в TortoiseGit
    66ea17a6381fa887017520.png
    Смешанный режим это --mixed — откатывает коммиты и индекс: оставляет изменения в рабочем каталоге, но очищает индекс. Это режим по умолчанию команды reset без опций.
    Мягкий режим это --soft, когда делается всё то же, что и выше, но индекс не трогается.
    То что вы отметили стрелкой на скрине в комментариях это вообще revertи он не годится для причесывания истории.
    Ответ написан
    1 комментарий
  • Как можно в корневом репо игнорировать файлы закоммиченные в репозитории находящемся во внутренней подпапке?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Чтобы игнорировать содержимое вложенного репозитория, ничего делать не нужно — Git уже всё за вас придумал. Он автоматически игнорирует рабочий каталог, в котором находится .git. Игнорирует все файлы, даже закоммиченные.
    Ответ написан
    Комментировать
  • Как сделать несколько Merge Request для разных коммитов?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Merge Request — это запрос на слияние веток. Нет такого понятия, как «слияние коммитов». Сливаться будет вся цепочка коммитов, которая ответвилась от базовой ветки, а не только тот коммит, который существовал в ветке на момент создания запроса на слияние.

    Чтобы создать три запроса, вам нужно раскидать эти коммиты по трем разным веткам.

    Для каждого запроса на слияние создается отдельная ветка, потому что нельзя одну и ту же ветку слить дважды разными запросами. Хотите новый запрос — создавайте новую ветку. Ветка создается не откуда попало, а от главной ветки, в которую вы хотите вливаться.

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

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    @echo off
    chcp 1251 >nul
    echo %date% %time% >spisok.txt
    
    setlocal enabledelayedexpansion
    set "separator=, "  REM выведем названия через запятую
    
    set "line="
    for %%f in (*) do (
        if defined line (
            set "line=!line!%separator%%%f"
        ) else (
            set "line=%%f"
        )
    )
    
    echo !line! >> spisok.txt
    endlocal
    Ответ написан
    4 комментария
  • Можно ли удалить файл из github, но оставить локально?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Использвую GitHub Desktop
    Зачем вы его используете? Чего именно вам не хватает в Git-клиенте встроенном в Visual Studio?

    Как удалить файл из репозитория, но оставить в рабочем каталоге? Это просто сделать в терминале.
    git rm --cached "путь/к/файлу"
    git commit

    Но это сохранит файл только на одном компьютере. Если вы работаете с проектом не один, то файл удалится у коллег, когда они обновятся. Затем им придется руками восстановить файл из репозитория примерно так.
    git checkout HEAD~1 -- "путь/к/файлу"
    Ответ написан
  • Почему файлы .idea не игнорируются, несмотря на добавление в .gitignore в PyCharm?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Комментариии в файле .gitignore начинаются с символа решетки # в начале строки.
    Тут нам помогает подсветка синтаксиса и правильные комментарии выглядят затемненными.
    Вы же испортили правило дописав посторонние символы в конец и поэтому оно у вас не работает.
    Ответ написан
    Комментировать
  • Почему зависает commit?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    он просит ввести описание

    Всё верно. Запускается текстовый редактор с заготовкой сообщения коммита. Вам нужно ввести свой текст тут. А всё что закомментировано — будет отброшено.

    ввожу несколько символов

    По скрину не заметно, что вы что-то написали.

    и так зависает

    Не зависает. Дальше вы должны сохранить изменения и корректно выйти из редактора, чтобы процесс создания коммита продолжился с этим сообщением коммита.

    Если переоткрыть командную строку и запустить опять он говорит что есть swap файл

    Если убить терминал, запущенным внутри него редактором, то в каталоге проекта останется временный рабочий файл редактора vim и повторная попытка команды commit выдаст вам закономерную ошибку
    говорит удалить его


    Если вам трудно работать в vim, то просто переустановите гит, и на шаге, где предлагается выбрать редактор — укажите из списка ваш любимый редактор. Если тот редактор ещё не установлен, то там есть ссылка на сайт, откуда можно его установить. Затем в мастере делаем шаг назад и снова вперед. Тогда редактор становится доступным.
    Ответ написан
    Комментировать
  • Почему git внезапно увидел изменения в исключенной папке?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Поиск по аналогичным вопросам говорит, что состояние каталога (modified content, untracked content) возникает при наличии вложенного репозитория внутри него. Такой каталог будет полностью игнорироваться вышестоящим репозиторием, так как нельзя закоммитить один репозиторий внутрь другого.

    Если вас напрягает это сообщение в статусе, то нужно удалить вложенный репо
    # удалите папку .git, которая внутри каталога bitrix 
    rm -rf "bitrix/.git"
    # скажите гиту, чтобы он забыл, что перед этим видел там вложенный репозиторий 
    git rm --cached "bitrix/"
    Ответ написан
    5 комментариев
  • Как сделать чтобы git pull работал для всех веток?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Чтобы git pull без указания репозитория и ветки сам понял откуда брать обновления, вы должны эту информацию ранее сообщить гиту. Потому что внешний репозиторий не обязан называться origin, а название внешней ветки не всегда совпадает с локальной. Вы читали подсказку которую вам гит дал при неудачной git pull? Там он вам сообщил, что текущая локальная ветка не связана ни с какой веткой внешнего репозитория и подсказал какой командой эту связь создать. Но обычно мы эту связь создаем автоматически при первой отправке новой ветки, добавив ключик -u в команду push. Полное название ключа --set-upstream. Когда вы пушите через графический интерфейс, то там тоже должна быть галка для этого.
    Ответ написан
    Комментировать
  • Git удалил коммит/ы при переключении веток с помощью checkout?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Git удалил коммит

    Коммиты удалить довольно сложно. И случайно это сделать вы уж точно не сможете.

    Как нормально переключаться, чтобы гит не удалял ничего?

    Очень просто. Перед тем как переключать ветки всегда смотреть git status, чтобы в рабочем каталоге не было несохраненных изменений. Если изменения есть, то их надо закоммитить, т. е. сохранить, либо сбросить, вернув файлы к первоначальному состоянию через restore например.

    вообще 1 лог остался изначальный

    Эта фраза вообще не понятна.

    если созданы новые файлы или переименованы, и ты возвращаешься, то он их не удаляет

    Это гит так заботится о вас. Он сам постарается не уничтожать вашу несохраненную работу, которая лежит незакоммиченная в рабочем каталоге. Это не баг, а фича. С какого перепугу он должен уничтожать что-то?
    Ответ написан
    6 комментариев
  • По какой логике в GitHub появляется кнопка Prev/Next при просмотре коммитов?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега GitHub
    Автоматизатор
    На скрине у вас какой-то очень долгоиграющий Pull Request. Никогда не видел, что за сотни коммитов так и не смогли доделать задачу. Обычно требуется максимум десятки итераций.

    Первый скрин получится если кликнуть на один из коммитов пиара и смотреть его изменения. Соответственно появляются кнопки вперед и назад, для перемещения между этими 269 коммитами и просмотра их по одному.

    В том выпадающем окошке, которое вы замазали, в самом начале есть «секретные» опции
    668f7bb800f84301250634.jpeg
    • Показать сразу все изменения пиара.
    • Показать только то, что изменилось после вашей последней рецензии.
    • Либо с зажатой клавишей Shift выделить диапазон коммитов.


    При выборе этих вариантов покажется суммарный вклад многих коммитов и тогда кнопки вперед и назад уже неуместны.
    Ответ написан
    Комментировать