让git将更改从本地存储库拉到服务器存储库

让git将更改从本地存储库拉到服务器存储库,git,Git,我在远程服务器上有一个git存储库,可以通过SSH连接到该存储库。远程存储库是非空的 我将远程存储库克隆到本地计算机 如何告诉远程服务器从我的本地计算机中提取更改?要做到这一点,您必须能够通过ssh连接到本地计算机。只要做: git pull user@machine-ip:/path/to/repository/on/local/machine 正如StuartLC在评论中指出的,从本地机器推送到远程存储库可能更好。最好是在某个地方有一个裸存储库,并通过该存储库推/拉。正如现有的评论和答案

我在远程服务器上有一个git存储库,可以通过SSH连接到该存储库。远程存储库是非空的

我将远程存储库克隆到本地计算机


如何告诉远程服务器从我的本地计算机中提取更改?

要做到这一点,您必须能够通过ssh连接到本地计算机。只要做:

 git pull user@machine-ip:/path/to/repository/on/local/machine

正如StuartLC在评论中指出的,从本地机器推送到远程存储库可能更好。最好是在某个地方有一个裸存储库,并通过该存储库推/拉。

正如现有的评论和答案所说,建立一个权威的“裸”存储库供贡献者推送似乎更为常见。这清楚地表明,例如,指定远程回购网站上的分支机构
devel
就是“分支机构”
devel
,而所有其他分支机构都仅仅是微弱的模仿。:-)这在公司环境中尤其常见。它的优点是有明确的权力界限

不过,也就是说,没有什么可以阻止您在git中构建一个纯粹的点对点系统。在这里,每一个git存储库都可以独立运行。主机A上的回购RA与主机B上的回购RB一样好

为了方便起见,在主机A上的repo副本中,您可以为主机B创建一个“远程”。在主机B上的repo副本中,您为主机A创建一个远程。然后,无论您现在在哪个系统上,您都可以简单地
git fetch remote
(其中
remote
是该主机上您感兴趣的另一台主机的名称)

事实上,您可以继续将此模型扩展到具有多个对等点,以及多个对等点可能同步的几个“更权威”点。也就是说,您可以构建权威和对等存储库的混合

这是因为所有的git回购协议在结构上基本相同。唯一使权威存储库“权威”的东西是那些使用它的人,那样对待它。如果我有我的回购协议,从你那里得到东西,并且相信它比我以前的东西好,那么,你必须是这里的权威。如果我选择不相信你,那么我就成了我自己的权威

这里需要注意的是,存储库的“裸”性不是其权限的一部分(如果有的话)事实上,裸回购的唯一目的是简化git推送的过程。如果你推送某人正在工作的存储库,他们可能会认为自己在
devel
上提交
0ab7c32
,但现在他们的
devel
指向提交
905c4fd
。1裸存储库没有工作树,因此,根据定义,您不能在裸存储库的工作树中处理某人正在进行的工作

同时,拥有一个易于git推送的存储库的主要目的是要有一个双方同意的集合点,这样,如果有十几个同级开发人员在不同的开发分支上进行开发,他们就不必相互了解,为彼此设置远程设备,并允许彼此访问自己的系统。

正是这两个属性使裸存储库成为构建权威结构的理想选择。“工蜂”克隆权威系统,完成工作,然后(尝试)将其推回到权威系统。所有关系都是成对的,工蜂不必直接与另一个系统对话

但是你不必这样做。例如,我有我的笔记本电脑和桌面电脑,并将它们设置为彼此对等的。从笔记本电脑上,我可以根据需要
git fetch desktop
,反之亦然。我发现的一个缺点是,我可以忘记我在笔记本电脑(或桌面电脑)上正在进行工作,这是我没有承诺的,现在我在另一台机器上,所以现在如果不先使用ssh连接到另一台机器,我就无法进行我的工作。但这通常不是什么大问题



1Mercurial通过以不同的方式跟踪“下一次提交”的位置来避免这种情况,因此您可以推送到非裸存储库,即使它们签出了push-to分支。Git也可以做同样的事情,但它需要能够动态创建新的分支名称,或者将您放入“分离头”当有人推送到您所在的分支时的模式。

您应该将本地更改推送到远程回购,可能是推送到新分支,以便可以创建和审查拉取请求。