Допустим, у меня есть настольный компьютер и ноутбук, и иногда я работаю на настольном компьютере, а иногда я работаю на ноутбуке.
Какой самый простой способ перемещать репозиторий git вперед и назад?
Я хочу, чтобы репозитории git были идентичными, чтобы я мог продолжить с того места, где я остановился, на другом компьютере.
Я хотел бы убедиться, что у меня есть одинаковые ветки и теги на обоих компьютерах.
Спасибо Йохан
Примечание: я знаю, как это сделать с помощью SubVersion, но мне любопытно, как это будет работать с git. Если это проще, я могу использовать третий компьютер в качестве классического сервера, с которым могут синхронизироваться два компьютера.
Примечание. Оба компьютера работают под управлением Linux.
Обновление :
Итак, давайте попробуем идею XANI: с чистым репозиторием git на сервере и синтаксисом команды push от KingCrunch. В этом примере есть два клиента и один сервер.
Итак, сначала создадим серверную часть.
ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init
Итак, с одного из других компьютеров я пытаюсь получить копию репо с помощью clone:
git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.
Затем войдите в это репо и добавьте файл:
cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master
Теперь сервер обновлен с помощью testfile1.txt.
В любом случае, давайте посмотрим, сможем ли мы получить этот файл с другого компьютера.
mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull
И теперь мы видим тестовый файл.
На этом этапе мы можем отредактировать его, добавив еще немного контента, и снова обновить сервер.
echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master
Затем мы возвращаемся к первому клиенту и выполняем git pull, чтобы увидеть обновленный файл. И теперь я могу перемещаться между двумя компьютерами и добавлять третий, если захочу.
источник
Ответы:
Думаю, есть несколько подходов. Я просто опишу, как я справляюсь с этим
У меня есть один нетбук, работающий круглосуточно и без выходных, с несколькими репозиториями git. Оттуда я отправляю и получаю изменения через SSH. Для доступа извне использую dyndns.org. Он отлично работает, особенно потому, что у меня более двух систем, которым нужен доступ к некоторым репозиториям.
Обновление: небольшой пример. Допустим, мой нетбук называется «нетбук». Я создаю там репозиторий
На моем рабочем столе я создам его клон. Может и файлы добавлю
На своих портативных устройствах я (сначала) сделаю то же самое, но для удаленного доступа (из-за пределов моей локальной сети) я также добавлю внешний адрес.
Именно так работает git (/ git workflows). Вы можете добавить столько удаленных репозиториев, сколько захотите. Не имеет значения, если два или более относятся к одним и тем же «физическим» репозиториям. Вам не нужен собственный локальный «сервер», вы можете использовать любой публичный сервер, к которому у вас есть доступ по ssh. И, конечно, вам вообще не нужен публичный сервер, если вам не нужен доступ извне. Чистый репозиторий также может находиться в настольной системе, и затем вы можете создать репозиторий рабочей копии в локальной файловой системе.
Вот как я с этим справляюсь, и для меня это работает довольно хорошо (если не идеально;))
Что почитать: http://progit.org/ Действительно хорошая книга.
источник
Я бы клонировал репо из одного ящика в другой, а затем настроил бы два репозитория так, чтобы я мог просто
git fetch
из другого ящика.Переименование удаленного из
origin
имени другого блока упрощает чтение удаленных ветвей.Обратите внимание, что просто используя
git fetch
(а неgit push
) это хорошо работает с репозиториями без использования:источник
Самый простой способ: центральное репо, созданное с помощью
--bare
(без извлеченных файлов, только .git) или github«Распределенный» будет выглядеть так:
Настроить:
git remote add desktop ssh://user@desktop/home/user/repo/path
git remote add laptop ssh://user@laptop/home/user/repo/path
Синхронизации:
git pull laptop/desktop
(push не будет работать очень хорошо с репозиториями, отличными от голых, потому что git не будет изменять извлеченные файлы при нажатии на удаленное репо)Или сделайте репо на флешке;)
источник
user
? Для github мне просто нужно добавить ключи rsa-pub. Я попытался добавить rsa-pub для компьютера, запрашивающего клон, в known_hosts, но это не помогло ...Как насчет простого использования
rsync
?источник
Не могли бы вы просто создать удаленный репозиторий на GitHub, BitBucket или GitLab? (Последние две компании предлагают неограниченное количество бесплатных частных репозиториев). Когда вы закончите рабочий день, просто используйте,
git push
чтобы отправить изменения в удаленное репо. Когда вы вернетесь домой, простоgit pull
перетащите изменения с работы на домашний компьютер. Точно так же, когда вы закончите дома, делайте,git push
а когда вернетесь к работе, делайтеgit pull
.источник
Сценарий 1. Я работаю (редактирую код и файлы) исключительно на ПК1, но хочу иметь дублирующую копию файлов (например, для создания всей базы кода) также и на ПК2.
Синхронизация с ПК1 на ПК2 менее чем за 1 минуту через точку доступа Wi-Fi при использовании <25 МБ данных:
Я работаю на одном слабом компьютере, с которым путешествую (ноутбук), но использую более мощный компьютер, расположенный в другом месте. Я все время использую git для синхронизации с моего ноутбука на другой компьютер с помощью скрипта. Я просто набираю эту команду, чтобы запустить ее:
Это оно! Обычно это занимает около 25 МБ данных и от ~ 30 секунд до 1 минуты, даже при использовании точки доступа Wi-Fi сотового телефона и работе с репо размером в несколько десятков гигабайт . Я подключился к ПК2, так что я
git log -1
проверяю, работает ли синхронизация, на ПК2, затем запускаю команду сборки. Прекрасно работает. Дать ему шанс. Подробности см. По ссылкам ниже.Примечание: клонированный репозиторий на ПК2 будет находиться в ветке git с именем
somename_SYNC
. Измените сценарий соответствующим образом, если вы хотите, чтобы у него было то же имя ветки вместо того, чтобы всегда использовать «ветвь SYNC». При желании можно изменить сценарий, чтобы получить эффект, более похожий на Сценарий 2 ниже. Тем не менее, выполнить сценарий 2 вручную несложно, так что вы можете просто продолжить выполнять сценарий 2 вручную. Это Сценарий 1, в котором автоматизированный сценарий является наиболее выгодным и экономящим время, поскольку он позволяет легко и быстро «изменять, синхронизировать, создавать» рабочий процесс. котором «изменение» выполняется на ПК1, «синхронизация» выполняется с ПК1, но влияет также ПК2, а «сборка» происходит на ПК2.Ссылки:
Работа над удаленным проектом с Eclipse через SSH
https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh
Сценарий 2: я работаю (редактирую код и файлы) на нескольких компьютерах и хочу иметь возможность редактировать один и тот же репозиторий кода с любого компьютера в мире:
Перейдите на https://github.com и создайте учетную запись и при желании (рекомендуется) настройте ключи ssh .
Теперь используйте их веб-интерфейс для создания нового репозитория.
Найдите URL-адрес нового репозитория ssh или https клонирования. Пример: git@github.com: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git или https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .
Клонируйте проект на ПК1. Пример:
git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git cd eRCaGuy_dotfiles
И повторите ту же самую команду клонирования на ПК2.
Теперь на PC1 внесите некоторые изменения, зафиксируйте их и отправьте в свой «удаленный» репозиторий на github:
# edit some files, then do the following git add -A # stage ("add") all changed files to be committed git commit # commit them git push # push them to your remote github repo
Теперь на PC2 внесите свои изменения:
# pull all changes from github (which includes the changes # you just pushed from PC1) to PC2 git pull
Теперь вы можете редактировать файлы на ПК2, фиксировать их и отправлять в github с помощью команд, показанных всего двумя шагами выше, а затем с ПК1 вы можете запустить их,
git pull
чтобы получить эти изменения с ПК2.Продолжайте выполнять этот процесс по мере необходимости, работая на ПК1 ИЛИ ПК2, легко обмениваясь файлами и разделяя свою работу между двумя компьютерами. Просто помните, что все ваши изменения должны быть зафиксированы и отправлены в github на одном ПК, прежде чем вы сможете их проверить (вытащить) и продолжить работу на другом ПК.
Если вы когда-нибудь попадете в ситуацию, когда файлы между двумя компьютерами будут немного рассинхронизированы, вам, возможно, придется использовать дополнительные ветки, выполнить несколько слияний, разрешить конфликты и т. Д. Тогда это станет более похоже на работу с небольшой командой, в которой вы все работаете над одним репо. Google - ваш друг. Git очень-очень-очень мощный и имеет команду, набор команд или рабочий процесс практически для всего.
источник
Что ж, вы можете отправлять и загружать (через Git) на сервер, который вы потенциально могли бы настроить. Или вы можете сохранить свои репозитории на GitHub и использовать их как мост синхронизации.
источник
Вы можете создать репозиторий на любом из своих компьютеров, возможно, на настольном компьютере, и загружать / тянуть к нему как с ноутбука, так и с самого себя.
источник