我以为我可以做到以下几点:
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会添加越来越多的路径。
答案 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_away
或upstream
。origin
是可选的。