В чем разница git init и git clone
Что проверяют
Понимаете ли вы, откуда берётся локальный репозиторий и как он связан с удалённым. Следом обычно спрашивают, что именно скачивает git clone и как привязать к GitHub проект, созданный через git init.
Как отвечать
Обе команды создают локальный репозиторий, разница в том, откуда берётся содержимое:
git init: создаёт каталог.gitв текущей папке. Коммитов нет, удалённых репозиториев нет. Команда безопасна и в папке с готовым кодом: файлы остаются на месте, просто пока не отслеживаются;git clone <url>: создаёт новую папку, скачивает все объекты и полную историю, прописывает удалённый репозиторий под именемoriginи переключается на ветку по умолчанию. Остальные ветки приходят какorigin/feature-x, локальных веток для них пока нет.
Для C# проекта путь с нуля такой: git init, затем dotnet new gitignore, чтобы в историю не попали bin/, obj/ и .vs/, первый коммит, git remote add origin <url> и git push -u origin main. Полезные ключи клона: --depth 1 для неглубокой копии в CI, --branch для конкретной ветки, --recurse-submodules, если в решении есть подмодули.
Имя первой ветки после git init задаёт настройка init.defaultBranch. Без неё локальная ветка может называться master, а на GitHub ветка по умолчанию main, и так легко получить две разные ветки.
Где спотыкаются
Говорят, что клон «скачивает только последнюю версию файлов». Без --depth приходит вся история, поэтому git log и git blame работают без сети.
Утверждают, что клон создаёт локально все ветки. На деле локальная ветка одна, остальные видны как удалённые, а git switch feature-x создаёт локальную копию при первом переключении.
Делают git init, а потом git pull из репозитория, где уже есть коммиты, и получают refusing to merge unrelated histories. Если проект уже существует удалённо, его нужно клонировать.