Skip to main content

使用 git daemon 快速传递代码

wKevin

局域网内多人之间、个人多台电脑之间 —— 如何快速分享、互传 git 管理的代码?

  • 邮件?
  • ftp?
  • scp [-P <port>] <src-file> <user>@<ip>/<dst-file>
  • python -m http.server
  • npm install http-server -g then http-server <root/dir> [-p <port>] ?

上面都行,但文件要逐个传或打包,然后手工合并……不妨用 git 内置的 server 来处理:

$ git daemon

Server

  • 创建一个空的项目库。
$ mkdir repos
$ cd repos
$ mkdir myproject-repo.git
$ cd myproject-repo.git
$ git init
$ cd ../../
  • 在本地可以用相对路径直接 push 代码
$ cd myproject
$ git push ../repos/myproject-repo.git foo-branch:bar-branch
  • 如果还想从这个库里 fetch 代码,那还要创建 remote
$ git remote add local ../repos/myproject-repo.git
  • 打开防火墙的 9418 端口

windowns 和 linux 不同,各自找办法吧。

  • 启动 daemon 服务
$ git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose

上面是只读的,如果希望 Client 还能 push,则:

$ git daemon --base-path=. --export-all --enable=receive-pack --reuseaddr --informative-errors --verbose

其中,--export-all 能够让 repos/ 下所有文件夹暴露为 git 库,否则 git daemon 仅搜索包含 git-daemon-export-ok 文件的目录暴露出来。

  • 创建 alias
$ git config --global alias.serve '!git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose'
$ git config --global alias.hub '!git daemon --base-path=. --export-all --enable=receive-pack --reuseaddr --informative-errors --verbose'

Client

$ git clone git://<server-ip>/myproject-repo

如果希望 push,则需要配置:

$ git config --global sendpack.sideband false

否则容易卡死在 Writing objects: 100% (3/3) 不动,尤其 windows 常见。

然后就是普通的 push.

Server

client push 后,server 也是常规的 pull or fetch,使用上面创建的 local remote。

$ git fetch local

Ref