Как работать с github с разных компьютеров
Перейти к содержимому

Как работать с github с разных компьютеров

  • автор:

Интеграция с GitHub — Введение в Git

Сейчас у нас есть репозиторий с двумя коммитами. Содержимое директории hexlet-git выглядит так:

ls -a .git PEOPLE.md README.md 

Перед тем, как продолжить экспериментировать, добавим наш репозиторий на GitHub. В этом уроке мы познакомимся с этим сервисом и освоим самые базовые действия с ним.

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

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

Добавим наш репозиторий на GitHub:

  1. Зарегистрируйтесь на GitHub и создайте ssh-ключи по инструкции . SSH-ключи — это наиболее безопасный способ работы с GitHub, поэтому важно разобраться с ними
  2. Создайте репозиторий на GitHub. Назовите его hexlet-git. Важно, чтобы репозиторий создавался пустым, поэтому не отмечайте галочки, добавляющие файлы
  3. На странице репозитория вы увидите готовые команды для подключения созданного репозитория на GitHub к уже существующему репозиторию у вас на компьютере: Выполните эти шаги:

# Подробнее эти команды мы разберем позже git remote add origin git@github.com:/hexlet-git.git git branch -M main git push -u origin main 

После этой команды репозиторий, созданный на github.com, «соединяется» с локальным репозиторием hexlet-git. Здесь может возникнуть вопрос: «Почему соединяется? Разве это не один и тот же репозиторий?».

На самом деле, это разные репозитории. Git — это распределенная система контроля версий. Это значит, что у Git нет какого-то центрального места, где лежит один главный репозиторий, а разработчики работают с ним со своих компьютеров.

Каждый репозиторий на GitHub и на компьютере у разработчика — это отдельные полноценные репозитории. Система Git связывает эти отдельные репозитории, объединяет их общей историей и добавляет возможность обмениваться изменениями:

В примере выше именно команда git push отправляет изменения во вновь созданный репозиторий.

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

Теперь не важно, какие изменения делаются в локальном репозитории. На GitHub все коммиты попадут только после команды git push , поэтому не забывайте делать ее. Бывает такое, что разработчик случайно удаляет локальный репозиторий, забыв запушить изменения — применить команду git push .

Далее мы попробуем скачать репозиторий с GitHub так, как будто у нас нет локальной копии. Для этого удалите директорию проекта hexlet-git с вашего компьютера.

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

Репозитории на GitHub делятся на публичные и приватные. Публичный репозиторий любой человек может клонировать себе на компьютер. После клонирования он начнет работать с ним как с личным.

Единственное ограничение — он не сможет запушить изменения, так как GitHub не дает напрямую менять чужие репозитории.

Клонирование — базовая операция при работе с удаленными репозиториями. Проекты, над которыми работают программисты, всегда находятся в системах, подобных GitHub. Для работы с ними нужно клонировать репозиторий к себе на компьютер.

Клонировать репозиторий можно с помощью команды git clone . Полную команду для клонирования можно получить на странице репозитория. Для этого нажмите большую кнопку Code, перейдите на вкладку SSH и скопируйте содержимое:

/hexlet-git.git cd hexlet-git ls -la # Если эта операция проходит первый раз, # То вы можете увидеть такое подобное сообщение The authenticity of host github.com cannot be established. RSA key fingerprint is SHA256: хххххххххх Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added github.com (RSA) to the list of known hosts. # Наберите yes и нажмите Enter 

Мы получили точную копию репозитория, который был у нас до удаления директории hexlet-git.

Как получить изменения с GitHub

Разработчики не только отправляют свои изменения на GitHub, но и забирают их оттуда. Чаще всего это изменения, сделанные другими разработчиками проекта, но необязательно. Бывает такое, что один разработчик работает над одним проектом с разных компьютеров, на каждом из которых своя собственная копия репозитория.

В таком случае, перед началом работы нужно всегда выполнять команду git pull —rebase , которая скачивает из внешнего репозитория новые коммиты и добавляет их в локальный репозиторий.

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

Правильная работа с git pull требует знания таких вещей, как ветвление и git rebase . Они довольно сложны для новичков, поэтому мы рассмотрим их позже, когда появится хоть какой-то опыт работы с Git.

Выводы

Подведем некоторый итог. В этом уроке мы создали репозиторий с несколькими коммитами и добавили его на GitHub. Теперь его можно склонировать для дальнейшей разработки.

Какую пользу из Git мы можем извлечь к текущему моменту? У нас есть запасная копия кода на сайте GitHub. Как минимум, нам нестрашно потерять код. Теперь его легко восстановить при случае, а еще им можно поделиться с другими.

Отдельно стоит сказать, что GitHub — это хоть и самая популярная, но не единственная площадка для хостинга репозиториев. Кроме него, особенно известны Bitbucket и GitLab. Последний можно даже поставить к себе на сервер и хостить репозитории внутри своей компании, что многие и делают по соображениям безопасности или экономии.

Самостоятельная работа
  1. Выполните все шаги из урока, создайте и добавьте ssh-ключи на GitHub по инструкции
  2. Добавьте новый файл NEW.md с произвольным содержимым в репозиторий. Для этого нужно выполнить коммит
  3. Залейте изменения на GitHub с помощью git push
  4. Обновите страницу репозитория на GitHub. Там должен появиться последний коммит — те изменения, которые были совершены
Дополнительные материалы
  1. Цикл git-разработки (init, commit, push on GitHub)
  2. GitHub — Настройка и конфигурация учетной записи
  3. Создание SSH-ключа для работы с GitHub по SSH

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Использование git на нескольких равноправных компьютерах

Есть несколько компьютеров (допустим, в локальной сети). Например ноутбук и десктоп. Есть репозиторий git, с которым хочется работать на каждом из них. То есть репозиторий не должен быть bare, и в любой момент в working tree могут быть какие-то изменения, как подготовленные к коммиту (staged), так и нет. Надо, чтобы с любого компа на любой можно было делать push и pull/fetch.

Хорошо бы, чтобы результат работы push с первого компа на второй был бы таким же, как результат fetch, выполненного со второго компьютера.

Видел такую статью, где предлагается сделать специальную ветку типа laptop-master, но при таком походе, как я понимаю, условие «хорошо бы» не выполняется (потому что в одном случае получим обновления в ветке laptop/master, а в другом в laptop-master). Появилась идея: делать push в remote-ветку, типа laptop/master, в ту же самую, в которую делался бы fetch, но не понял, можно ли так сделать.

В общем, помогите понять, как все это правильно настроить.

Работа с git с разных компьютеров

Работаю с настольного и ноутбука. Допустим я начал проект на компе, потом продолжил с ноутбука. При этом проект обновлялся бы на сервере через git pull . Как сохранять изменения в проект с двух компов?

Отслеживать
15.6k 3 3 золотых знака 18 18 серебряных знаков 30 30 бронзовых знаков
задан 19 апр 2017 в 8:49
335 4 4 серебряных знака 14 14 бронзовых знаков
то есть, рассказать, как коммитить (commit) и пушить (push) ?
19 апр 2017 в 8:56
Сохранять с 2х пк точно так же как и на одном.
19 апр 2017 в 8:57

«При этом проект обновлялся бы на сервере через git pull» — вы явно путаетесь в терминологии. pull может быть выполнен только на локальной рабочей копии, и если вы на сервере делаете pull, то с точки зрения git эта машина такой же клиент как и остальные.

21 апр 2017 в 5:29

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Работа с одним репозиторием с разных компьютеров

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

Для получения обновлений с удаленного репозитория воспользуйтесь командой:

git pull 

Если вы изменили ваши локальные файлы, то команда git pull выдаст ошибку. Если вы уверены, что хотите перезаписать локальные файлы, файлами из удаленного репозитория то выполните команды:

git stash git pull git stash pop 

Вместо github подставьте название вашего удаленного репозитория, которое вы зарегистрировали командой git push -u .

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

git push 

В случае, если в удаленном репозитории лежат файлы с версией более новой, чем у вас в локальном, то команда git push выдаст ошибку. Если вы уверены, что хотите перезаписать файлы в удаленном репозитории несмотря на конфликт версий, то воспользуйтесь командой:

git push -f 

Иногда возникает необходимость отложить ваши текущие изменения и поработать над файлами, которые находятся в удаленном репозитории. Для этого отложите текущие изменения командой:

git stash 

После выполнения этой команды ваша локальная директория будет содержать файлы такие же, как и при последнем коммите. Вы можете загрузить новые файлы из удаленного репозитория командой git pull и после этого вернуть ваши изменения которые вы отложили командой:

git stash pop 

Работа с GitHub на разных компьютерах – git clone и git pull — .gitignore и GitKraken

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

Или же с проектом занимается один человек, но делает это дома и на работе. Рассмотрим такой случай. Для удобства пути к рабочему каталогу на обоих компьютерах совпадают .

Итак, есть каталог RU на домашнем ПК (с ним мы имели дело в прошлой статье, когда учились работать с системой контроля версий GIT и сервисом GITHub) и каталог RU на рабочем ноутбуке.

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

1-ый способ переноса репозитория на другой компьютер

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

2-ой способ переноса репозитория — Команда git clone

Второй способ переноса репозитория на другой компьютер более правильный: предлагается работать через терминал . Что для этого нужно?

Скопировать путь к репозиторию на сервисе GITHub.

Зайти в рабочий каталог на другом ПК (ноутбуке. В нашем случае это снова папка RU , но путь может быть любым). И выполнить команду git clone, которая имеет следующий синтаксис.

git clone https://. book , где помимо самой команды git clone и url-адреса указывается имя папки book (название может быть любым), в которую будет клонироваться репозиторий.

Итак, в папку book на другом компьютере (ноутбуке) был клонирован репозиторий с сервиса GitHub.

Изменения в репозитории на 2-ом компьютере

Поработаем теперь с копией репозитория на другом (рабочем) компьютере. Внесем изменения в файл index.html : добавим заголовок h2.

Даже в редакторе VScode напротив файла index.html мы видим букву M . Это говорит о том, что файл index.html модифицирован/изменен. Убедимся в этом при помощи команды git status.

Теперь следует добавить файл index.html в индекс — команда git add. Потом создать коммит — команда git commit. И отправить локальный репозиторий с внесенными изменениями на GitHub — команда git push.

Здесь следует понимать, что если мы клонируем репозиторий, то он автоматически связан с удаленным . Поэтому достаточно ввести команду git push без ключа u , имени origin и ветки main , так как эта связь уже есть.

Теперь если перейти на удаленный репозиторий, то мы увидим новый коммит, созданный на другом компьютере .

Вроде бы ничего нового. Все это было проделано в предыдущей статье.

Но не будем забывать , что сейчас мы работаем на другом/рабочем компьютере (ноутбуке). И допустим, что продолжить работу мы сможем только дома. А на домашнем компьютере нет тех изменений, которые были сделаны на работе.

Получение изменений из удалённого репозитория — Команда git pull

Чтобы получить изменения из удалённого репозитория используется команда git pull.

И, действительно, мы видим, что синхронизация прошла успешно и в файле index.html на домашнем компьютере появился заголовок h2 .

Итак, работать с одним репозиторием и с сервисом GitHub с разных компьютеров не сложно. Здесь важно знать основные команды и порядок их выполнения. Именно так работают разные разработчики над одним проектом.

git pull — это обязательная команда, с которой следует начинать работать, если в проекте задействованы несколько человек.

Ошибка — ! [rejected] error: failed to push some refs — Слияние репозиториев

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

Допустим Вы забыли про команду git pull. При этом на удаленном репозитории произошли изменения, о которых Вы не знаете .

То есть мы работаем как обычно: вносим изменения в локальный проект, затем файл с изменениями добавляется в индекс, создается коммит. Но при попытке использовать команду git push возникает ошибка :

! [rejected] error: failed to push some refs to ‘https://. ‘

Обновления репозитория были отклонены. Сначала нужно интегрировать удаленные изменения . То есть использовать команду git pull.

C одной стороны на удаленном репозитории был создан файл README.md , который появился и в локальном проекте. Но на локальном репозитории тоже произошли изменения: добавлен новый параграф — тег p в файле index.html .

Теперь при использовании команды git push произойдет слияние двух репозиториев: локального и удаленного. На удаленном репозитории появились три новых коммита:

1-ый коммит — создание файла README.md на удаленном репозитории;

2-ой коммит — когда мы не знали об изменениях и внесли поправки в локальный репозиторий;

3-ий коммит — слияние двух репозиториев Merge branch ‘main’. .

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

Зачем нужен файл .gitignore?

Игнорирование файлов при работе с GIT или файл .gitignore.

В реальных проектах не обязательно push-ить все файлы на удаленный репозиторий. Часть файлов являются служебными и на GitHub они не нужны.

Кроме этого некоторые из них могут «весить» сотни МегаБайт и более. При этом отправка файлов на GitHub будет занимать много времени, либо терминал будет попросту зависать.

Для этого существует файл .gitignore — в нем указаны каталоги/файлы, которые не нужно выкладывать на удаленный репозиторий . Ниже приведен пример файла .gitignore.

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*

GitKraken — графический клиент GIT

Просматривать репозиторий на GitHub не очень удобно.

В редакторе VScode есть плагин GitLens, который расширяет возможности GIT, встроенного в Visual Studio Code. И плагин Git History, который помогает просматривать истории изменений. Но и они не самое лучшее решение.

Существует специальный графический кросс-платформенный клиент для работы с репозиториями и сервисами GIT. Это GitKraken.

Скачивается GitKraken с официального сайта gitkraken.com и устанавливается как обычная программа.

GitKraken имеет удобный интерфейс и множество функций. При входе в GitKraken через аккаунт GitHub мы увидим все созданные ранее коммиты.

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

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