3.6.1 基本的衍合操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.6.2 有趣的衍合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6.3 衍合的风险 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4 服务器上的 Git 75
4.1 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.1.1 本地协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.1.2 SSH 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.1.3 Git 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.1.4 HTTP/S 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.2 在服务器上部署 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.2.1 把裸仓库移到服务器上 . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.2.2 小型安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
SSH 连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.3 生成 SSH 公钥 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.4 架设服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.5 公共访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.6 GitWeb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.7 Gitosis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.8 Gitolite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.8.1 Installing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.8.2 Customising the Install . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.8.3 Config File and Access Control Rules . . . . . . . . . . . . . . . . . . . 93
4.8.4 Advanced Access Control with “deny” rules . . . . . . . . . . . . . . 95
4.8.5 Restricting pushes by files changed . . . . . . . . . . . . . . . . . . . . 96
4.8.6 Personal Branches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.8.7 “Wildcard” repositories . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.8.8 Other Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4.9 Git 守护进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.10 Git 托管服务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.10.1 GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.10.2 建立新账户 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.10.3 建立新仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.10.4 从 Subversion 导入项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.10.5 添加协作开发者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.10.6 项目页面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.10.7 派生项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
v