git репозиторий синхронизируется между компьютерами при перемещении? - PullRequest
77 голосов
/ 09 февраля 2011

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

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

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

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

Спасибо Johan

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

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


Обновление

Итак, давайте попробуем идею XANI: с пустым git-репо на сервере, и синтаксис команды push из KingCrunch. В этом примере есть два клиента и один сервер.

Итак, давайте сначала создадим серверную часть.

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

Итак, с одного из других компьютеров я пытаюсь получить копию репо с клоном:

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

Ответы [ 7 ]

24 голосов
/ 09 февраля 2011

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

У меня есть один нетбук в качестве сервера 24/7, который содержит несколько 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 workflow). Вы можете добавить столько удаленных репозиториев, сколько захотите. Это не имеет значения, если два или более относятся к одним и тем же «физическим» хранилищам. Вам не нужен собственный локальный «сервер», вы можете использовать любой публичный сервер, к которому у вас есть доступ по 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/ Действительно хорошая книга .-

6 голосов
/ 09 февраля 2011

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

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

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

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

[user@bar repo]$ git fetch -v foo
4 голосов
/ 10 февраля 2011

Самый простой способ: центральное репо, созданное с помощью --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

Syncing:

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

Или сделать репо на Pendrive;)

1 голос
/ 28 марта 2017

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

1 голос
/ 09 февраля 2011

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

0 голосов
/ 09 февраля 2011

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

0 голосов
/ 09 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...