什么是Git Push到另一台机器的简单方法?

时间:2011-04-04 02:08:08

标签: git

我以为我可以做到以下几点:

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 repo)。但是在machine2上,我继续使用git-receive-pack: command not found,但两台机器都安装了最新的Git 1.7.4 ......


更新:似乎需要添加

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

到两台机器的.bashrc

但为什么和不会调用bash会添加越来越多的路径。

4 个答案:

答案 0 :(得分:7)

如果远程系统没有系统默认PATH中的Git(可能与登录shell中的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 fetch}的git pull选项的需要,其方式与remote.<remote-name>.receivepack消除了对--receive-pack=的需要相同使用git push指定master


在您的特定方案中,您正在推送到非裸存储库。您也可能正在推送到已签出的分支(将机器2上的master推送到machine1上的{{1}}。当您尝试执行此操作时,现代版本的Git会给您一个错误。您可以通过设置某些配置变量来覆盖警告,但这通常不是最佳操作方式。

答案 1 :(得分:3)

您是否正在尝试将整个回购推送到另一台机器?最简单的方法是从目标计算机到源计算机执行“git clone”。

答案 2 :(得分:3)

看起来你可能错过了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,当您检查了主分支并运行git pull(没有参数)时,它应该获取并与origin的主分支合并。

答案 3 :(得分:0)

在远程计算机上:

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.currencyCode = "USD"
let priceInUSD = numberFormatter.string(from: product.price)

在本地计算机上:

mkdir path/to/repo
cd path/to/repo
git init
git checkout -b tmp # Otherwise git will complain that master is already checked out.

最后在远程计算机上执行git add remote far_away username@remote_machine:path/to/repo git push far_away master 。不需要git checkout master

  • git branch -d tmp相对于path/to/repo。如果您想使用绝对路径,只需在$HOME前面加上例如/
  • username@remote_machine:/path/to/repo是git“ remote”的名称-您可以使用任何可以匹配机器名称的名称,例如far_awayupstream
  • origin是可选的。