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



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



каков самый простой способ перемещения репозитория git туда и обратно?



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



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



спасибо
Йохан



примечание: Я знаю, как это сделать с SubVersion, но мне любопытно, как это будет работать с git. Если это проще, я могу использовать третий компьютер в качестве классического сервера, с которым могут синхронизироваться два ПК.



Примечание: оба компьютера работают под управлением Linux.





обновление:



Итак, давайте попробуем xani: s идею с голым 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, чтобы увидеть обновленный файл.
И теперь я могу двигаться вперед и назад между двумя компьютерами,
и добавлю третью, если захочу.

631   7  

7 ответов:

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

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

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

$ ssh [email protected]
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

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

$ git clone [email protected]:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

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

$ git clone [email protected]:/home/username/git/newThing
$ git remote add externalName [email protected]:/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/ Действительно хороший книга.-

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

переименование пульта дистанционного управления из origin к имени другого окна делает удаленные ветви легче читать.

обратите внимание, что только с помощью git fetch (а не git push), это хорошо работает с голыми репозиториями:

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

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

самый простой способ: центральное РЕПО, созданное с --bare (Так что никаких извлеченных файлов, только .git stuff), или 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 не будет изменять извлеченные файлы при нажатии на удаленное РЕПО)

или сделать РЕПО с флешки ;)

Как насчет просто с помощью rsync?

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

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

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

Comments

    Ничего не найдено.