<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>群英汇博客 &#187; 蒋 鑫</title> <atom:link href="http://blog.ossxp.com/author/jiangxin/feed/" rel="self" type="application/rss+xml" /><link>http://blog.ossxp.com</link> <description></description> <lastBuildDate>Wed, 14 Sep 2011 03:52:03 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.2</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Gist数据嵌入博客</title><link>http://blog.ossxp.com/2011/09/2521/</link> <comments>http://blog.ossxp.com/2011/09/2521/#comments</comments> <pubDate>Wed, 14 Sep 2011 03:50:57 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Git]]></category> <category><![CDATA[版本控制]]></category> <category><![CDATA[《Got Git》]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2521</guid> <description><![CDATA[下面嵌入的Ruby代码，来自 gist.github.com访问 http://gotgit.github.com/gotgithub/ 阅读电子书《GotGitHub》。
]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/09/2521/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>GitHub新书通告及邀请您关注微博账号</title><link>http://blog.ossxp.com/2011/08/2514/</link> <comments>http://blog.ossxp.com/2011/08/2514/#comments</comments> <pubDate>Mon, 29 Aug 2011 01:26:17 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[新闻]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2514</guid> <description><![CDATA[关注本博客的网友会知道两件事：1、我最近刚刚出版一本书：《Git权威指南》；2、本博客最近更新近乎停滞。但有一件事可能不知道，就是我又写了一本书（尚未完稿），将以开源、免费的方式发布。
我从今天开始到上海出差一个星期，要四坐高铁，危险重重，故此把未完稿的书稿提前发布：
* 《GotGitHub》电子版： http://gotgit.github.com/gotgithub/
* 《GotGitHub》版本库： https://github.com/gotgit/gotgithub/
也许是写书的缘故，再写一些半长不短的博客打不起精神，而且由于很少登录本博客，导致对评论的审核和回复也非常不及时。如果希望更快找到我，可以关注我在新浪微博的账号。新浪微博： http://www.weibo.com/gotgit
新浪微群： http://q.weibo.com/567527
]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/08/2514/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>版本库中一个大家都要改的文件，又不想每次提交而覆盖，怎么办？</title><link>http://blog.ossxp.com/2011/06/2507/</link> <comments>http://blog.ossxp.com/2011/06/2507/#comments</comments> <pubDate>Fri, 10 Jun 2011 09:05:24 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Git]]></category> <category><![CDATA[《Got Git》]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2507</guid> <description><![CDATA[一个朋友打来电话，问：“使用Git做版本控制，版本库中一个大家都要改的文件，又不想每次提交而覆盖，怎么办？”
我的手机信号不好，没有听明白到底是什么文件让他的团队/客户如此纠结。我估计是某个IDE软件的项目文件，没有不行，但是IDE工作的时候，这个文件会经常随着本地项目的改动而变化，而且和每个人项目部署的目录相关，因此不同的人这个文件并不一致。我曾经还是一个Windows开发人员的时候，在 VisualStudio 6.0（maybe）中遇到。
我跟他说两个解决方案，一个比较诡异一点，一个比较普世一点。先说第一个正常人不会想到的方案——稀疏检出
Git实际上是靠暂存区来跟踪工作区文件的改动，如果希望本地修改的工作区中文件（已经在版本库中），不被识别出被改动，也不能被添加和提交，Git是有办法实现的：为暂存区中文件设置“SparseCheckout”标志位即可。
例如对于一个示例版本库，工作区有四个文件，执行下面的命令，可以看出每个文件前面的标记字母 H。
$ git ls-files -v
H hello.c
H hello.h
H myproject.dsp
H myproject.dsw
文件前面标记的字母H，表明暂存区中的文件和工作区文件建立跟踪，是默认状态。什么命令可以更改这个状态呢？或者用稀疏检出的配置文件（.git/info/sparse-checkout) 或者用 git-update-index 命令。
$ git update-index --skip-worktree myproject.dsw$ git ls-files -v
H hello.c
H hello.h
H myproject.dsp
S myproject.dsw
看到了么，执行 git update-index 命令之后，文件 myproject.dsw 在命令 git ls-files -v 的输出结果中最前面的标识由 H 变成了 S。字母 S 的含义是暂存区不再和本地文件建立跟踪，进而忽略本地文件改动。
如果对 myproject.dsw 进行改动，执行 git status 命令会发现文件的改动被忽略，也无法提交。
$ echo  test &#62; myproject.dsw
$ git status -s
$ git add myproject.dsw
$ <a
href="http://blog.ossxp.com/2011/06/2507/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/06/2507/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Git版本库同步对部分版本库禁用</title><link>http://blog.ossxp.com/2011/06/2502/</link> <comments>http://blog.ossxp.com/2011/06/2502/#comments</comments> <pubDate>Thu, 02 Jun 2011 02:59:00 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Git]]></category> <category><![CDATA[Gitolite]]></category> <category><![CDATA[《Got Git》]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2502</guid> <description><![CDATA[使用 Gitolite 假设 Git 服务，可以比较容易的配置服务器的冗余备份，在即将出版的《Git权威指南》，以及之前写的一个文档： http://www.ossxp.com/doc/git/gitolite.html 都可以看到。
当配置了Gitolite 服务器镜像之后，服务器中任何版本库的创建和推送操作都会同步写到另外的镜像服务器中，但有时会有针对个别版本库禁止镜像的需要。某些版本库保存一些二进制软件包之类非源码类文件，版本库太大，同步影响带宽。
个人版本库内容各异，做镜像没有必要。下面就介绍改造 Gitolite ，实现同步可定制的需求。使用gitolite.mirror 配置变量禁用版本库同步
修改了 gitolite 的 post-receive.mirrorpush 脚本，增加条件判断，对于配置变量 gitolite.mirror 设置为 false 的版本库，停止版本库同步。
$ git --git-dir=/path/to/repos.git config gitolite.mirror false
新建版本库自动设置 gitolite.mirror 配置变量
例如希望在 local 目录下创建的版本库，不进行镜像。即形如 local/repos1.git 的版本，只在本地服务器中存在，而不向远程服务器镜像。
可以利用 gitolite 配置文件中的 config 指令，对新建的版本库设置 gitolite.mirror 设置：
配置文件 gitolite-admin/conf/gitolite.conf 中相关配置：
repo local/.*$
C = @admin
RW+ = @admin
<a
href="http://blog.ossxp.com/2011/06/2502/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/06/2502/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>《Git权威指南》官方网站上线</title><link>http://blog.ossxp.com/2011/05/2499/</link> <comments>http://blog.ossxp.com/2011/05/2499/#comments</comments> <pubDate>Fri, 20 May 2011 10:10:57 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Git]]></category> <category><![CDATA[新闻]]></category> <category><![CDATA[《Got Git》]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2499</guid> <description><![CDATA[《Git权威指南》已于6月底出版，各大书店和网上书店有售，具体参见官网相关链接。
官方网站地址：http://www.ossxp.com/doc/gotgit/
这个网站是用 Git 维护的，人人皆可参与的哦。
]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/05/2499/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>apt-cacher-ng: 万能软件包代理</title><link>http://blog.ossxp.com/2011/04/2472/</link> <comments>http://blog.ossxp.com/2011/04/2472/#comments</comments> <pubDate>Wed, 20 Apr 2011 10:40:53 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[apt-cacher-ng]]></category> <category><![CDATA[《Got Git》]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2472</guid> <description><![CDATA[在 《Git权威指南》一书中，我在介绍 Cygwin 安装时，提到了如果整个团队在使用 Cygwin，最好架设一个代理服务器，这个代理服务器就好像一个本地软件包镜像，区别在于这个软件包镜像不是上游镜像的完整克隆，而是按需镜像。即第一次安装某个软件包时，代理服务器到上游获取然后缓存并发送给请求者，当再有用户请求同样的软件包时，直接从缓存中提取。架设这样的代理服务器，只需安装和配置 apt-cacher-ng 软件即可。
Apt-cacher-ng 本身就是一个 HTTP 协议代理，但是和其他 HTTP 代理服务器的区别在于：能够“识别”出从不同站点（源）请求下载的软件包是否是同一个软件包，即源的合并功能。
支持请求重定向。即可以不直接从客户请求的地址下载，而是重定向到预先设定的可能更快的镜像进行下载。Apt-cacher-ng 本来是服务于 Debian 和 Ubuntu，但是其通用性的设计，同样可以作为 Fedora, CentOS, Cygwin 等软件包代理。核心配置就是 Repomap 指令。
Remap-RepositoryName: MergingURLs ; TargetURLs
其中：RepositoryName 是本地的软件包镜像库（目录）的名称，该名称一旦确定不要变更。例如针对不同的系统软件包镜像，写为：debian, ubuntu, centos, 或 cygwin。
MergingURLs 是用空格分割的 URL 地址或者匹配 URL 的字符串。当请求的软件包地址和这些地址匹配后，就认为是针对 RepositoryName 软件包镜像库的请求。
分号后面的 TargetURLs 也是用空格分割的 URL 地址。TargetURLs 是可选项，如果设置，则对该软件包镜像库的访问重定向由 TargetURLs 指定的地址。Cygwin 的 Remap- 的设置：
Remap-cygwin: file:cygwin_mirrors.list /cygwin ; file:backends_cygwin
其中 file:cygwin_mirrors.list 所指向的文件包含所有 Cygwin 镜像（HTTP协议）地址，每个一行，这样就不至于让 <a
href="http://blog.ossxp.com/2011/04/2472/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/04/2472/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Repo 新增 hack：URL 自动 DotGit 后缀控制等</title><link>http://blog.ossxp.com/2011/04/2464/</link> <comments>http://blog.ossxp.com/2011/04/2464/#comments</comments> <pubDate>Tue, 19 Apr 2011 11:15:35 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Git]]></category> <category><![CDATA[版本控制]]></category> <category><![CDATA[repo]]></category> <category><![CDATA[《Got Git》]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2464</guid> <description><![CDATA[在《Git权威指南》书中提到的 Repo 的 Hack 主要是增加了两条新的子命令，实现脱离 Gerrit 服务器直接向 Git 服务器提交。即：子命令 repo config 用于在清单库（Manifest）设置配置变量。
例如设置 repo.pushurl 配置变量，以便在直接向服务器推送时使用该地址（实际上还要在该地址后面添加版本库名称和 .git 后缀）。
子命令 repo push 用于绕过 Gerrit 服务器，直接向 Git 服务器推送。
该命令要参考清单库的 repo.pushurl 配置变量。最近的使用过程中，又发现有改进的必要，于是做了如下新的开发：
版本库URL自动DotGit后缀控制
发现 FreeMind 在 SourceForge 上的版本库地址不能在地址的后面出现 &#8220;.git&#8221; 后缀后，必须对 Repo 进行改造，否则无法使用 Repo 克隆不带 &#8220;.git&#8221; 后缀的 Git 版本库。
新增的 Hack 见 repo@github//ossxp-com上的 这个提交。改进后的 Repo 会读取清单库中 XML 文件的 remote 元素中的 autodotgit 属性，如果该属性设置为 &#8220;false&#8221; ，则不会在构建 URL 时添加 <a
href="http://blog.ossxp.com/2011/04/2464/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/04/2464/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>用 repo 管理 Freemind 代码补丁</title><link>http://blog.ossxp.com/2011/04/2429/</link> <comments>http://blog.ossxp.com/2011/04/2429/#comments</comments> <pubDate>Fri, 08 Apr 2011 13:21:07 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Git]]></category> <category><![CDATA[FreeMind]]></category> <category><![CDATA[repo]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2429</guid> <description><![CDATA[FreeMind 是我几乎每天都会用到的软件，虽说脑图软件不少，但 FreeMind 的文件是纯文本、可版本控制，所以一直是我的最爱。当然为了能更好的进行版本控制，还需要做些改进，就是我在 SourceForge 上建立的 FreeMind-MMX 项目。
最近发现 FreeMind 的代码库由 CVS 迁移到了 Git，这下访问官方代码库可方便多了。但是转换的并非尽善尽美，参见我新浪微博的评论。
之前把我的改进代码连同 FreeMind 代码一并放在公司的代码库中（用Topgit特性分支），如果迁移到新的 FreeMInd 代码库，再放到 Github 上，不知道又要占用多少宝贵的 Github 托管空间。灵机一动，为什么不用 repo —— 由 Andorid 项目引入的多 Git 版本库管理工具？
使用 repo 之后，我在 Github上Freemind 相关版本库占用甚至不到1M！官方版本库地址： git://freemind.git.sourceforge.net/gitroot/freemind/freemind
注意不能有 &#8220;.git&#8221; 后缀，如果添加后缀则无法克隆。
Github 上 FreeMind-MMX 的 Manifest 库的网址： https://github.com/ossxp-com/freemind-manifest
Github 上 FreeMind-MMX 的 代码补丁： https://github.com/ossxp-com/freemind-hacks自己动手编译改进后的 FreeMind，即 FreeMind-MMX 的方法：使用我改进的 repo，原因见微博上留言。
$ mkdir workspace
$ cd workspace
$ sudo <a
href="http://blog.ossxp.com/2011/04/2429/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/04/2429/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>开微博了</title><link>http://blog.ossxp.com/2011/04/2422/</link> <comments>http://blog.ossxp.com/2011/04/2422/#comments</comments> <pubDate>Fri, 08 Apr 2011 12:41:35 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[新闻]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2422</guid> <description><![CDATA[开微博了，在 http://t.sina.com.cn/gotgit
]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/04/2422/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Topgit 安装</title><link>http://blog.ossxp.com/2011/03/2392/</link> <comments>http://blog.ossxp.com/2011/03/2392/#comments</comments> <pubDate>Thu, 10 Mar 2011 12:23:59 +0000</pubDate> <dc:creator>蒋 鑫</dc:creator> <category><![CDATA[Git]]></category> <category><![CDATA[版本控制]]></category> <category><![CDATA[topgit]]></category> <category><![CDATA[《Got Git》]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2392</guid> <description><![CDATA[Topgit 用 shell 脚本语言开发，可以安装在所有类Unix环境中，例如 Linux、Mac OS X[1] ，以及Windows下的Cygwin、msysGit等。下面的官方网站链接介绍了Topgit的安装和使用方法：http://repo.or.cz/w/topgit.git?a=blob;f=README 。1.    Linux下安装Topgit
安装官方的 Topgit 版本，直接克隆官方的版本库，执行 make 即可：
$ git clone git://repo.or.cz/topgit.git
$ cd topgit
$ make
$ make install
默认会把可执行文件 tg 安装在 $HOME/bin （用户主目录下的 bin 目录）下，如果没有将 ~/bin 加入环境变量 $PATH 中，可能无法执行 tg。
如果具有 root 权限，也可以在编译和安装时向make命令传递prefix环境变量，将 tg 安装在系统目录中。
$ make prefix=/usr
$ sudo make prefix=/usr install
我对 Topgit 做了一些增强和改进，在后面的章节将予以介绍。如果想安装改进的版本，需要预先安装 quilt 补丁管理工具，然后进行如下操作。
$ git clone git://github.com/ossxp-com/topgit.git
$ cd topgit
$ QUILT_PATCHES=debian/patches quilt push <a
href="http://blog.ossxp.com/2011/03/2392/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/03/2392/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (user agent is rejected)
Database Caching using disk

Served from: blog.ossxp.com @ 2012-02-09 17:37:32 -->
