局域网内多人之间、个人多台电脑之间 —— 如何快速分享、互传 git 管理的代码?
- 邮件?
- ftp?
scp [-P <port>] <src-file> <user>@<ip>/<dst-file>
python -m http.server
npm install http-server -g
thenhttp-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