如何推/拉Git通过一对fifos提交?

时间:2017-09-07 08:59:12

标签: git git-commit fifo

我想知道如何使用一对fifos作为在Git存储库克隆之间交换提交的方法。

git-remote-fd从客户端的角度介绍了如何使用它,但没有给出如何设置相关服务器部分的任何示例。

到目前为止,我尝试了以下内容:

(cls: A)
但是,没有运气。这五个人明显受阻。命令挂起并永远不会完成。

我想" git push"不是服务器部分的正确命令," git send-pack"或" git upload-pack"会更合适。但我很难理解如何实际使用这两个命令。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用git receive-packgit upload-pack轻松管道git通过管道提交。

通常git receive-packgit upload-pack接受1个参数,一个git目录(包含objects文件夹的目录),然后通过其stdin / stdout与远程执行全双工通信git push / pull。

手动调用git receive-pack命令很简单:

mkfifo ab && mkfifo ba
# Now I want to push from a to b via the fifos
(git receive-pack b/.git) 1> ba 0< ab &
(cd a && git push fd::8,9 master) 8< ba 9> ab

git upload-pack的相同方式:

mkfifo ab && mkfifo ba
# Now I want to push from a to b via the fifos
(git upload-pack a/.git) 1> ab 0< ba &
(cd b && git pull --no-edit fd::8,9 master) 8< ab 9> ba

请注意git pullgit push并非完全相反的操作:

  • git push默认拒绝推送,当另一方提交它没有自己的提交时(除非-f已经给出,然后它将覆盖`),而pull进行合并提交
  • git pull可以打开一个编辑器来编辑合并提交,除非已经给出了--no-edit标志(如果编辑器是vi则是潜在的安全漏洞)