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

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

  • автор:

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

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

Отслеживать
16.5k 4 4 золотых знака 19 19 серебряных знаков 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 

Как работать с Git на нескольких компьютерах над одним коммитом?

У меня есть рабочий и домашний компьютер.
Иногда бывает так, что на работе работаешь над фичей/фиксом и не успеваешь закончить работу чтобы закоммитить. И после работы хотелось бы закончить работу над фичей/фиксом.
Но суть в том, что незаконченная часть не тянет на полноценный коммит. Не хотелось бы делать промежуточный коммит с рабочего компьютера чтобы не засорять историю. И при этом играться с перекидыванием изменений на флешку и на домашнем компьютере обратно выглядет не очень привлекательным.
Может быть кто-нибудь подскажет как можно выйти из такой ситуации, так сказать best practices.

  • Вопрос задан более трёх лет назад
  • 4758 просмотров

2 комментария

Оценить 2 комментария

roswell

А ветки чем не подходят?

sergey-kuznetsov

Сергей Кузнецов @sergey-kuznetsov Куратор тега Git

Коммитить только законченную работу — это глупый предрассудок со времен Mercurial.
Коммитьте на здоровье в локальный репозиторий сколько вдумается, главное не пушить в общий репозиторий либо не пушить в общую ветку общего репозитория. Личная ветка даёт полную свободу. А перед тем, как отправляете готовую работу, историю можно уже причесать. Написать понятные сообщения коммитов и склеить нужные.

Решения вопроса 1

И после работы хотелось бы закончить работу над фичей/фиксом.

Это ужасно, конечно, что ты работу делаешь в нерабочее время. Так можно стать трудоголиком (жизнь = работа) и получить выгорание (депрессию).

Если ты хочешь доделывать работу периодически, у тебя на диске (на флешке, например) должен быть склонированный проект. Его можно подключить к основному проекту как удалённый источник под каким-нибудь именем. Получится, будто он у тебя как бы на github’е, но он будет на флешке и ты сможешь туда заталкивать и оттуда скачивать, как с обычного удалённого репозитория.

А чтобы перекинуть незакомиченные изменения, используй diff-файл: делаешь git diff, но вывод направляешь в файл и потом этот файл можешь перекинуть в другой репозиторий, а потом сделать git apply с ним в другом репозитории и эти изменения появятся там тоже в незакомиченном виде.

И то, что ты пишешь, что у тебя один большой коммит, — так не должно быть. Должна быть ветка для какой-то фичи, в неё делается много маленьких коммитов, а потом эта ветка вливается без быстрого прохода (это когда коммит слияния делается в любом случае). И вот в этом коммите слияния пишется вся информация о фиче.

А сами коммиты в такой ветке друг от друга не должны зависеть (не всегда это возможно, конечно), чтобы при отмене одного изменения не нужно было отменять остальные.

4.1 Git на сервере — Протоколы

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

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

Если вас не интересует настройка собственного сервера, вы можете перейти сразу к последней части этой главы для настройки аккаунта на Git-хостинге, а затем перейти к следующей главе, где мы обсудим различные аспекты работы с распределённой системой контроля версий.

Удалённый репозиторий — это обычно голый (чистый, bare) репозиторий — репозиторий Git, не имеющий рабочего каталога. Поскольку этот репозиторий используется только для обмена, то нет причин создавать рабочую копию файлов на диске — достаточно хранить только данные Git.

Проще говоря, голый репозиторий содержит только каталог .git вашего проекта и ничего больше.

Протоколы

Git умеет работать с четырьмя сетевыми протоколами для передачи данных: локальный, HTTP, Secure Shell (SSH) и Git. В этой части мы обсудим каждый из них и в каких случаях стоит или не стоит его использовать.

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

Базовым протоколом является Локальный протокол, для которого удалённый репозиторий — это другой каталог на диске. Наиболее часто он используется, если все члены команды имеют доступ к общей файловой системе, например к NFS, или, что менее вероятно, когда все работают на одном компьютере. Последний вариант не идеален, поскольку все копии вашего репозитория находятся на одном компьютере, что резко увеличивает вероятность потерять всё.

Если у вас смонтирована общая файловая система, вы можете клонировать, отправлять и получать изменения из локального репозитория. Чтобы клонировать такой репозиторий или добавить его в качестве удалённого в существующий проект, используйте путь к репозиторию в качестве URL. Например, для клонирования локального репозитория вы можете выполнить что-то вроде этого:

$ git clone /srv/git/project.git

Интеграция с 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

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

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

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

Об обучении на Хекслете

  • Статья «Как учиться и справляться с негативными мыслями»
  • Статья «Ловушки обучения»
  • Статья «Сложные простые задачи по программированию»
  • Вебинар « Как самостоятельно учиться »

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

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

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