Git使用培训2


北京群英汇信息技术有限公司 http://www.ossxp.com 2005-2012 版本号: Git for managers 2012.03-1 --- Version+++ Control 2 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 整合分支 • 跟着 Git学 Git ✓ 浏览 git.git 版本库 ✓ git help workflows • git.git 中的整合分支 ✓ maint : 已发布的稳定版 ✓ master : 下⼀个发布版 ✓ next : 测试分支以决定是否进入 master ✓ pu : proposed updates • 用 git describe 命令查看整合分支 ✓ git describe maint master next 3 主题 /特性分支 • 在 Topic分支中提交 ✓ 从集成分支寻找 Topic分支的影子 • Topic分支的建立 ✓ 基于期望合并的最老的整合分支 ✓ 如 master 分支 • Topic分支变基 ✓ git fetch ✓ git rebase origin/master • 合并 Topic分支 ✓ git checkout master ✓ git merge 4 Bugfix分支 /发布分支 • 基于维护分支创建 ✓ git checkout -b hotfix maint ✓ git branch maint-X.Y.Z vX.Y.Z • 合并 hotfix至维护分支 ✓ git merge hotfix maint ✓ git merge hotfix master • 避免质量退化 ✓ git log master..maint • 删除 Bugfix分支 ✓ git branch -d hotfix 5 冻结分支 • 更新版本文件 ✓ vi version.h? ✓ git commit • 分支冻结 ✓ git checkout maint ✓ git merge --ff-only master ✓ git push origin maint • 建立里程碑 ✓ git tag -s -m "Project X.Y.Z" vX.Y.Z maint ✓ git push origin vX.Y.Z • 同样适用于 next -> master 6 关于 git push 命令 • git push ✓ git push origin master:new-branch-name ✓ git push origin refs/tags/*:refs/tags/* ✓ git push origin :obsolete-branch ✓ git push origin : • 无参数 git push ✓ 新本地分支没有推送 ✓ 其他本地分支报错: non-fast-forward • 配置变量: push.default ✓ matching | upstream | current | nothing • 建立跟踪 ✓ git push -u 7 git fetch 和 git pull • git fetch ✓ git fetch origin +refs/heads/*:refs/remotes/origin/* ✓ git fetch origin +pu:pu master:tmp • git pull = git fetch + git merge • 无跟踪分支? ✓ git pull ✓ git push -u • 拒绝非快进式合并 ✓ git pull --ff-only 8 9 分支的授权 @senior = dev1 dev2 @junior = dev3 dev4 dev5 @dev = @senior @junior manager repo project1 RW+CD = manager - refs/tags/v[0-9] = @senior RWC refs/tags/ = @senior RW master = @senior RW+CD refs/heads/u/USER/ = @dev @senior = dev1 dev2 @junior = dev3 dev4 dev5 @dev = @senior @junior manager repo project1 RW+CD = manager - refs/tags/v[0-9] = @senior RWC refs/tags/ = @senior RW master = @senior RW+CD refs/heads/u/USER/ = @dev 权限说明 • manager 对 maint 分支 ✓ 创建 / 删除 / 读 / 写 / 强制推送 • 谁可创建版本里程碑? ✓ 仅 manager 可创建 • 非版本里程碑呢? • dev2 对 maint 分支 ✓ 读 • dev2 对 master 分支 ✓ 读 / 写 • dev3 对 master 分支 ✓ 读 • u/dev4/feature1 分支 ✓ dev4: 创建 / 删除 / 读 / 写 / + ✓ dev1: 读 10 操作示例 (1) • 用户 dev3 创建分支 u/dev3/hotfix ✓ cd dev3/workspace/project1 ✓ git checkout -b u/dev3/hotfix • 用户 dev3 共享分支 u/dev3/hotfix ✓ git fetch ✓ git rebase origin/maint ✓ git push -u origin u/dev3/hotfix • 用户 dev3 的 git push 困惑 ✓ git branch -d master ✓ git config push.default upstream 11 操作示例 (2) • 用户 manager 审核 /合并主题分支( fetch/merge版) ✓ 获取 u/dev3/hotfix 分支 ‣ cd manager/workspace/project1 ‣ git fetch ✓ 检查 u/dev3/hotfix 分支新提交 ‣ git log -p maint..origin/u/dev3/hotfix ‣ git log origin/u/dev3/hotfix..maint ✓ 合并 u/dev3/hotfix 分支到 master分支 ‣ git checkout master ‣ git merge origin/u/dev3/hotfix ✓ 共享 master分支 ‣ git push 12 操作示例 (3) • 用户 manager 审核 /合并主题分支( git pull版) ✓ 仅限非快进式合并 ‣ git checkout master ‣ git pull --ff-only origin u/dev3/hotfix ✓ 不限于非快进式合并 ‣ git checkout master ‣ git pull origin u/dev3/hotfix ✓ 审核合并的提交 ‣ git log -p HEAD@{1}..HEAD ✓ 若未通过审核,撤销合并 ‣ git reset --hard HEAD@{1} ✓ 若通过审核,共享 master分支 ‣ git push 13 操作示例 (4) • 用户 manager 发布新版本 1.7.4(修改版本文件,如果有的话) ✓ git checkout master ✓ vi src/version.h ✓ git add -u ✓ git commit -s -m “Version 1.7.4” • master分支升级为 maint分支 ✓ git checkout maint ✓ git merge --ff-only master • 创建新里程碑 ✓ git tag -s -m “Project 1.7.4” v1.7.4 ✓ git push ✓ git push origin v1.7.4 14 15 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 16 使用版本库克隆管理项目 @senior = dev1 dev2 @junior = dev3 dev4 dev5 @dev = @senior @junior manager repo project1 RW+ = manager R = @dev repo project1-dev RW+ = @senior manager R = @dev repo users/CREATOR/[a-zA-Z].* C = @dev RW+CD = CREATOR RW = WRITERS R = READERS manager @senior @senior = dev1 dev2 @junior = dev3 dev4 dev5 @dev = @senior @junior manager repo project1 RW+ = manager R = @dev repo project1-dev RW+ = @senior manager R = @dev repo users/CREATOR/[a-zA-Z].* C = @dev RW+CD = CREATOR RW = WRITERS R = READERS manager @senior 权限说明 • project1 版本库 ✓ manager 完全权限 ✓ @dev 组只读 • project1-dev 版本库 ✓ @senior 组完全权限 ✓ manager 完全权限 ✓ @dev 组只读 • users/dev1/project1 版本库 ✓ dev1 完全权限 ✓ manager 只读 ✓ dev2 只读 ✓ dev3 无权限,除非 dev1 授权 17 操作示例 (1) • 用户 dev3 自共享库(只读)克隆 ✓ cd dev3/workspace ✓ git clone git://server/git/project1.git • 用户 dev3 在本地开发 ✓ cd dev3/workspace/project1 • 用户 dev3 建立个人版本库 user/dev3/project1.git (工作备份) ✓ git remote add private git@server:user/dev3/project1 ✓ git push -u private master • 分享本地版本库前,变基以生成快进式分支 ✓ git fetch origin ✓ git rebase origin/master • 用户 dev3 用个人版本库 user/dev3/project1.git 分享 ✓ git push -f 18 操作示例 (2) • 用户 dev3 授权他人访问 user/dev3/project1.git ✓ 创建授权文件( tmp.txt),内容如下: ‣ READERS dev4 dev5 ‣ WRITERS dev3 manager ✓ 向个人版本库加载新授权 ‣ ssh git@server setperms user/dev3/project1 < tmp.txt ✓ 查看个人版本库授权 ‣ ssh git@server getperms user/dev3/project1 • 提供给 setperms命令的授权指令通过 stdin传输 ✓ 除了通过临时文件提供授权指令外,也可以用标准输入 ✓ 下面操作,在输入命令后等待键盘输入,以 Ctrl-D结束 $ ssh git@server setperms user/dev3/project1 READERS dev4 dev5 WRITERS dev3 manager ^D 19 操作示例 (3) • 用户 manager 审核 dev3 提交 ✓ 通过名为 dev3的远程分支跟踪 dev3个人版本库 ‣ cd manager/workspace/project1 ‣ git remote add dev3 git@server:user/dev3/project1 ‣ git fetch dev3 ✓ 审核 dev3的提交 ‣ git log -p master..dev3/master ✓ 合并 dev3的提交 ‣ git merge [--ff-only] dev3/master ✓ 更新共享版本库 ‣ git push origin master 20 21 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 补丁协同 22 • 补丁提供者 ✓ git format-patch [-s] ‣ git format-patch HEAD^.. ✓ git send-email ( [file] ... | | ) • 补丁接受者 ✓ git am [ ...] • 补丁提供者 ✓ git fetch origin ✓ git reset origin/master 23 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 引用外部版本库:SVN VS Git svn:externals git submodule 如何记录外部版本库地址? 目 录的 svn:externals 属性 根目 录下 .gitmodules 文件 缺省是否自动检出外部版本 库? 是 若使用 参数 --ignore-externals 则 不 检出 否 克隆要用 git submodule init, git submodule update 命令 是否能 部分 引用外部版本库内 容? 是 因 为 SVN 支持部分 检出 否 必 须克隆整 个外部版本 库 是否可以指向分支而随之改 变? 是 否 24 添加子模组 25 •git submodule add [-b branch] \ URL/OF/REPO local/dir • 提交完成子模组添加 ✓ 提交文件 .gitmodules (项目根目录) [submodule “local/dir”] path = local/dir url = URL/OF/REPO ✓ 提交 local/dir (非 blob, 亦非 tree) ‣ 对象类型 : commit, 权值 : 160000 ‣ 对象 ID:版本库 URL/OF/REPO 的 HEAD指向的提交 ID ✓ 更新的内容 ‣ .git/config [submodule "local/dir"] url = URL/OF/REPO 如何指向外部版本库特定提交? • 执行 git submodule add URL local/dir 后,执行: ✓ cd local/dir ✓ git checkout ✓ cd .. ✓ git add -u ✓ git diff --cached @@ -1 +1 @@ -Subproject commit 61840973a1f14e5afd2186dc48e5032b4664cdcb +Subproject commit 388fe3ada44187ffce7fffe5bba84468c9bd0098 ✓ git commit 26 克隆带有子模组版本库 • git clone super-repo ✓ 文件 .gitmodules [submodule “local/dir”] path = local/dir url = URL/OF/REPO ✓ 但子模组不会自动克隆 ✓ 配置文件 .git/config 亦不会更新 • git submodule init ✓ 完成配置文件 .git/config 的更新 • git submodule update ✓ 完成子模组的克隆 ✓ 完成本地检出:检出 gitlink 指向提交 ✓ 子模组处于分离头指针( detached)状态 ✓ 递归更新: --recursive 27 子模组更新 • 在子模组目录内检出新提交 ✓ cd local/dir ✓ git checkout • 查看子模组状态 ✓ 切换到项目根目录 ✓ git submodule status • 提交更新后的子模组 ✓ git add -u ✓ git commit 28 子模组注意事项 • 原始版本库中提交,子模组目录中检出 ✓ 子模组克隆自原始版本库,处于分离头指针状态 ✓ 子模组应该在哪个分支修改? ✓ 子模组中建立提交,会因 git submodule update而丢 失 • 若在子模组目录中建立提交,注意推送顺序 ✓ 先推送子模组 ✓ 后推送包含子模组的版本库 29 30 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 Repo:子模组的替代 31 • 子模组的优点 ✓ 简单 • 子模组的缺点 ✓ 子模组处于非跟踪状态,修改容易搞错分支 ✓ 子模组固定于某⼀提交( gitlink已经固定) • ⼀个替代方案: repo ✓ repo 源自 Google Android 项目 ✓ repo 需要通过⼀个 XML文件确立版本库关系 ✓ XML文件单独放在⼀个版本库中,称为清单版本库( manifest) ✓ 版本库可以指向⼀固定提交,也可以指向⼀分支 ✓ 使用命令行工具 repo ‣ 是对 Git的封装,实现多版本库检出 清单库 • manifests.git/default.xml 1 2 3 6 8 9 10 11 12 13 ... 181 32 操作示例 (1) 33 • 安装 repo ✓ curl http://github.com/ossxp-com/repo/raw/master/repo > ~/bin/repo ✓ chmod a+x ~/bin/repo • 按照清单库初始化 ✓ repo init -u git://github.com/ossxp-com/manifest.git ✓ repo sync • 使用清单库的不同版本 ✓ repo init -u git://github.com/ossxp-com/manifest.git -b refs/tags/v0.1.2 ✓ repo sync 操作示例 (2) 34 • 创建本地分支 ✓ repo start jiangxin --all • 设置推送地址,并推送 ✓ repo config repo.pushurl ssh://git@github.com/ ossxp-com/ ✓ repo push • 向服务器推送新分支 ✓ repo start feature1 --all ✓ repo push --new_branch Repo工作流( with Gerrit) 35 36 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 Android Gerrit 37 Gerrit原理 38 参见 39 • 《 Git权威指南》 P452页 40 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 为什么引入 Topgit 41 • 某些情况下主线不能合并 Topic分支 ✓ 主线同步自上游版本库,无法更改上 游 ✓ 个性化定制分支不适合合并到主线 • 分支并非都创建自主线 ✓ 分支 A依赖分支 B ✓ 分支 C依赖分支 D、 E ✓ 分支 B、 D、 E依赖 master • 主线变更,分支如何更新? ✓ 分支 B、 D、 E合并 master 分支 ✓ 分支 A合并新的分支 B ✓ 分支 C合并新的分支 D、 E • 难点 ✓ 手工记录分支之间的依赖关系 ✓ 过时分支的发现 Topgit安装 • 安装 ✓ git clone git://repo.or.cz/topgit.git ✓ cd topgit ✓ make ✓ make install • 我的版本 ✓ git clone git://github.com/ossxp-com/topgit.git 42 Topgit使用( 1) • 新特性分支 ✓ tg create t/feature_name [deps ...] ✓ 两个文件 ‣ .topdeps : 依赖关系 ‣ .topmsg : 特性分支说明 • 特性分支导出为补丁文件 ✓ tg export [ --all | -b BRANCH1, BRANCH2] \ --quilt ✓ 同时导出特性分支依赖的其他特性分支 • 更新分支,随依赖的分支更新而更新 ✓ tg update • 查看特性分支状态 ✓ tg info ✓ tg summary 43 Topgit使用( 2) • 推送特性分支、依赖分支和基准分支 ✓ tg push ✓ tg push --all • 特性分支添加新的依赖 ✓ tg depend add • 删除依赖 ✓ 需要手工调整 ✓ 最好重新创建,再 cherry-pick • 显示特性分支做的所有改动 ✓ tg pach • 特性分支的注册和同步 ✓ tg remote --populate origin 44 45 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 GitHub账号 46 GitHub账号 47 建立版本库派生 48 基于 web的 Pull Request和合并 49 在线编辑 50 在线编辑 51 参考 52 • 《 GitGitHub》 ✓ http://gotgit.github.com/gotgithub/ 53 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 版本库直接合并 54 • 两个库文件若无覆盖,可直接合并 ✓ repoA, repoB 文件无覆盖 ✓ 合并后保存到 repoC • 操作 ✓ git clone url-of-repoA ✓ cd url-of-repoA ✓ git remote add repoB url-of-repoB ✓ git fetch repoB ✓ git merge repoB/master ✓ git remote add repoC url-of-repoC ✓ git push origin master 子树合并 • 两个版本库存在文件冲突 ✓ 不能直接合并 repoA 和 repoB • 将 repoB作为⼀个子目录合并到 repoA ✓ git clone url-of-repoA ✓ git remote add repoB url-of-repoB ✓ git fetch repoB ✓ git branch branchB repoB/master ✓ git read-tree --prefix=lib/B branchB ✓ echo “subtree merge” | git commit-tree $(git write-tree) -p $(git rev-parse HEAD) -p $(git rev-parse branchB) 55 子树合并追踪 • 用子树合并策略建立对 repoB版本库的追踪 ✓ git checkout branchB ✓ git pull ✓ git checkout master ✓ git merge -Xsubtree=lib/B branchB 56 版本库拆分 • git filter-branch 命令 ✓ 对版本库进行外科手术:详见《 Git权威指南》 P511 • 将版本库目录 trunk 提取为新的版本库 ✓ git filter-branch --subdirectory-filter trunk HEAD 57 58 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 提交规范 59 • 使用⼀致的用户 ID:不要随意变更用户名和邮件 • 慎用中文:提交说明、文件名、目录名不要使用 中文 • 提交说明的格式: 50/72原则 ✓ 第⼀行:不超过 50个字符 ✓ 第二行:空行 ✓ 第三行开始大段的详尽描述,在 72字节处换行。可 多个段落。 ✓ 和缺陷跟踪系统整合:输入 BugID和关键字。 跨平台 (1) • 字符集问题 ✓ 参见 Git安装中的描述。 ✓ 不过尽量不要用中文写提交说明和用作文件名、目录 名。 • 文件名大小写 ✓ Mac(默认)和 Windows不支持文件名大小写 ✓ 在大小写敏感的平台(如 Linux),设置: ‣ sudo git config --system core.ignorecase true ✓ 可以在克隆版本库时指定参数 ‣ git clone -c core.ignorecase=true 60 跨平台 (2) • 换行符问题 ✓ 两类换行符 ‣ CRLF: Windows ‣ LF : Linux, Mac OS X ✓ 导致同⼀版本库,不同文件甚至同⼀文件内换行符不⼀致 • 自动换行符转换 ✓ 属性文件: .gitattributes ‣ 详见《 Git权威指南》 P549 ✓ 设置所有文件自动类型判断,文本文件则使用本地换行符 * text=auto 61 跨平台( 3) • 文件属性 ✓ Linux / Mac 通过文件属性 rwx 判断可执行 ✓ Windows 会自动取消文件属性判断 ‣ git config --system core.fileMode false ‣ 但如果从 Linux克隆版本库直接拷贝,会出现错误 62 版本库中的控制文件 • .gitignore ✓ 建立针对整个项目的忽略文件列表 ✓ 例如: # 这是注释行 —— 被忽略 *.a # 忽略所有以 .a 为扩展名的文件。 !lib.a # 但是 lib.a 文件或者目录不要忽略,即使前面设置了对 *.a 的忽略。 /TODO # 只忽略根目录下的 TODO 文件,子目录的 TODO 文件不忽略。 build/ # 忽略所有 build/ 目录下的文件。 doc/*.txt # 忽略文件如 doc/notes.txt,但是文件如 doc/server/arch.txt 不被忽略。 • .gitattributes ✓ 主要是针对文件换行符转换 ✓ 例如: *.txt text *.vcproj eol=crlf *.sh eol=lf *.jpg -text *.jpeg binary 63 产品发布 • 建立签名里程碑 ✓ git tag -s • 签名里程碑的验证 ✓ git tag -v • 公钥导出 ✓ 导出到公共 PGP公钥服务器 ✓ 保存在项目文件中 • 私钥的维护 ✓ 谁签名谁保管 64 65 实战 1 80min 40 min 分支管理实战 实战 1 80min 40 min 版本库克隆管理实战 实战 2 80min 10 min 基于补丁文件的协同 实战 2 80min 40 min 多版本库管理(子模组)实战 2 80min 30 min 多版本库管理(repo) 拓展 80min 20 min Gerrit 拓展 80min 20 min Topgit 拓展 80min 20 min GitHub 拓展 80min 20 min 版本库聚合和拆分 管理 40min 20 min 版本控制使用规范 管理 40min 20 min 版本库管理 Gitolite管理 66 • 查看权限 ✓ ssh -T git@server • 克隆管理版本库 ✓ git clone git@server:gitolite-admin • 收集用户公钥(用 ssh-keygen或 puttygen建立) ✓ 文件名: userid.pub 。如: jiangxin.pub • 添加、删除用户 ✓ 用户公钥保存在 gitolite-admin库的 keys目录下 ✓ 下列公钥指向同⼀用户: ‣ jiangxin.pub、 jiangxin@mac.pub、 jiangxin@win.pub、 office/jiangxin.pub ✓ 删除公钥文件,即相当于删除用户 • 别忘了推送,只有将提交推送到服务器才生效! 授权 • 授权文件 : gitolite-admin库中 conf/gitolite.conf 文件 • 示例: @manager = jiangxin wangsheng @dev = dev1 dev2 dev3 repo gitolite-admin RW+ = jiangxin repo ossxp/[a-z].+ C = @manager RW+ = CREATOR RW = WRITERS R = READERS @dev repo testing RW+ = @manager RW master = @dev RW refs/tags/v[0-9] = dev1 - refs/tags/ = @all 67 版本库镜像 • 授权文件 : gitolite-admin库中 conf/gitolite.conf 文件 • 示例 1: repo testing config gitolite.mirror.master = "server1" config gitolite.mirror.slaves = "server2 server3" • 示例 2: repo @all config gitolite.mirror.master = "server1" config gitolite.mirror.slaves = "server2" 68 钩子 69 • git am ✓ applypatch-msg ✓ pre-applypatch ✓ post-applypatch • git commit ✓ pre-commit ✓ prepare-commit-msg ✓ commit-msg ✓ post-commit • git rebase ✓ pre-rebase ✓ post-rewrite ‣ (git commit --amend) • git checkout ✓ post-checkout • git merge ✓ post-merge • git receive-pack ✓ pre-receive ✓ update ✓ post-receive ✓ post-update • git gc ✓ pre-auto-gc 钩子脚本扩展示例 • 默认钩子脚本 • Topgit ✓ pre-commit ( `tg --hooks-path`/pre-commit ) ‣ 只对 topgit分支检查: .topdeps, .topmsg 文件是否存在?是由有循环依赖关系? • Gerrit ✓ commit-msg ‣ 添加 Gerrit 需要的 Change-ID 字段 • gitolite-admin ✓ post-update • Gitolite ✓ post-receive ‣ 版本库同步 ✓ update ‣ 每个引用更新执行⼀次,授权检查 70 Q&A • 书目 ✓ http://www.worldhello.net/gotgit/ ✓ http://www.worldhello.net/gotgithub/ • Q&A ✓ http://weibo.com/gotgit ✓ http://q.weibo.com/567527 71
还剩70页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 7 人已下载

下载pdf

pdf贡献者

zy_open

贡献于2013-03-25

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf