git push和git pull有什么区别?

时间:2012-06-28 08:23:45

标签: git workflow repository

我今天偶然发现了一些特殊的东西。我在暑期工作时请求一位同事帮我为我的代码设置一个新的远程git仓库,并且对于他做了什么以及我想做什么有很多困惑。我让他发送他的配置,以便能够看到他的遥控器的路径,并发现他没有遥控器。当我问他这件事时,他解释了他的工作流程:

  1. 在本地更改内容
  2. 提交
  3. 移至远程目录
  4. git pull c:\ localdir
  5. 因此,他不再向遥控器推进,而是不断地从他的本地仓库撤回到我们服务器上的仓库。倒退工作。当我与他面对面时,他问我差异是什么,我无法真正回答他,但我觉得有什么不对?

    所以我的问题是:推送遥控器并从遥控器拉出来有什么不同?

4 个答案:

答案 0 :(得分:17)

在我看来,您可以让用户将他们的提交推送到某个被认为是“主人”的存储库,或者让他们将拉请求发送给有权修改所述“主”的单个用户。

例如,Github不会让非贡献者推送到存储库,但会允许他们发送拉取请求,以便贡献者可以整合他们的更改。

答案 1 :(得分:12)

推送到远程:发送一些提交到另一个git仓库。 git repo被认为是“远程”,但它可以是硬盘驱动器的另一个文件夹中的repo。 从遥控器中取出:从远程仓库中获取一些提交并将它们合并到当前的HEAD(您当前的回购结账)

你的同事可能使用pull而不是push,因为你的存储库可能没有(没有运行git守护程序,gitweb或ssh服务器),但是你的计算机可以使用它。由于它是一个服务器,他可能不希望公开一个git守护程序/服务,它可能是攻击的载体。

但是如果您的存储库是共享/可用的,那么他就能够做到:

  1. 在本地更改内容
  2. 提交
  3. 推送到您的存储库

答案 2 :(得分:2)

没有,回购是彼此的副本,拉动和推动只是方向流动。与同事的方法的不同之处在于他添加了第4个不需要的命令。

答案 3 :(得分:1)

是的,它正在倒退。

原则工作流程是:

  1. 在本地更改内容
  2. 提交
  3. 推送到远程目录
  4. 一个用例(另一个是explained by Dolanor)用于不推送到远程是在远程检出工作副本(即它没有裸存储库)。当他想推送一个在远程盒子上签出的分支时(例如master:master),这将不会成功,因为禁止推出签出分支。

    在我看来,这是跳转到远程机器并拉动而不是从本地机器推送的唯一用例。