<?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>群英汇博客</title> <atom:link href="http://blog.ossxp.com/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>搭建本地YUM软件仓库</title><link>http://blog.ossxp.com/2011/04/2420/</link> <comments>http://blog.ossxp.com/2011/04/2420/#comments</comments> <pubDate>Tue, 12 Apr 2011 08:46:01 +0000</pubDate> <dc:creator>崔贵林</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[yum]]></category> <category><![CDATA[软件源]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2420</guid> <description><![CDATA[通过前面RPM打包的学习，我们了解了如何制作RPM软件包，然后就可以HLL地通过rpm命令安装了，但是，一个很严肃的问题是，rpm不支持解决安装依赖，如果你的软件包安装时需要依赖神马神马包的话，RPM会这样告诉你：
$ rpm -ivh ~/rpmbuild/RPMS/i386/hello-0.2-1.i386.rpm
error: Failed dependencies:
world is needed by hello-0.2-1.i386
看，rpm说，我需要整个世界，这个包木有安装，这个包你有木有？有木有？
如果很幸运，你这里刚好有一个world包，赶紧安装：
$ rpm -ivh ~/rpmbuild/RPMS/i386/world-0.1-1.i386.rpm
error: Failed dependencies:
freedom is needed by world-0.1-1.i386
看来这个世界缺少自由呀，不行，还得寻找自由。。。怎么这么麻烦？有没有更好的解决方法？
你可能想到yum了。对，yum就是为解决依赖而生的，如果说redhat的rpm就像debian里的dpkg的话，那么yum就像aptitude了。
通过yum安装yum软件仓库里的软件包，它会自动解决软件安装依赖，一条命令就全部解决。
但，如果俺们的软件包并未在yum软件仓库里咋办呢？那么，咱家就自己搭建一个yum仓库吧~
在搭建yum软件仓库之前，先了解一下yum源的配置吧。YUM源探秘
centos中yum的主配置文件在/etc/yum.conf中，粘贴如下：
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h# Default.
# installonly_limit = 3# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
这又是一个INI文件。第一行的cachedir定义了缓存的目录，最后一行说的就是可以把自己的软件仓库放在这个文件里或者以repo为后缀名放在/etc/yum.repos.d目录下。
为了方便起见，最好将配置文件存放在yum.repos.d目录下，而不是修改这个文件。
在软件源列表目录/etc/yum.repo.d/下，其中有一个是必须且唯一的，就是Base源文件。源文件是ini格式的。大致结构如下： ::
[server-id]
name=
mirrorlist=
baseurl=
gpgcheck= 0,不检查，1,检查
enabled= 0,禁用，1,启用server-id，指代软件库服务器id，在生成缓存时会生成对应的目录。如果是我们自己写的配置文件，这个地方可以任意，但注意看CentOS-Base.repo文件，这个是yum软件仓库的主要配置文件，有base,updates,addons,extras,centosplus,contrib这几个章节，这是不能随意修改的，这就是传说中的Base文件。
mirrorlist和baseurl两者使用一个即可，一般大型的官网，比如centos，fedora-epel会使用mirrorlist形式的，通过传递参数，自动选择最快的源，而对于咱们自己搭建的源来说，使用baseurl即可。
上面会使用几个变量：$releasever  发行版版本，如5.5
$arch   <a
href="http://blog.ossxp.com/2011/04/2420/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/04/2420/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>给RPM软件包签名</title><link>http://blog.ossxp.com/2011/04/2442/</link> <comments>http://blog.ossxp.com/2011/04/2442/#comments</comments> <pubDate>Tue, 12 Apr 2011 08:17:14 +0000</pubDate> <dc:creator>崔贵林</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[安全]]></category> <category><![CDATA[rpm]]></category> <category><![CDATA[签名]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2442</guid> <description><![CDATA[我们自己制作的软件包，为了防止被篡改，一般要使用私钥进行签名，然后将公钥广而告之，下载使用软件包的话，可以通过公钥进行验证签名，从而确保文件的原始性。生成密钥对
首先我们要使用gpp来生成公私钥对。目前最先进的加密算法是RSA，所以我们使用RSA来生成密钥对：
$ gpg --gen-key
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.gpg: 已创建目录‘/home/admin/.gnupg’
gpg: 新的配置文件‘/home/admin/.gnupg/gpg.conf’已建立
gpg: 警告：在‘/home/admin/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/admin/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/admin/.gnupg/pubring.gpg’已建立
请选择您要使用的密钥种类：
(1) DSA 和 ElGamal (默认)
(2) DSA (仅用于签名)
<a
href="http://blog.ossxp.com/2011/04/2442/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/04/2442/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Linux下的通用打开命令</title><link>http://blog.ossxp.com/2011/04/2437/</link> <comments>http://blog.ossxp.com/2011/04/2437/#comments</comments> <pubDate>Tue, 12 Apr 2011 02:30:06 +0000</pubDate> <dc:creator>崔贵林</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[mac]]></category> <category><![CDATA[open]]></category> <category><![CDATA[通用打开]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=2437</guid> <description><![CDATA[在Mac下的终端里可以输入open来打开任意类型的文件，linux下是否也有类似的命令呢？
经查，发现有三个命令可以实现类似效果：seesee通过查找在mailcap文件中设定的文件类型和应用程序映射来打开文件。系统配置文件在/etc/mailcap，用户可以自定义配置文件到~/.mailcap。
通过see调用GUI程序以后要等待程序结束才可以继续输入命令。xdg-openxdg-open使用的配置文件不详。调用程序后终端仍可继续输入命令而不必等待程序结束。gnome-opengnome-open使用GNOME文件管理来打开文件。一般和Nautilus中设定的文件关联一致。测试
我的系统为Ubuntu 11.04。
打开pdf文件，see调用了Okular打开，而xdg-open和gnome-open调用了evince。
打开jpeg文件，see调用了feh，而xdg-open和gnome-open调用了eye of gnome。
打开html文件，三者都调用了x-www-browser，这里是google-chrome。
打开utf-8编码的txt(后缀为txt)，see调用了less，xdg-open和gnome-open调用了gedit。
打开utf-8编码的txt(无后缀)，see不识别：Warning: unknown mime-type for "test_utf-8" -- using "application/octet-stream"
Error: no "view" mailcap rules found for type "application/octet-stream"而xdg-open和gnome-open处乱不惊，gedit依旧。
打开cp936编码的txt，see误以为二进制文件，强制打开后失败，退出码1：$ see test_gbk.txt
"/tmp/file1tdJGh" may be a binary file.  See it anyway?
Warning: program returned non-zero exit code #1xdg-open和gnome-open表现的很淡定，继续gedit之。总结
see的配置文件mailcap超级复杂，要自定义恐怕要费不少时间，而xdg-open/gnome-open由于和Nautilus保持一致，这样就很和谐，很方便。并且xdg-open/gnome-open在输入命令后不必等待程序结束就可以继续输入，比see要实用。
参考自：http://zh-cn.w3support.net/index.php?db=so&#38;id=264395]]></description> <wfw:commentRss>http://blog.ossxp.com/2011/04/2437/feed/</wfw:commentRss> <slash:comments>0</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-05-19 20:47:18 -->
