git репозиторий синхронизация между компьютерами при перемещении?

89

Допустим, у меня есть настольный компьютер и ноутбук, и иногда я работаю на настольном компьютере, а иногда я работаю на ноутбуке.

Какой самый простой способ перемещать репозиторий 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 для быстрой синхронизации с ПК1 на ПК2 с минимальным использованием данных, даже через точку доступа Wi-Fi сотового телефона (в сотни раз быстрее, чем rsync для этого варианта использования!): Stackoverflow.com/questions / 4948190 /…
Габриэль Стейплс,

Ответы:

27

Думаю, есть несколько подходов. Я просто опишу, как я справляюсь с этим

У меня есть один нетбук, работающий круглосуточно и без выходных, с несколькими репозиториями git. Оттуда я отправляю и получаю изменения через SSH. Для доступа извне использую dyndns.org. Он отлично работает, особенно потому, что у меня более двух систем, которым нужен доступ к некоторым репозиториям.

Обновление: небольшой пример. Допустим, мой нетбук называется «нетбук». Я создаю там репозиторий

$ ssh username@netbook.local
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

На моем рабочем столе я создам его клон. Может и файлы добавлю

$ git clone username@netbook.local:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

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

$ git clone username@netbook.local:/home/username/git/newThing
$ git remote add externalName username@mydyndns.home-ip.org:/home/username/git/newThing
$ git pull externalName master

Именно так работает git (/ git workflows). Вы можете добавить столько удаленных репозиториев, сколько захотите. Не имеет значения, если два или более относятся к одним и тем же «физическим» репозиториям. Вам не нужен собственный локальный «сервер», вы можете использовать любой публичный сервер, к которому у вас есть доступ по ssh. И, конечно, вам вообще не нужен публичный сервер, если вам не нужен доступ извне. Чистый репозиторий также может находиться в настольной системе, и затем вы можете создать репозиторий рабочей копии в локальной файловой системе.

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

Вот как я с этим справляюсь, и для меня это работает довольно хорошо (если не идеально;))

Что почитать: http://progit.org/ Действительно хорошая книга.

KingCrunch
источник
Как бы это выглядело, когда вы использовали разные способы входа в репо? Хотели бы вы пояснить свой ответ примером?
Йохан
Спасибо, эти примеры многое прояснили :)
Johan
6

Я бы клонировал репо из одного ящика в другой, а затем настроил бы два репозитория так, чтобы я мог просто git fetchиз другого ящика.

Переименование удаленного из originимени другого блока упрощает чтение удаленных ветвей.

Обратите внимание, что просто используя git fetch (а не git push) это хорошо работает с репозиториями без использования:

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo
ndim
источник
5

Самый простой способ: центральное репо, созданное с помощью --bare (без извлеченных файлов, только .git) или github

«Распределенный» будет выглядеть так:

Настроить:

  1. На ноутбуке: git remote add desktop ssh://user@desktop/home/user/repo/path
  2. На рабочем столе: git remote add laptop ssh://user@laptop/home/user/repo/path

Синхронизации:

git pull laptop/desktop (push не будет работать очень хорошо с репозиториями, отличными от голых, потому что git не будет изменять извлеченные файлы при нажатии на удаленное репо)

Или сделайте репо на флешке;)

XANi
источник
Я пробовал использовать репозиторий --bare, но не могу правильно понять весь рабочий процесс.
Johan
Я только начинаю с git и перехожу с локального git на github и обратно, пока могу, но с методом «компьютер-компьютер» я не могу работать. Тупой вопрос - для каких учетных данных я использую user? Для github мне просто нужно добавить ключи rsa-pub. Я попытался добавить rsa-pub для компьютера, запрашивающего клон, в known_hosts, но это не помогло ...
Дэйв,
Для меня это самый простой способ синхронизации между двумя локальными машинами без постоянного обращения к удаленному серверу.
johnzachary
1

Как насчет простого использования rsync?

seriyPS
источник
3
Я использовал rsync в течение многих лет, чтобы синхронизировать три сервера. Это работает, но rsync не дает возможности откатить изменения после завершения синхронизации. Я также потерял так много файлов таким образом, потому что я недостаточно внимательно прочитал результаты пробного запуска, а rsync был настроен на удаление файлов, которых не было на главном устройстве. С тех пор я перешел на git и считаю, что это гораздо более безопасный способ синхронизировать важные каталоги.
Cloudkiller
1

Не могли бы вы просто создать удаленный репозиторий на GitHub, BitBucket или GitLab? (Последние две компании предлагают неограниченное количество бесплатных частных репозиториев). Когда вы закончите рабочий день, просто используйте, git pushчтобы отправить изменения в удаленное репо. Когда вы вернетесь домой, просто git pullперетащите изменения с работы на домашний компьютер. Точно так же, когда вы закончите дома, делайте, git pushа когда вернетесь к работе, делайте git pull.

Студент колледжа
источник
1

Какой самый простой способ перемещать репозиторий git вперед и назад [между двумя компьютерами]?

Сценарий 1. Я работаю (редактирую код и файлы) исключительно на ПК1, но хочу иметь дублирующую копию файлов (например, для создания всей базы кода) также и на ПК2.

Синхронизация с ПК1 на ПК2 менее чем за 1 минуту через точку доступа Wi-Fi при использовании <25 МБ данных:

Я работаю на одном слабом компьютере, с которым путешествую (ноутбук), но использую более мощный компьютер, расположенный в другом месте. Я все время использую git для синхронизации с моего ноутбука на другой компьютер с помощью скрипта. Я просто набираю эту команду, чтобы запустить ее:

sync_git_repo_from_pc1_to_pc2

Это оно! Обычно это занимает около 25 МБ данных и от ~ 30 секунд до 1 минуты, даже при использовании точки доступа Wi-Fi сотового телефона и работе с репо размером в несколько десятков гигабайт . Я подключился к ПК2, так что яgit log -1 проверяю, работает ли синхронизация, на ПК2, затем запускаю команду сборки. Прекрасно работает. Дать ему шанс. Подробности см. По ссылкам ниже.

Примечание: клонированный репозиторий на ПК2 будет находиться в ветке git с именем somename_SYNC. Измените сценарий соответствующим образом, если вы хотите, чтобы у него было то же имя ветки вместо того, чтобы всегда использовать «ветвь SYNC». При желании можно изменить сценарий, чтобы получить эффект, более похожий на Сценарий 2 ниже. Тем не менее, выполнить сценарий 2 вручную несложно, так что вы можете просто продолжить выполнять сценарий 2 вручную. Это Сценарий 1, в котором автоматизированный сценарий является наиболее выгодным и экономящим время, поскольку он позволяет легко и быстро «изменять, синхронизировать, создавать» рабочий процесс. котором «изменение» выполняется на ПК1, «синхронизация» выполняется с ПК1, но влияет также ПК2, а «сборка» происходит на ПК2.

Ссылки:

  1. Полные инструкции по установке и настройке здесь:
    Работа над удаленным проектом с Eclipse через SSH
  2. Readme, документация и репо здесь: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md .
  3. Точный рассматриваемый сценарий находится здесь:
    https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

Сценарий 2: я работаю (редактирую код и файлы) на нескольких компьютерах и хочу иметь возможность редактировать один и тот же репозиторий кода с любого компьютера в мире:

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

  1. Перейдите на https://github.com и создайте учетную запись и при желании (рекомендуется) настройте ключи ssh .

  2. Теперь используйте их веб-интерфейс для создания нового репозитория.

    1. Начиная с 2020 года или ранее, GitHub также разрешает бесплатные частные репозитории , поэтому это хорошо работает даже для частных проектов с закрытым исходным кодом.
  3. Найдите URL-адрес нового репозитория ssh или https клонирования. Пример: git@github.com: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git или https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .

  4. Клонируйте проект на ПК1. Пример:

     git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. И повторите ту же самую команду клонирования на ПК2.

  6. Теперь на 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
    
  7. Теперь на PC2 внесите свои изменения:

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. Теперь вы можете редактировать файлы на ПК2, фиксировать их и отправлять в github с помощью команд, показанных всего двумя шагами выше, а затем с ПК1 вы можете запустить их, git pullчтобы получить эти изменения с ПК2.

  9. Продолжайте выполнять этот процесс по мере необходимости, работая на ПК1 ИЛИ ПК2, легко обмениваясь файлами и разделяя свою работу между двумя компьютерами. Просто помните, что все ваши изменения должны быть зафиксированы и отправлены в github на одном ПК, прежде чем вы сможете их проверить (вытащить) и продолжить работу на другом ПК.

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

Габриэль Скобы
источник
0

Что ж, вы можете отправлять и загружать (через Git) на сервер, который вы потенциально могли бы настроить. Или вы можете сохранить свои репозитории на GitHub и использовать их как мост синхронизации.

мипади
источник
0

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

Kerhong
источник