Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git推送到另一台机器的简单方法是什么?_Git - Fatal编程技术网

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
  • far\u away
    是git“remote”的名称-您可以使用任何东西,尽管匹配机器名称可能有意义,或者类似于
    上游
    原点
  • 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数据的repo
git clone
可以工作,但是如果我想推呢?動靜能量: 在存储库建立之后,您打算如何处理它们?这是一次性拷贝还是计划进一步同步?您需要在两个方向上同步,还是所有更改都在一台机器上进行,然后复制到另一台机器上?如果您只需要单向同步,那么通常会克隆“原始”存储库,而不是将其内容推送到新的存储库中。如果您需要双向同步,那么最好有一个裸存储库,它们可以推送到该存储库,也可以从中获取/拉取@動靜能量: 造成这些困难的关键原因是Git不喜欢推进非裸存储库,尤其是签出分支。如果你推到t