linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Удалённые репозитории/clone

kb/remote ── Удалённые репозитории ── beginner

git clone

Создаёт локальную копию удалённого репозитория. Под капотом - `init` + добавление origin + `fetch` всей истории + `checkout` основной ветки. Самая первая команда при работе с чужим проектом.

view as markdownaka: git-clone

git clone <url> [dir] делает четыре вещи за один заход:

  1. git init в указанной директории (по умолчанию - имя репо).
  2. Добавляет remote с именем origin и URL клонирования.
  3. git fetch origin - скачивает все объекты и refs.
  4. Делает checkout default-ветки (обычно main, иногда master).

После этого ты работаешь как с обычным репо: git log, git status, git switch. Прозрачно для пользователя - за этим стоит вся история проекта.

Форматы URL

bash
git clone https://github.com/foo/bar.git           # HTTPS
git clone git@github.com:foo/bar.git               # SSH
git clone ssh://user@host/path/to/repo.git         # SSH с портом
git clone /path/to/local/repo                       # локальный

HTTPS требует логин/токен при push'е (или сохранение через credential helper). SSH требует ssh-keys-git, но не запрашивает пароль каждый раз. В корпоративных репах часто используют SSH ради этого.

Полезные флаги

bash
git clone --depth 1 <url>          # shallow: только последний коммит
git clone --branch dev <url>       # сразу на ветке dev, а не main
git clone --filter=blob:none <url> # partial: без файлов-блобов до checkout
git clone --bare <url>             # без working tree, только .git
git clone --recursive <url>        # с submodules (см. главу 13)

--depth 1 экономит трафик и место на больших репах. Цена - ты не видишь старую историю (git log уходит только на глубину shallow). Push из shallow клона современный Git разрешает, но операции, завязанные на полную историю (merge со старыми ветками, bisect далеко назад), будут спотыкаться. Подходит для CI, где нужна только текущая версия.

Что не клонируется

  • Конфиг .git/config локального репо (свой создаётся на клоне).
  • Локальные ветки источника, которые не были пушнуты в этот URL.
  • Hooks из .git/hooks/ - они локальные у каждого клона.
  • Stash источника.

Клонируются: все коммиты, все ветки, все теги (по умолчанию), вся история.

Подводные камни

  • Клон по HTTPS без credential helper заставит вводить пароль при каждом push. Решение - git config --global credential.helper (на macOS osxkeychain, на Linux cache, на Windows manager-core).
    • Имя remote по умолчанию origin. Можно сразу задать другое через git clone -o upstream <url> или переименовать после клона: git remote rename origin upstream.
    • На git clone приходит вся история - это иногда гигабайты. Для очень больших репозиториев смотри в сторону --filter=blob:none (partial clone) или --depth (shallow).

§ команды

bash
git clone <url>

Полный клон с дефолтной ветки

bash
git clone --depth 1 <url>

Shallow - только последний коммит, экономит трафик

bash
git clone --branch dev <url>

Сразу checkout ветки dev

bash
git clone --recursive <url>

Вместе с submodules

§ см. также

  • fetchgit fetchСкачивает обновления с remote, но **не трогает** локальные ветки. Обновляет только refs/remotes/origin/. Безопасная команда: после fetch ты видишь, что пришло, и решаешь, что с этим делать.
  • remote-cmdgit remoteУправляет списком URL-ов, с которыми связан репозиторий. По умолчанию после `clone` один remote по имени `origin`. Можно добавить второй (`upstream` для fork-flow), удалить, переименовать.
  • ssh-keys-gitSSH-ключи для GitSSH-ключ - пара файлов: приватный (у тебя) и публичный (на сервере). Аутентификация без пароля при push/clone. По безопасности SSH-key с passphrase + ssh-agent и HTTPS + scoped/expiring PAT в credential helper примерно сопоставимы - оба упираются в защиту локального секрета. SSH чаще выбирают за удобство и отсутствие ротации. ed25519 - современный дефолт, RSA 4096 - legacy-совместимость.
  • upstream-vs-originupstream vs originДва общепринятых имени remote. `origin` - куда клонировал (обычно свой fork). `upstream` - «настоящий» проект, у которого ты сделал fork. Это просто конвенция: ничего магического, оба имени можно переименовать.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки