Что такое простой способ Git Push на другую машину? - PullRequest
6 голосов
/ 04 апреля 2011

Я думал, что могу сделать следующее:

machine1 $ cd /
           mkdir try-git
           cd try-git
           git init

machine2 $ git push ssh://loginname@192.168.1.123//try-git master

и это все? machine1 будет тогда все файлы? (Текущий каталог machine2 - это git-репо). Но на machine2 я продолжаю иметь git-receive-pack: command not found, но на обеих машинах установлен последний Git 1.7.4 ...


обновление: похоже, мне нужно добавить

PATH=$PATH:/usr/local/git/bin

на обе машины .bashrc

но почему и не вызывая bash, добавляйте к нему все новые и новые пути.

Ответы [ 3 ]

7 голосов
/ 04 апреля 2011

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

Вы упомянули путь /usr/local/git/bin/git-receive-pack, поэтому попробуйте это:

git push --receive-pack=/usr/local/git/bin/git-receive-pack ssh://user@machine1:/try-git master

Путь, указанный в --receive-pack=, является путем к git-receive-pack в удаленной системе.

Вы можете сохранить путь git-receive-pack как часть «удаленного», чтобы сохранить набор текста, если вы планируете обращаться к этому хранилищу много раз:

git remote add machine1 ssh://user@machine1:/try-git
git config remote.machine1.receivepack /usr/local/git/bin/git-receive-pack
git config remote.machine1.uploadpack /usr/local/git/bin/git-upload-pack

Используйте его следующим образом:

git push machine1 master

Переменная конфигурации remote.<remote-name>.uploadpack устраняет необходимость в опции --upload-pack= для git fetchgit pull) так же, какremote.<remote-name>.receivepack избавляет от необходимости указывать --receive-pack= с помощью git push.


В вашем конкретном сценарии вы перемещаетесь в не-пустой репозиторий.Вы также, вероятно, нажимаете на извлеченную ветвь (нажимая master на машине2 до master на машине1).Современные версии Git выдают ошибку при попытке сделать это.Вы можете переопределить предупреждение, установив определенные переменные конфигурации, но обычно это не лучший способ работы.

3 голосов
/ 04 апреля 2011

Похоже, вы пропустили представление Git о пультах дистанционного управления. Команда верхнего уровня git remote помогает вам выполнять некоторые общие операции. В частности, вы захотите создать пульт:

git remote add foobar username@hostname/path/to/repo.git

И теперь вы можете использовать имя этого пульта вместо URL:

git pull foobar master
git push foobar

Если вы создали хранилище локально, а затем создали авторитетный «центральный» (обычно, если вы являетесь инициатором проекта), вы можете присвоить своему пульту имя по умолчанию origin, чтобы оно Вы будете чувствовать, что вы клонированы из этого канонического хранилища. По умолчанию git push (без аргументов) переводит все соответствующие ветви в начало координат, так что это может быть очень удобно.

Вы также можете настроить отслеживание ветвей, например:

git branch --set-upstream master origin/master

Это скажет Git, что, когда у вас получена ветка master и вы запустили git pull (без аргументов), она должна извлечь и объединиться с веткой master источника.

3 голосов
/ 04 апреля 2011

Вы пытаетесь перенести весь репо на другую машину? Самый простой способ - сделать «git clone» с конечного компьютера на исходный.

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