Работа с 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 комментария

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

Сергей Кузнецов @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:
- Зарегистрируйтесь на GitHub и создайте ssh-ключи по инструкции . SSH-ключи — это наиболее безопасный способ работы с GitHub, поэтому важно разобраться с ними
- Создайте репозиторий на GitHub. Назовите его hexlet-git. Важно, чтобы репозиторий создавался пустым, поэтому не отмечайте галочки, добавляющие файлы
- На странице репозитория вы увидите готовые команды для подключения созданного репозитория на 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. Последний можно даже поставить к себе на сервер и хостить репозитории внутри своей компании, что многие и делают по соображениям безопасности или экономии.
Самостоятельная работа
- Выполните все шаги из урока, создайте и добавьте ssh-ключи на GitHub по инструкции
- Добавьте новый файл NEW.md с произвольным содержимым в репозиторий. Для этого нужно выполнить коммит
- Залейте изменения на GitHub с помощью git push
- Обновите страницу репозитория на GitHub. Там должен появиться последний коммит — те изменения, которые были совершены
Дополнительные материалы
- Цикл git-разработки (init, commit, push on GitHub)
- GitHub — Настройка и конфигурация учетной записи
- Создание SSH-ключа для работы с GitHub по SSH
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: