如何在 Git 中从另一台计算机的存储库中提取?

例如,我在两台计算机上克隆了原始存储库。然后,我继续进行一些更改并提交到计算机 A 的本地存储库。现在如何将这些更改拉到计算机 B?计算机 A 和计算机 B 都连接到网络。

我所寻找的将是相当于有人手动创建一个补丁并发送给我,我可以应用到我的工作副本/本地回购。

71812 次浏览

您可以使用 Git Daemon设置一个实际的服务器。否则,您可以使用 Git bundle,它将 git 的内部表示捆绑到一个文件中,该文件可以与另一端的 git pull分离。

例如,从 Git 文档,捆绑所有东西:

git bundle create file.bundle master

然后,在另一端,你可以这样做:

git pull file.bundle HEAD

看看 git pull --help

这会产生类似 git pull /my/other/repository的结果

如果您想从中提取的计算机可以通过 ssh访问,那么您可以通过 ssh 将存储库作为远程文件添加到计算机上,然后像对待任何远程文件一样从中提取:

$ git remote add repo_b username@host:path/to/repository.git
$ git pull repo_b master

(您可以跳过添加远程的步骤,直接在 git pull命令中指定完整的 URL,而不是远程名称,但是如果您要定期从存储库中提取,将其添加为远程将节省大量输入。)

如果可以通过 ssh 连接到计算机 B,则可以使用:

git clone user@host:/path/to/repo

它将通过这个 ssh 连接启用远程跟踪,并允许您使用 git pull/push。

我在当地的一个储存库用另一台电脑就可以做到这一点:

git remote add origin_username username@10.0.0.2:/home/username/dev/project/main/.git/


git pull origin_username master

或者

git pull origin_username some_branch

我想出来的

git clone /path/to/local/repository

虽然有点晚了,但是为了扩展 Antoine Pelisse 的回答,您还可以从 ssh host 中提取,它包含相同的 repo 和更多的提交,而不需要在您的配置中添加 遥控器:

git pull user@host:/path/to/repo  # while in the local repo folder

需要说明的是——这种方法的一个可能用途是,当你有两个主机(A 和 B)从一个 遥控器克隆了同一个回购,你已经在主机 A 上提交了一些更改,但是你还不想把它们推到 遥控器,而是想从主机 B 那里提交。上面的命令与同步您的回购没有推到 遥控器