Git推送到另一台机器的简单方法是什么?
我想我可以做到以下几点:Git推送到另一台机器的简单方法是什么?,git,Git,我想我可以做到以下几点: machine1 $ cd / mkdir try-git cd try-git git init machine2 $ git push ssh://loginname@192.168.1.123//try-git master 就这样机器1将拥有所有文件吗?(machine2的当前目录是git repo)。但是在machine2上,我一直在使用git-receive-pack:command-no
machine1 $ cd /
mkdir try-git
cd try-git
git init
machine2 $ git push ssh://loginname@192.168.1.123//try-git master
就这样<代码>机器1将拥有所有文件吗?(machine2
的当前目录是git repo)。但是在machine2
上,我一直在使用git-receive-pack:command-not-found
,但这两台机器都安装了最新的git 1.7.4
更新:似乎我需要添加
PATH=$PATH:/usr/local/git/bin
到两台机器的.bashrc
但是为什么调用bash不会给它添加越来越多的路径呢。你是想把整个回购协议推到另一台机器上吗?最简单的方法是从目标计算机到源计算机进行“git克隆”。如果远程系统在系统默认路径中没有git(这可能与登录shell中的路径不同),那么您必须告诉它在哪里可以找到git接收包 您提到了路径名
/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..uploadpack
配置变量消除了--upload pack=
选项对git fetch
(和git pull
)的需要,就像remote..receivepack
消除了使用git push
指定--receive pack=/code>的需要一样
在您的特定场景中,您将推送到一个非裸存储库。您也可能正在推送到已签出的分支(将machine2上的master
推到machine1上的master
)。当您尝试这样做时,Git的现代版本会给您一个错误。您可以通过设置某些配置变量来覆盖警告,但这通常不是最佳的操作方式。看起来您可能错过了Git的远程概念。顶级命令帮助您执行一些常见操作。特别是,您需要创建一个远程:
git remote add foobar username@hostname/path/to/repo.git
现在您可以使用该远程设备的名称而不是URL:
git pull foobar master
git push foobar
如果您已经在本地创建了一个存储库,然后创建了权威的“中心”存储库(如果您是项目的发起人,则该存储库很常见),那么您可能希望为您的远程存储库指定默认名称origin
,这样它就会感觉像是从该规范存储库克隆的。默认情况下,gitpush
(不带参数)将所有匹配的分支推送到origin,因此这非常方便
您可能还需要设置跟踪分支,例如:
git branch --set-upstream master origin/master
这将告诉Git,当您签出主分支并运行Git pull
(无参数)时,它应该获取并与origin的主分支合并。在远程计算机上:
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\u away
或上游
原点
是可选的username@
git receive pack
(通常是git)是否在loginname
路径中?如果我运行git
。。。它知道在哪里找到git并运行它。。。(它是/usr/local/git/bin/git
)git接收包可能不在同一位置。在machine1上尝试哪个git-receive-pack
。它说它是/usr/local/git/bin/git-receive-pack
,另外,我可以sshloginname@192.168.1.123
并使用git、git接收包。。。好像我在那台机器上,这比从源机器上执行更容易?如果我在目标机器上执行git clone
,它会说bash:git upload pack:command not found
。目标机器是否正确安装了git?听起来好像部分损坏。请参阅更新以设置路径。另外,如果我不想克隆但想推送,比如说machine2上的路径真的很长,我想推送当前目录,该怎么办@動靜能量: 对于最初的传输,克隆绝对是一种方式——你不能通过推来创建存储库——但是在那之后,是的,缩写URL是很有可能的——请看我的答案!是的,似乎我需要向添加一些内容。bashrc
请查看更新如果这不是最好的操作方式,那么最好的方式是什么?我们的目标就是要有两个相同的repo,显示两台机器上的所有文件。如果我使用git init--bare
,那么推送不会显示错误,但是machine1的文件夹没有所有的文件--它只是一个包含git数据的repogit clone
可以工作,但是如果我想推呢?動靜能量: 在存储库建立之后,您打算如何处理它们?这是一次性拷贝还是计划进一步同步?您需要在两个方向上同步,还是所有更改都在一台机器上进行,然后复制到另一台机器上?如果您只需要单向同步,那么通常会克隆“原始”存储库,而不是将其内容推送到新的存储库中。如果您需要双向同步,那么最好有一个裸存储库,它们可以推送到该存储库,也可以从中获取/拉取@動靜能量: 造成这些困难的关键原因是Git不喜欢推进非裸存储库,尤其是签出分支。如果你推到t