Git 处理提交。 git pull 命令只是运行另外两个 Git 命令的简写:
-
git fetch,得到提交;那么,只要成功,
- (通常)另外两个 Git 命令之一,可帮助您将检索到的提交集成到当前分支中。
git push 命令发送 提交。
Git 并不完全有文件。它只有提交。 (commits 然后在其中包含文件,就好像它们每个都是包含每个文件的存档一样。)所以你根本不需要 git pull 来从服务器 1 上的存储库传输提交到 GitHub 上的不同存储库。你只需要git fetch 和git push。
请注意,使用git fetch 时,您会得到他们的提交,但不会得到他们的分支(准确地说是分支名称)。每个 Git 存储库都有自己的 分支名称。您的存储库有您的 分支名称,而不是其他人的。 Git commits 每个都有一个唯一的编号——一个 hash ID 或 object ID——所以可以共享提交,因为你所做的任何提交都会有一个唯一的编号,不同于其他任何人所做的任何其他提交。但是共享分支名称并不完全可以,因为分支名称只包含 一个 提交哈希 ID,如果你自己做了一个新的提交,而他们自己也做了一个新的提交,一个名字在这里不够用。所以git fetch 取他们的分支 名称并将它们重命名为您的remote-tracking 名称:例如,他们的develop 变成您的origin/develop。这假设您以名称 origin 获取他们的 Git——这是 git clone 设置的标准名称,以记住您在 git clone 时间使用的 URL。
如果您希望 GitHub 存储库根据从 Server-1 存储库的 develop 复制提交获得的 server1-remote/develop 创建或更新分支名称 develop,您可以这样做这个:
git fetch server1-remote develop
git push github-remote server1-remote/develop:develop
git fetch 命令的意思是:
- 查找名称
server1-remote 以获取 Server-1 存储库的 URL;
- 联系该 URL 上的 Git 软件,将 Git 连接到该存储库;
- 让他们列出所有分支名称和提交哈希 ID;和
- 从他们的
develop 获取我需要更新的任何信息,记住它为server1-remote/develop。
名称server1-remote 是我们给git fetch 的名称。我们将这种特定的获取限制为仅 develop,但获取所有内容通常更有意义:这降低了调用 Git(通常相当大)与获取新提交的成本从他们那里(通常很小,如果他们通常没有很多新东西的话)。运行六个git fetch-es 来更新六个分支/远程跟踪名称比运行一个同时更新所有六个的git fetch 更昂贵。
git push 步骤使用远程名称 github-remote 在(可能不同的)URL 调用 Git 软件。无论 Git 在该 URL 上回答 Internet 电话,然后您将任何来自您自己的 server1-remote/develop 的新提交交给它(由于刚刚完成的提取,它具有 server1 的 develop 上的所有提交) .然后你礼貌地问他们创建或更新他们自己的develop 以记住以最近此类提交结束的提交。这就是你所要做的,前提是:
- 提取工作;
- 推送有效(他们接受新的提交);和
- 您已经使用正确的 URL 设置了这两个 remote 名称。
如果您愿意,可以使用不同的远程名称:这些名称完全由您决定。默认的origin 名称很好,但只能用于这两个 URL 中的 一个,并且您需要两个名称。使用:
git remote add <name> <url>
(用您想要的名称和 URL 替换 <name> 和 <url> 部分)将新的遥控器添加到一些现有的 Git 存储库。使用 git remote set-url 更改与现有远程关联的 URL。同样,remote 只是 URL 的简称;通过拥有两个,您可以让您的 Git 联系其他两个 Git 并使用这些存储库。
请注意,如果您不希望两个远程存储库中的完全相同的提交(具有相同的哈希 ID、快照和提交元数据),则必须采用 提交 em> 您从服务器 1 获得并使用它们进行新的和不同的提交以发送到 GitHub。这是一个更复杂的过程。