MsysGit乱码与跨平台版本管理

老邓 2011-01-06 08:31:43
涉及两个问题:
1. 妥善解决MsysGit的中文乱码问题
2. 跨平台项目的版本库管理问题

网上提供了很多方便,但基本上都有一条:将日志强制使用GBK编码保存。
[i18n]
commitencoding = gbk

这样做的坏处是当提交到git项目托管网站时,由于网页默认使用的是utf-8编码,这会导致中文的commit log会乱码!
而且,由于在Unix下提交时,默认采用的是utf-8编码,这将导致有些log是GBK编码,有些log是utf-8编码,非常混乱。

经过一天的实践,总结出一种全新的方案,使用Windows、Unix及托管网站都可以完全的显示中文commit log.
原理:强制log统一使用utf-8编码。

1.在 etc\gitconfig 中添加:
[gui]
encoding = utf-8
[i18n]
commitencoding = utf-8
logoutputencoding = gbk

说明:
1) gui.encoding = utf-8 解决在 $ git gui 和 gitk 里中文乱码。
2) i18n.commitencoding = utf-8 设置 commit log 提交时使用 utf-8 编码,可避免服务器上乱码,同时与Unix上的提交保持一致!
3) i18n.logoutputencoding = gbk 使得在 $ git log 时将 utf-8 编码转换成 gbk 编码,解决 MSYS Bash 中 $ git log 乱码。

2.使得 $ git log 可以正常显示中文(配合i18n.logoutputencoding = gbk),在 etc\profile 中添加:
  export LESSCHARSET=utf-8


网上流传的方法都没有使用logoutputencoding = gbk选项。
而我认为这才是最终解决中文commit log乱码的根本方案。

MsysGit的中文乱码,有两方面的原因:
1. MSYS Bash不支持utf-8编码的中文显示,而且没有自动将utf-8编码转换成gbk编码的选项。
2. Git GUI无法自动检测当前文件编码,导致只能由用户指定:encoding = utf-8 ,弊端是非utf-8编码的文本将显示乱码。

也鉴于这个原因,如果是开发跨平台项目,建议统一使用UTF-8编码,以尽可能的解决中文乱码问题。
...全文
1158 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
5257007 2011-06-29
  • 打赏
  • 举报
回复
我的git配置后,除了git status之外的命令,显示中文都没有问题。git status显示中文文件名字和目录名字都是乱码,谁遇到这种情况没有?多谢啊。
xunxun 2011-01-07
  • 打赏
  • 举报
回复
奇怪啊,有程序例子或者git例子么(例程可以Email我),我可以测试下,我暂时只是测试的cmd程序没有问题。
老邓 2011-01-07
  • 打赏
  • 举报
回复
而且cmd是自动将代码页改为936,在执行git diff之后。
所以才出来上面的乱码。
老邓 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xunxun1982 的回复:]

引用 5 楼 loaden 的回复:

照做后,在属性里看到代码页使用的已经是UTF-8了。
不过,中文仍然无法显示。
这回不是乱码,而是无法显示了。


字体改了么?不改字体就是无法显示
[/Quote]
改了,两种字体都试了。
我在cmd下做同样测试,则显示:
-    QString str("<E4><B8><96><E7><95><8C><EF><BC><8C><E4><BD><A0>ff<E5><A5><BD>
+ QString str("<E4><B8><96><E7><95><8C><EF><BC><8C><E4><BD><A0><E5><A5><BD>
xunxun 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 loaden 的回复:]

照做后,在属性里看到代码页使用的已经是UTF-8了。
不过,中文仍然无法显示。
这回不是乱码,而是无法显示了。
[/Quote]

字体改了么?不改字体就是无法显示
老邓 2011-01-07
  • 打赏
  • 举报
回复
照做后,在属性里看到代码页使用的已经是UTF-8了。
不过,中文仍然无法显示。
这回不是乱码,而是无法显示了。
xunxun 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 loaden 的回复:]

忘了我的问题:
请教如何在 MSYS 的 Bash 中将所有输出自动从 UTF-8 转换到GBK么?
[/Quote]
这个我不知能否做到,但是可以让bash正确显示UTF-8字符。因为msys的bash和windows的cmd相关的,也是内含了windows的代码页。他默认的代码页是GBK的。
在bash里输入

c:/windows/system32/chcp.com 65001

然后按Alt-space,选择属性,在字体栏里选择字体为非点阵字体(在我这里为Consolas和Lucida Console字体),然后在bash里输入utf-8输出的命令,你会发现就不会乱码了。缺点是gbk输出的就会乱码。
老邓 2011-01-07
  • 打赏
  • 举报
回复
忘了我的问题:
请教如何在 MSYS 的 Bash 中将所有输出自动从 UTF-8 转换到GBK么?
老邓 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xunxun1982 的回复:]

不知道Tortoise GIT GUI能否做到
[/Quote]
Tortoise GIT只能用于Windows平台,所以暂时没考虑它。
老邓 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xunxun1982 的回复:]

引用 17 楼 iambic 的回复:

在git有完善的windows支持之前(或者按Linus的说法“在windows”有完善的git支持之前),坚持hg。

Tortoise GIT还可以吧
[/Quote]
因为Unix下没有Tortoise Git,但有git gui,和Windows下是一样的。
为了保持同样的操作习惯,还是git gui吧。
或者git bash结合。

下午解决了在git bash下commit时编码问题,原因见 #20.
所以提交了一个bug :我觉得这个编码转换,应该由git 做。
http://code.google.com/p/msysgit/issues/detail?id=557
老邓 2011-01-07
  • 打赏
  • 举报
回复
HG被我无视了,主要是分支管理上不够强大。
另外,Git的性能是最好的: http://whygitisbetterthanx.com/

另外:
从MsysGit中提交的log采取GBK编码的原因是:COMMIT_EDITMSG的编码是GBK的。所以git config --global core.editor notepad2后,在编辑log后将其转换为UTF-8编码提交时可避免乱码。
1. 老邓: 这个乱码只针对git bash中提交时。git gui中肯定是自动转换编码了。
2. 老邓: 而在Windows平台下,QtCreator中的Git插件在提交log时,也没有做编码的转换,所以会将GBK的log当作UTF-8编码提交到版本库中。


xunxun 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 iambic 的回复:]

在git有完善的windows支持之前(或者按Linus的说法“在windows”有完善的git支持之前),坚持hg。
[/Quote]
Tortoise GIT还可以吧
yutaooo 2011-01-07
  • 打赏
  • 举报
回复

强大的分支管理
iambic 2011-01-07
  • 打赏
  • 举报
回复
在git有完善的windows支持之前(或者按Linus的说法“在windows”有完善的git支持之前),坚持hg。
老邓 2011-01-07
  • 打赏
  • 举报
回复
有需要的,自己看着改改,放到bin目录执行一下就搞定了。
正好从网上打印的progit中文版也到手了,越研究progit,直感叹相见恨晚!
强大的分支管理,爽的不得了。
老邓 2011-01-07
  • 打赏
  • 举报
回复
写了一个脚本,用于自动完成所有设置!
#!/bin/sh

# MsysGit 中文支持
cat >> /etc/gitconfig << END
[gui]
encoding = utf-8
[i18n]
commitencoding = utf-8
logoutputencoding = gbk
END
cat >> /etc/profile << END
export LESSCHARSET=utf-8
END

# 全局配置
git config --global user.name "qpsoft"
git config --global user.email "support@qpsoft.com"

# 取消 $ git gui 的中文界面,改用英文界面更易懂
if [ -f "/share/git-gui/lib/msgs/zh_cn.msg" ]; then
rm /share/git-gui/lib/msgs/zh_cn.msg
fi
老邓 2011-01-07
  • 打赏
  • 举报
回复
有的工程会只面向中文环境,所以源码中有中文是无法避免的。
再次整理了一下:
【中文支持】
1.在 etc\gitconfig 中添加:
[gui]
encoding = utf-8
[i18n]
commitencoding = utf-8
logoutputencoding = gbk
说明:
1) gui.encoding = utf-8 解决在 $ git gui 和 gitk 里中文乱码。
2) i18n.commitencoding = utf-8 设置 commit log 提交时使用 utf-8 编码,可避免服务器上乱码,同时与Unix上的提交保持一致!
3) i18n.logoutputencoding = gbk 使得在 $ git log 时将 utf-8 编码转换成 gbk 编码,解决 MSYS Bash 中 $ git log 乱码。

2.使得 $ git log 可以正常显示中文(配合i18n.logoutputencoding = gbk),在 etc\profile 中添加:
export LESSCHARSET=utf-8

【全局配置】
1.添加全局用户名及邮件
$ git config --global user.name "用户名"
$ git config --global user.email "邮件地址"

2.取消 $ git gui 的中文界面,改用英文界面更易懂
$ rm /share/git-gui/lib/msgs/zh_cn.msg

【注意事项】
1.$ git checkout 有时候需要修改/增删很多文件,如果某些文件被占用,会被 Windows 拒绝,导致失败,甚至可能造成版本库出现无法修复的问题。这是由文件系统决定的,只能尽量避免 checkout,实在需要的时候先注销一次,就不会有问题了。
2.Git目前不支持中文文件名的文档,切记!!
3.提交时切记只在 $ git gui 中操作:它可以保证提交的 log 是按 i18n.commitencoding 的设定来编码的。
xunxun 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 loaden 的回复:]

引用 11 楼 xunxun1982 的回复:

这个做法和我的差不多吧。
我没建立Qt工程,是使用的utf-8的c语言源码输出中文字符。
按照我的设置,是能够正确显示的。

嗯,你是在msys下写的C程序输出中文吧。
我也没用Qt,我是用的git版本管理:然后尝试中文的commit log,以及中文的git diff.

经过Windows/Unix两个平台的反复测试,以及与……
[/Quote]
这个是的,中文系统控制台输出中文得使用gbk编码,你说的commit log我没试过中文在控制台输出。反正和控制台有关的,我一律使用英文了,省得麻烦。
老邓 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xunxun1982 的回复:]

这个做法和我的差不多吧。
我没建立Qt工程,是使用的utf-8的c语言源码输出中文字符。
按照我的设置,是能够正确显示的。
[/Quote]
嗯,你是在msys下写的C程序输出中文吧。
我也没用Qt,我是用的git版本管理:然后尝试中文的commit log,以及中文的git diff.

经过Windows/Unix两个平台的反复测试,以及与gitorious.org托管平台的网页commit log显示测试,发现所有编码都使用utf-8是最适合跨平台开发的!也最适合git的跨平台管理。
xunxun 2011-01-07
  • 打赏
  • 举报
回复
这个做法和我的差不多吧。
我没建立Qt工程,是使用的utf-8的c语言源码输出中文字符。
按照我的设置,是能够正确显示的。
加载更多回复(2)
Git权威指南 目 录 前 言 第1篇 初识Git 第1章 版本控制的前世和今生/ 2 1.1 黑暗的史前时代/ 2 1.2 CVS—开启版本控制大爆发/ 5 1.3 SVN—集中式版本控制集大成者/ 7 1.4 Git—Linus 的第二个伟大作品/ 9 第2章 爱上 Git 的理由/ 11 2.1 每日工作备份/ 11 2.2 异地协同工作/ 12 2.3 现场版本控制/ 13 2.4 避免引入辅助目录/ 15 2.5 重写提交说明/ 15 2.6 想吃后悔药/ 16 2.7 更好用的提交列表/ 17 2.8 更好的差异比较/ 18 2.9 工作进度保存/ 18 2.10 代理SVN提交实现移动式办公/ 19 2.11 无处不在的分页器/ 20 2.12 快/ 21 第3章 Git的安装和使用/ 22 3.1 在Linux 下安装和使用 Git/ 22 3.1.1 包管理器方式安装/ 22 3.1.2 从源代码进行安装/ 23 3.1.3 从Git版本库进行安装/ 23 3.1.4 命令补齐/ 25 3.1.5 中文支持/ 25 3.2 在Mac OS X 下安装和使用 Git/ 26 3.2.1 以二进制发布包的方式安装/ 26 3.2.2 安装 Xcode/ 27 3.2.3 使用 Homebrew 安装 Git/ 29 3.2.4 从Git源码进行安装/ 29 3.2.5 命令补齐/ 30 3.2.6 其他辅助工具的安装/ 30 3.2.7 中文支持/ 31 3.3 在Windows 下安装和使用 Git(Cygwin篇)/ 31 3.3.1 安装 Cygwin/ 32 3.3.2 安装 Git/ 36 3.3.3 Cygwin 的配置和使用/ 37 3.3.4 Cygwin 下 Git 的中文支持/ 40 3.3.5 Cygwin 下 Git 访问 SSH 服务/ 41 3.4 Windows 下安装和使用 Git(msysGit篇)/ 45 3.4.1 安装 msysGit/ 46 3.4.2 msysGit 的配置和使用/ 48 3.4.3 msysGit中shell环境的中文支持/ 49 3.4.4 msysGit中Git的中文支持/ 50 3.4.5 使用 SSH 协议/ 51 3.4.6 TortoiseGit 的安装和使用/ 52 3.4.7 TortoiseGit 的中文支持/ 55 第2篇 Git独奏 第4章 Git 初始化/ 58 4.1 创建版本库及第一次提交/ 58 4.2 思考:为什么工作区根目录下有一个 .git 目录/ 60 4.3 思考:git config 命令的各参数有何区别/ 63 4.4 思考:是谁完成的提交/ 65 4.5 思考:随意设置提交者姓名,是否太不安全/ 67 4.6 思考:命令别名是干什么的/ 68 4.7 备份本章的工作成果/ 69 第5章 Git 暂存区/ 70 5.1 修改不能直接提交吗/ 70 5.2 理解 Git 暂存区(stage)/ 76 5.3 Git Diff 魔法/ 78 5.4 不要使用 git commit -a/ 81 5.5 搁置问题,暂存状态/ 82 第6章 Git对象/ 83 6.1 Git对象库探秘/ 83 6.2 思考:SHA1 哈希值到底是什么,是如何生成的/ 88 6.3 思考:为什么不用顺序的数字来表示提交/ 90 第7章 Git 重置/ 93 7.1 分支游标master探秘/ 93 7.2 用 reflog 挽救错误的重置/ 95 7.3 深入了解git reset命令/ 96 第8章 Git 检出/ 99 8.1 HEAD 的重置即检出/ 99 8.2 挽救分离头指针/ 102 8.3 深入了解 git checkout 命令/ 103 第9章 恢复进度/ 105 9.1 继续暂存区未完成的实践/ 105 9.2 使用 git stash/ 108 9.3 探秘 git stash/ 109 第10章 Git 基本操作/ 114 10.1 先来合个影/ 114 10.2 删除文件/ 114 10.2.1 本地删除不是真的删除/ 115 10.2.2 执行 git rm 命令删除文件/ 116 10.2.3 命令git add -u快速标记删除/ 117 10.3 恢复删除的文件/ 118 10.4 移动文件/ 119 10.5 一个显示版本号的 Hello World/ 120 10.6 使用 git add -i 选择性添加/ 122 10.7 Hello World 引发的新问题/ 124 10.8 文件忽略/ 125 10.9 文件归档/ 129 第11章 历史穿梭/ 130 11.1 图形工具:gitk/ 130 11.2 图形工具:gitg/ 131 11.3 图形工具:qgit/ 135 11.4 命令行工具/ 140 11.4.1 版本表示法:git rev-parse/ 141 11.4.2 版本范围表示法:git rev-list/ 144 11.4.3 浏览日志:git log/ 146 11.4.4 差异比较:git diff/ 150 11.4.5 文件追溯:git blame/ 151 11.4.6 二分查找:git bisect/ 152 11.4.7 获取历史版本/ 156 第12章 改变历史/ 157 12.1 悔棋/ 157 12.2 多步悔棋/ 159 12.3 回到未来/ 161 12.3.1 时间旅行一/ 162 12.3.2 时间旅行二/ 167 12.3.3 时间旅行三/ 171 12.4 丢弃历史/ 174 12.5 反转提交/ 177 第13章 Git 克隆/ 179 13.1 鸡蛋不装在一个篮子里/ 179 13.2 对等工作区/ 180 13.3 克隆生成裸版本库/ 183 13.4 创建生成裸版本库/ 184 第14章 Git库管理/ 187 14.1 对象和引用哪里去了/ 187 14.2 暂存区操作引入的临时对象/ 189 14.3 重置操作引入的对象/ 191 14.4 Git管家:git-gc/ 193 14.5 Git管家的自动执行/ 196 第3篇 Git和声 第15章 Git协议与工作协同/ 200 15.1 Git 支持的协议/ 200 15.2 多用户协同的本地模拟/ 202 15.3 强制非快进式推送/ 203 15.4 合并后推送/ 207 15.5 禁止非快进式推送/ 208 第16章 冲突解决/ 210 16.1 拉回操作中的合并/ 210 16.2 合并一:自动合并/ 212 16.2.1 修改不同的文件/ 212 16.2.2 修改相同文件的不同区域/ 214 16.2.3 同时更改文件名和文件内容/ 215 16.3 合并二:逻辑冲突/ 217 16.4 合并三:冲突解决/ 218 16.4.1 手工编辑完成冲突解决/ 221 16.4.2 图形工具完成冲突解决/ 221 16.5 合并四:树冲突/ 225 16.5.1 手工操作解决树冲突/ 227 16.5.2 交互式解决树冲突/ 228 16.6 合并策略/ 230 16.7 合并相关的设置/ 231 第17章 Git 里程碑/ 233 17.1 显示里程碑/ 234 17.2 创建里程碑/ 236 17.2.1 轻量级里程碑/ 237 17.2.2 带说明的里程碑/ 238 17.2.3 带签名的里程碑/ 239 17.3 删除里程碑/ 242 17.4 不要随意更改里程碑/ 243 17.5 共享里程碑/ 243 17.6 删除远程版本库的里程碑/ 246 17.7 里程碑命名规范/ 247 第18章 Git 分支/ 253 18.1 代码管理之殇/ 253 18.1.1 发布分支/ 253 18.1.2 特性分支/ 256 18.1.3 卖主分支/ 257 18.2 分支命令概述/ 258 18.3 “Hello World”开发计划/ 259 18.4 基于特性分支的开发/ 260 18.4.1 创建分支 user1/getopt/ 261 18.4.2 创建分支 user2/i18n/ 262 18.4.3 开发者 user1 完成功能开发/ 263 18.4.4 将 user1/getopt 分支合并到主线/ 264 18.5 基于发布分支的开发/ 265 18.5.1 创建发布分支/ 266 18.5.2 开发者 user1 工作在发布分支/ 267 18.5.3 开发者 user2 工作在发布分支/ 268 18.5.4 开发者 user2 合并推送/ 270 18.5.5 发布分支的提交合并到主线/ 271 18.6 分支变基/ 275 18.6.1 完成 user2/i18n 特性分支的开发/ 275 18.6.2 分支 user2/i18n 变基/ 277 第19章 远程版本库/ 284 19.1 远程分支/ 284 19.2 分支追踪/ 287 19.3 远程版本库/ 290 19.4 PUSH 和 PULL 操作与远程版本库/ 292 19.5 里程碑和远程版本库/ 294 19.6 分支和里程碑的安全性/ 294 第20章 补丁文件交互/ 296 20.1 创建补丁/ 296 20.2 应用补丁/ 297 20.3 StGit 和 Quilt/ 300 20.3.1 StGit/ 300 20.3.2 Quilt/ 304 第4篇 Git协同模型 第21章 经典Git协同模型/ 308 21.1 集中式协同模型/ 308 21.1.1 传统集中式协同模型/ 309 21.1.2 Gerrit 特殊的集中式协同模型/ 310 21.2 金字塔式协同模型/ 311 21.2.1 贡献者开放只读版本库/ 312 21.2.2 以补丁方式贡献代码/ 313 第22章 Topgit 协同模型/ 314 22.1 作者版本控制系统的三个里程碑/ 314 22.2 Topgit 原理/ 316 22.3 Topgit 的安装/ 317 22.4 Topgit 的使用/ 319 22.5 用Topgit方式改造Topgit/ 330 22.6 Topgit 使用中的注意事项/ 334 第23章 子模组协同模型/ 336 23.1 创建子模组/ 336 23.2 克隆带子模组的版本库/ 339 23.3 在子模组中修改和子模组的更新/ 340 23.4 隐性子模组/ 343 23.5 子模组的管理问题/ 345 第24章 子树合并/ 347 24.1 引入外部版本库/ 347 24.2 子目录方式合并外部版本库/ 349 24.3 利用子树合并跟踪上游改动/ 351 24.4 子树拆分/ 353 24.5 git-subtree 插件/ 353 第25章 Android 式多版本库协同/ 356 25.1 关于 repo/ 357 25.2 安装 repo/ 357 25.3 repo和清单库的初始化/ 359 25.4 清单库和清单文件/ 360 25.5 同步项目/ 361 25.6 建立 Android 代码库本地镜像/ 363 25.7 repo 的命令集/ 365 25.8 repo 命令的工作流/ 370 25.9 好东西不能 Android 独享/ 371 25.9.1 repo+Gerrit 模式/ 371 25.9.2 repo 无审核模式/ 371 25.9.3 改进的 repo 无审核模式/ 372 第26章 Git 和 SVN 协同模型/ 378 26.1 使用 git-svn 的一般流程/ 380 26.2 git-svn 的奥秘/ 386 26.2.1 Git 库配置文件的扩展及分支映射/ 387 26.2.2 Git工作分支和 Subversion 如何对应/ 388 26.2.3 其他辅助文件/ 390 26.3 多样的 git-svn 克隆模式/ 390 26.4 共享 git-svn 的克隆库/ 393 26.5 git-svn 的局限/ 394 第5篇 搭建Git服务器 第27章 使用 HTTP 协议/ 398 27.1 哑传输协议/ 398 27.2 智能 HTTP 协议/ 400 27.3 Gitweb 服务器/ 401 27.3.1 Gitweb的安装/ 402 27.3.2 Gitweb的配置/ 403 27.3.3 版本库的 Gitweb 相关设置/ 404 27.3.4 即时Gitweb服务/ 405 第28章 使用 Git 协议/ 406 28.1 Git 协议语法格式/ 406 28.2 Git 服务软件/ 406 28.3 以 inetd 方式配置运行/ 406 28.4 以 runit 方式配置运行/ 407 第29章 使用 SSH 协议/ 409 29.1 SSH 协议语法格式/ 409 29.2 服务架设方式比较/ 409 29.3 关于 SSH 公钥认证/ 411 29.4 关于 SSH 主机别名/ 411 第30章 Gitolite 服务架设/ 413 30.1 安装Gitolite/ 414 30.1.1 服务器端创建专用账号/ 414 30.1.2 Gitolite 的安装/升级/ 415 30.1.3 关于 SSH 主机别名/ 417 30.1.4 其他的安装方法/ 418 30.2 管理 Gitolite/ 419 30.2.1 管理员克隆 gitolite-admin 管理库/ 419 30.2.2 增加新用户/ 420 30.2.3 更改授权/ 422 30.3 Gitolite 授权详解/ 423 30.3.1 授权文件的基本语法/ 423 30.3.2 定义用户组和版本库组/ 424 30.3.3 版本库ACL/ 424 30.3.4 Gitolite 授权机制/ 426 30.4 版本库授权案例/ 427 30.4.1 对整个版本库进行授权/ 427 30.4.2 通配符版本库的授权/ 428 30.4.3 用户自己的版本库空间/ 429 30.4.4 对引用的授权:传统模式/ 430 30.4.5 对引用的授权:扩展模式/ 430 30.4.6 对引用的授权:禁用规则的使用/ 431 30.4.7 用户分支/ 431 30.4.8 对路径的写授权/ 432 30.5 创建新版本库/ 432 30.5.1 在配置文件中出现的版本库,即时生成/ 433 30.5.2 通配符版本库,管理员通过推送创建/ 434 30.5.3 直接在服务器端创建/ 435 30.6 对 Gitolite 的改进/ 435 30.7 Gitolite 功能拓展/ 436 30.7.1 版本库镜像/ 436 30.7.2 Gitweb 和 Git daemon 支持/ 438 30.7.3 其他功能拓展和参考/ 439 第31章 Gitosis 服务架设/ 441 31.1 安装 Gitosis/ 442 31.1.1 Gitosis 的安装/ 442 31.1.2 服务器端创建专用账号/ 442 31.1.3 Gitosis 服务初始化/ 443 31.2 管理 Gitosis/ 443 31.2.1 管理员克隆 gitolit-admin 管理库/ 443 31.2.2 增加新用户/ 444 31.2.3 更改授权/ 446 31.3 Gitosis 授权详解/ 447 31.3.1 Gitosis 默认设置/ 447 31.3.2 管理版本库 gitosis-admin/ 447 31.3.3 定义用户组和授权/ 448 31.3.4 Gitweb 整合/ 449 31.4 创建新版本库/ 449 31.5 轻量级管理的 Git 服务/ 450 第32章 Gerrit 代码审核服务器/ 452 32.1 Gerrit 的实现原理/ 452 32.2 架设 Gerrit 的服务器/ 456 32.3 Gerrit 的配置文件/ 461 32.4 Gerrit 的数据库访问/ 462 32.5 立即注册为 Gerrit 管理员/ 464 32.6 管理员访问 SSH 的管理接口/ 467 32.7 创建新项目/ 468 32.8 从已有的 Git 库创建项目/ 472 32.9 定义评审工作流/ 473 32.10 Gerrit 评审工作流实战/ 477 32.10.1 开发者在本地版本库中工作/ 477 32.10.2 开发者向审核服务器提交/ 478 32.10.3 审核评审任务/ 478 32.10.4 评审任务没有通过测试/ 480 32.10.5 重新提交新的补丁集/ 482 32.10.6 新修订集通过评审/ 483 32.10.7 从远程版本库更新/ 485 32.11 更多 Gerrit 参考/ 486 第33章 Git 版本库托管/ 487 33.1 Github/ 487 33.2 Gitorious/ 489 第6篇 迁移到Git 第34章 CVS版本库到Git的迁移/ 492 34.1 安装cvs2svn(含 cvs2git)/ 492 34.1.1 Linux下cvs2svn的安装/ 492 34.1.2 Mac OS X 下 cvs2svn 的安装/ 493 34.2 版本库转换的准备工作/ 494 34.2.1 版本库转换注意事项/ 494 34.2.2 文件名乱码问题/ 494 34.2.3 提交说明乱码问题/ 494 34.3 版本库转换/ 496 34.3.1 配置文件解说/ 496 34.3.2 运行cvs2git完成转换/ 500 34.4 迁移后的版本库检查/ 501 第35章 更多版本控制系统的迁移/ 502 35.1 SVN版本库到Git的迁移/ 502 35.2 Hg 版本库到Git的迁移/ 503 35.3 通用版本库迁移/ 505 35.4 Git 版本库整理/ 511 35.4.1 环境变量过滤器/ 513 35.4.2 树过滤器/ 513 35.4.3 暂存区过滤器/ 513 35.4.4 父节点过滤器/ 514 35.4.5 提交说明过滤器/ 514 35.4.6 提交过滤器/ 515 35.4.7 里程碑名字过滤器/ 516 35.4.8 子目录过滤器/ 516 第7篇 Git的其他应用 第36章 etckeeper/ 518 36.1 安装 etckeeper/ 518 36.2 配置 etckeeper/ 519 36.3 使用 etckeeper/ 519 第37章 Gistore/ 520 37.1 Gistore 的安装/ 520 37.1.1 软件依赖/ 520 37.1.2 从源码安装 Gistore/ 521 37.1.3 用 easy_install 安装/ 521 37.2 Gistore 的使用/ 522 37.2.1 创建并初始化备份库/ 522 37.2.2 Gistore 的配置文件/ 523 37.2.3 Gistore 的备份项管理/ 524 37.2.4 执行备份任务/ 525 37.2.5 查看备份日志/ 525 37.2.6 查看及恢复备份数据/ 527 37.2.7 备份回滚及设置/ 528 37.2.8 注册备份任务别名/ 529 37.2.9 自动备份:crontab/ 529 37.3 Gistore 双机备份/ 529 第38章 补丁中的二进制文件/ 531 38.1 Git 版本库中二进制文件变更的支持/ 531 38.2 对非 Git 版本库中二进制文件变更的支持/ 535 38.3 其他工具对 Git 扩展补丁文件的支持/ 536 第39章 云存储/ 538 39.1 现有云存储的问题/ 538 39.2 Git 式云存储畅想/ 539 第8篇 Git杂谈 第40章 跨平台操作 Git/ 542 40.1 字符集问题/ 542 40.2 文件名大小写问题/ 543 40.3 换行符问题/ 545 第41章 Git 的其他特性/ 549 41.1 属性/ 549 41.1.1 属性定义/ 549 41.1.2 属性文件及优先级/ 550 41.1.3 常用属性介绍/ 552 41.2 钩子和模板/ 557 41.2.1 Git 钩子/ 557 41.2.2 Git 模板/ 562 41.3 稀疏检出和浅克隆/ 563 41.3.1 稀疏检出/ 563 41.3.2 浅克隆/ 566 41.4 嫁接和替换/ 568 41.4.1 提交嫁接/ 568 41.4.2 提交替换/ 568 41.5 Git 评注/ 570 41.5.1 评注的奥秘/ 570 41.5.2 评注相关命令/ 573 41.5.3 评注相关配置/ 574 第9篇 附录 附录A Git 命令索引/ 576 A.1 常用的Git命令/ 576 A.2 对象库操作相关命令/ 578 A.3 引用操作相关命令/ 578 A.4 版本管理相关命令/ 579 A.5 数据传输相关命令/ 579 A.6 邮件相关命令/ 580 A.7 协议相关命令/ 580 A.8 版本库转换和交互相关命令/ 581 A.9 合并相关的辅助命令/ 581 A.10 杂项/ 582 附录B Git 与 CVS 面对面/ 583 B.1 面对面访谈录/ 583 B.2 Git 和CVS 命令对照/ 585 附录C Git 与 SVN 面对面/ 587 C.1 面对面访谈录/ 587 C.2 Git 和SVN 命令对照/ 589 附录D Git 与 Hg 面对面/ 592 D.1 面对面访谈录/ 592 D.2 Git和Hg 命令对照/ 593

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧