Перейти к содержимому

Что значит клонировать репозиторий

  • автор:

Клонирование репозитория

Другой распространенный способ начала работы с Git — это клонирование существующего репозитория. При клонировании Вы получаете последнюю версию всех файлов и папок репозитория, плюс всю его историю. Таким образом, каждый клон — это полноценный Git-репозиторий.

Git позволяет клонировать как локальные, так и удаленные репозитории, с помощью команды git clone . Базовый синтаксис этой команды довольно прост: Вы указываете путь к репозиторию, а также, если необходимо, наименование папки, в которую будет помещен его клон.

Локальное клонирование

Вы можете клонировать репозитории на своей рабочей машине. Например, клонируем созданный нами ранее репозиторий my_first_repo :

cd .. git clone my_first_repo/ my_first_clone

Вы должны получить следующее сообщение:

Cloning into my_first_clone. done. warning: You appear to have cloned an empty repository.

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

По умолчанию Git не будет копировать объекты при локальном клонировании репозитория. Вместо этого он создаст жёсткие ссылки (hard links) в целях экономии места. Если Вы хотите сделать полноценную копию репозитория (например, в целях резервного копирования), используйте параметр —no-hardlinks :

git clone --no-hardlinks /path/to/repo destination_directory

Клонирование удаленных репозиториев

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

Для примера создайте клон тренировочного репозитория (этот репозиторий специально подготовлен для занятий этого курса и размещен на GitHub):

cd .. git clone git://github.com/inca/gitbook-sample

В результате выполнения получаем примерно следующее:

Cloning into gitbook-sample. remote: Counting objects: 18, done. remote: Compressing objects: 100% (16/16), done. remote: Total 18 (delta 0), reused 0 (delta 0) Receiving objects: 100% (18/18), done.

Git для начинающих. Урок 2.
Создание и клонирование репозитория

Краткое содержание урока, основные инструкции для командной строки, полезные ссылки и советы.

Что такое репозиторий

Это каталог в файловой системе, где хранится информация о проекте:

  • файлы и папки проекта
  • история проекта
  • настройки проекта
  • служебная информация

Информация о репозитории хранится в скрытой папке .git в корне проекта.

Можно ли работать с git локально

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

Локальный репозиторий

Это репозиторий, который хранится на нашей машине, в рабочей папке проекта. Это та самая скрытая папка .git

Удаленный репозиторий, зачем он нужен

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

Плюсы удаленного репозитория

  • выполняет роль резервной копии
  • возможность работать в команде
  • некоторые дополнительные возможности, которые предоставляет хостинг. Например, визуализация истории или возможность работать над проектом прямо в веб-интерфейсе

Что такое клонирование

Это копирование удаленного репозитория на локальную машину. Обычно это первое действие при работе с проектом. При клонировании на нашу машину копируются файлы и папки проекта и вся его история. То есть мы получаем доступ к истории не с момента начала нашей работы над проектом, а с самого начала проекта.

Как клонировать готовый проект

В первую очередь, нужно получить ссылку на проект. Мы можем найти ее сами или получим готовую, например, на новой работе. Возьмем для примера репозиторий vuejs — https://github.com/vuejs/vue.git

Наберем в командной строке

 $ git clone https://github.com/vuejs/vue.git 

При этом в текущем каталоге создастся папка vue, в ней окажутся все файлы проекта vue и специальная скрытая папка .git, то есть сам репозиторий, или информация о нем.

Как клонировать проект в другую папку

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

 $ git clone https://github.com/vuejs/vue.git vue-new 

Где vue-new — нужное название папки.

Свой удаленный репозиторий

Для своих проектов нам понадобится собственный репозиторий. Можно работать и локально, но плюсы удаленного мы уже рассматривали выше. Теперь нужно выбрать хостинг для наших git-проектов.

Где держать репозиторий

Есть множество вариантов, самые известные — это github и bitbucket. Нужно выбирать.

github или bitbucket

На самом деле не парьтесь. У них схожий функционал, и в начале работы с git мы не заметим разницы. bitbucket мне нравится больше из-за интерфейса, но в уроках выберем github из-за его большей популярности.

Чтобы продолжить уроки, нужно зарегистрироваться на github. Если у вас нет там аккаунта, то форму регистрации увидите сразу на главной странице — https://github.com/

Как создать репозиторий в github

После регистрации создание репозитория доступно с главной страницы github. При создании нужно указать название проекта и тип (публичный или приватный). На остальное пока не обращаем внимания.

Права на репозиторий, публичные и приватные

Есть 2 типа репозиториев:

  • публичный (public), открыт всем
  • приватный (private), доступен только определенному кругу лиц — в первую очередь, нам самим

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

Для себя будем создавать приватные репозитории. Для этого нам понадобятся ssh-ключи.

нельзя просто так клонировать приватный репозиторий

Что такое ssh-ключи

ssh-ключи используются для идентификации клиента на сервере при подключении по безопасному ssh-протоколу. Другими словами, ssh-ключ нужен для того, чтобы пускать на сервер только определенных клиентов. Только тех, кому разрешен доступ к проекту.

ssh-ключ не имеет прямого отношения к git, но так репозитории находятся на удаленных серверах, то ssh-ключи используются для разграничения доступа к приватным репозиториям.

ssh-ключ состоит из пары ключей: публичного и приватного ключа. Это просто 2 текстовых файла:

  • /домашний-каталог/.ssh/id_rsa.pub — публичный
  • /домашний-каталог/.ssh/id_rsa — приватный

Публичный ключ передается сторонним серверам, например, github, для открытия доступа на эти сервера. Приватный ключ хранится только на нашей машине и никому не передается. То есть когда у нас просят ssh-ключ, чтобы дать доступ на какой-нибудь сервер, мы отдаем именно публичный ключ, id_rsa.pub

Как сгенерировать ssh-ключ

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

 $ cd ~/.ssh $ ls -l 

Если видим файлы id_rsa и id_rsa.pub — отлично, ключи уже есть.

Если этих файлов нет, то нужно сгенерировать ключи утилитой ssh-keygen. В Windows она устанавливается вместе с git, в Linux и MacOS при необходимости установите. В Linux, например, вот так

 $ sudo apt install ssh-keygen 

После этого нужно сгенерировать пару ключей, запустив команду в терминале

 $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 
 $ ls -l total 24 -rw------- 1 sn8 sn8 1675 Feb 11 2017 id_rsa -rw-r--r-- 1 sn8 sn8 392 Feb 11 2017 id_rsa.pub -rw-r--r-- 1 sn8 sn8 5746 Oct 28 21:52 known_hosts 

Появились файлы id_rsa и id_rsa.pub — значит, ключи успешно сгенерированы.

known_hosts — это файл, в котором ssh прописывает сервера, на которые мы заходим. При первом подключении к github нужно будет разрешить доступ к github.com (напечатать yes в терминале)

Как добавить ssh-ключ в настройках github

Открываем публичный ключ id_rsa.pub и копируем его содержимое. В настройках github ищем раздел «SSH и GPG keys» — https://github.com/settings/keys. Жмем «New SSH key», задаем название ключа, например, имя, и вставляем форму публичный ключ, прямо текстом. Все, теперь у нас есть доступ к нашим приватным репозиториям.

Два способа создания проекта

Первый, когда мы начинаем новый проект. Удобнее будет создать репозиторий на github и склонировать пустой проект на локальную машину.

Второй, когда у нас уже есть проект. Нужно зайти в папку проекта и связать его с уже существующим репозиторием на github. Это называется инициализация.

Рассмотрим оба способа.

Пустой проект

Создаем приватный репозиторий на github, назовем его first-site. Я зарегистрировался под именем Webdevkin, моя ссылка для клонирования будет такая — git@github.com:Webdevkin/first-site.git. Ваша зависит от имени пользователя.

Идем в командную строку и запускаем

 $ git clone git@github.com:Webdevkin/first-site.git 

В текущей папке получим новую папку с названием first-site — это и есть наш проект.

P.S. У вас склонировать этот репозиторий не получится — он закрытый. Создайте свой 🙂

Непустой проект

Допустим, у нас на локальной машине уже есть проект second-site. Создаем в github репозиторий second-site. Заходим в папку проекта и выполняем команды

 $ git init $ git add . $ git commit -m "Initial commit" $ git remote add origin git@github.com:Webdevkin/second-site.git $ git push -u origin master 

Все, можно приступать к работе над проектом. Команды add, commit и push мы разберем в следующих уроках.

Это единственный урок, в котором мы разбирались с тонкостями репозиториев. В дальнейшем будем считать, что репозиторий = проект.

Что могу посоветовать

  • github или bitbucket? Для личных проектов неважно, оба сервиса разрешают бесплатно создавать приватные репозитории. Для open source или резюме — github
  • не увлекайтесь клонированием в папку со своим названием. Есть шанс запутаться, самому или коллегам
  • не путайте публичный и приватный ключи. Отдаем вовне только публичный ключ id_rsa.pub
  • при смене рабочей машины можно не генерировать ssh-ключи заново, а скопировать их со старой машины. Тогда не придется заново прописывать новые ключи на серверах

Немного подробнее о копировании ssh-ключей

Как скопировать ssh-ключи с одной машины на другую

Хочу немного затронуть эту тему отдельно. Генерировать ключ на новой машине не обязательно. Но нужно выполнить такие действия

  • Скопировать id_rsa и id_rsa.pub со старой машины на новую
  • Посмотреть права на файлы, возможно, ключи окажутся слишком «открытыми» для записи и потребуется сменить им права доступа — sudo chmod 700 ~/.ssh/*
  • Выполнить команду ssh-add

Ссылки, которые могут пригодиться

  • github — https://github.com/
  • bitbucket — https://bitbucket.org/
  • подробнее об ssh-ключах (en) — connecting-to-github-with-ssh

На этом все. В следующем уроке мы сделаем первые изменения в проекте и начнем понимать, в чем заключается прелесть git.

Спасибо за внимание и до встречи!

Все уроки курса

  • Вводный урок
  • 1. Установка и базовая настройка git
  • 2. Создание и клонирование репозитория git
  • 3. Делаем первые изменения, git status и git diff
  • 4. Коммиты и история коммитов, git commit, git log и git show
  • 5. Подробнее об истории коммитов. Путешествие по истории
  • 6. Работа с сервером, git push и git pull
  • 7. Ветки — главная фишка git, git branch и git checkout
  • 8. Работа с ветками на сервере, git fetch
  • 9. Слияния или мерджи веток, git merge
  • 10. Конфликты и их разрешение
  • Платная часть курса. Презентация
  • * 11. Работа с gitignore и git exclude
  • * 12. Буфер обмена git, git stash
  • * 13. Копирование коммитов, git cherry-pick
  • * 14. Отмена и редактирование последнего коммита
  • * 15. Отмена произвольного коммита, git revert
  • 16. Склеивание коммитов, git rebase —interactive и git reflog
  • * 17. Зачем склеивать коммиты. Плюсы и минусы сквоша
  • * 18. Работа с git rebase. Отличия от merge
  • * 19. Что такое git push —force и как с ним работать
  • * 20. Ищем баги с помощью git, git bisect
  • * 21. Как и зачем работать с тегами git
  • * 22. Процессы: github flow и git flow
  • * 23. Псевдонимы в git
  • 24. Мердж-реквесты
  • * 25. Форки

Клонирование репозитория

When you create a repository on GitHub.com, it exists as a remote repository. You can clone your repository to create a local copy on your computer and sync between the two locations.

Platform navigation

Tool navigation

About cloning a repository

You can clone a repository from GitHub.com to your local computer, or to a codespace, to make it easier to fix merge conflicts, add or remove files, and push larger commits. When you clone a repository, you copy the repository from GitHub.com to your local machine, or to a remote virtual machine when you create a codespace. For more information about cloning to a codespace, see «Creating a codespace for a repository.»

You can clone a repository from GitHub.com to your local computer to make it easier to fix merge conflicts, add or remove files, and push larger commits. When you clone a repository, you copy the repository from GitHub.com to your local machine.

You can clone a repository from GitHub.com to your local computer to make it easier to fix merge conflicts, add or remove files, and push larger commits. When you clone a repository, you copy the repository from GitHub.com to your local machine.

Cloning a repository pulls down a full copy of all the repository data that GitHub.com has at that point in time, including all versions of every file and folder for the project. You can push your changes to the remote repository on GitHub.com, or pull other people’s changes from GitHub.com. For more information, see «Using Git».

You can clone your existing repository or clone another person’s existing repository to contribute to a project.

Cloning a repository

  1. On GitHub.com, navigate to the main page of the repository.
  2. Above the list of files, click

Screenshot of the list of files on the landing page of a repository. The

Code.

    To clone the repository using HTTPS, under «HTTPS», click

Screenshot of the

.

git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY 
$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY > Cloning into `Spoon-Knife`. > remote: Counting objects: 10, done. > remote: Compressing objects: 100% (8/8), done. > remove: Total 10 (delta 1), reused 10 (delta 1) > Unpacking objects: 100% (10/10), done. 

To learn more about GitHub CLI, see «About GitHub CLI.»

To clone a repository locally, use the repo clone subcommand. Replace the repository parameter with the repository name. For example, octo-org/octo-repo , monalisa/octo-repo , or octo-repo . If the OWNER/ portion of the OWNER/REPO repository argument is omitted, it defaults to the name of the authenticating user.

gh repo clone REPOSITORY 

You can also use the GitHub URL to clone a repository.

gh repo clone https://github.com/PATH-TO/REPOSITORY 
  1. On GitHub.com, navigate to the main page of the repository.
  2. Above the list of files, click

Screenshot of the list of files on the landing page of a repository. The

Code.

Screenshot of the

Open with GitHub Desktop.

Cloning an empty repository

An empty repository contains no files. It’s often made if you don’t initialize the repository with a README when creating it.

  1. On GitHub.com, navigate to the main page of the repository.
  2. To clone your repository using the command line using HTTPS, under «Quick setup», click

. To clone the repository using an SSH key, including a certificate issued by your organization’s SSH certificate authority, click SSH, then click

Screenshot of the quick setup instructions for an empty repository. To the right of the HTTPS URL for the repository, a copy icon is outlined in dark orange.

.

Alternatively, to clone your repository in Desktop, click

Screenshot of the quick setup instructions for an empty repository. A button, labeled with a download icon and

Set up in Desktop and follow the prompts to complete the clone.

git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY 
$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY > Cloning into `Spoon-Knife`. > remote: Counting objects: 10, done. > remote: Compressing objects: 100% (8/8), done. > remove: Total 10 (delta 1), reused 10 (delta 1) > Unpacking objects: 100% (10/10), done. 

Troubleshooting cloning errors

When cloning a repository it’s possible that you might encounter some errors.

If you’re unable to clone a repository, check that:

  • You can connect using HTTPS. For more information, see «Troubleshooting cloning errors.»
  • You have permission to access the repository you want to clone. For more information, see «Troubleshooting cloning errors.»
  • The default branch you want to clone still exists. For more information, see «Troubleshooting cloning errors.»

Further reading

Клонирование и коммиты репозиториев – Git

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

Git ー популярная платформа для работы с версиями проекта. Это ー распределенная система контроля версий или VCS (Version Control System). Version Control в данном случае означает, что в любой момент можно вернуться к нужной версии документа. А под распределённостью имеется ввиду, что системой может одновременно пользоваться множество специалистов.

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

Области данных в Git

Чтобы легче понять работу команд, кратко разберем области данных. В системе Git их три: рабочая директория, индекс, репозиторий.

Рабочая директория содержит в себе файлы, с которыми работаете. Также это могут быть файлы, только что извлеченные из истории проекта. При переключении между ветками файлы в Working Directory можно удалять или изменять. По этому поводу переживать не нужно, так как история сохранена в Git-директории. А рабочая директория ー временное место для работы с файлами.

Git-индекс ー промежуточная локация для изменения файлов на пути от рабочей директории к репозиторию. Здесь хранятся изменения между уже зафиксированными в репозитории данными и теми, что еще лежат в рабочей директории. После выполнения команды git commit информация из индекса переходит в репозиторий с соответствующими ссылками.

Репозиторий представляет собой хранилище файлов проекта. Это место, в котором хранится код с данными о выполненных изменениях. Репозиторий может размещаться как на удаленном сервере, так и на физическом компьютере.

Базовые команды: checkout git

В работе с репозиторием под командой checkout git (git checkout) подразумевается переключение между версиями для трех видов объектов. К ним относятся файлы, коммиты и ветки. Кроме функции переключения между branches, это действие используется и для просмотра старых commits.
Как происходит переключение веток? Процесс аналогичен шифтингу между старыми коммитами и документами, где каталог обновляется по выбранной ветке (или ревизии). При этом новые изменения остаются в истории, потому что операция checkout git ー это не только функция чтения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *