2009年11月6日星期五

解决cPanel的2082 、2083端口被封的办法

之前主机从国内搬到了国外,结果cPanel不能访问,好像是学校封了2082和2083端口。一般这时候只能用代理解决问题,但本来就是破网速再加代理,上网仿佛回到了90年代。其实可以通过改变cPanel的访问端口来解决这一问题。

一般情况下,你可以通过下面三种方式之一登录cPanel:

http://你的主机IP:2082

http://你的域名/cpanel

http://你的域名:2082

它们的效果是一样的,都是访问2082端口,端口被封就没戏了。



如何改变呢?首先添加名为cPanel的A记录到你的域名,IP就是你的主机IP,如下图所示。不同的域名服务提供商可能不同,不过原理是一样的。图中,A记录的IP都是一样的。

这时候,打开cPanel.yourdomain.com就可以访问了!例如cPanel.herbblog.com.cn直接出现下面的登录图:

发生了什么?cPanel的端口作为A记录解析以后再访问,其实访问的端口就变成了浏览网页的80端口了。如果通过上述设置,你依然无法访问 cPanel的话,我猜测可能你设置的yourdomain.com/cpanel和cPanel.youdoamin.com是跳转的关系。这时候,最 好将你的域名DNS改成主机提供商提供的DNS,然后再设置。

2009年11月4日星期三

转贴:修改WM5,WM6注册表优化全集

修改注册表提高系统速度
提高系统显示加速
动态窗口实现动画效果
加大PPC音量
改变标题栏时间显示信息(格式)
去掉初次运行程序时的安全警告
改变屏幕最下面那两个触摸软键的功能
给程序指定GPS端口设置
网络
加快上网速度
改变日期时间显示格式
修改铃声路径
CAB格式安装文件安装了以后避免被系统自动删除的又2个方法
重复安装应用程序时是否提示重新覆盖安装
在桌面“今日”中增加无线网卡(WiFi)设置快捷方式
同步联机时取消边联机边充电充电
开机后是否保持GPRS连接状态
屏蔽设置中“清除内存”等危险选项方法
修改注册表以提高机器运行速度
如何修改830相机快门时间
加快输入法切换速度
cmcc改中国移动
修改注册表延长待机时间
更改IE缓存到卡上

以下内容跟帖回复才能看到
==============================

修改注册表提高系统速度

第1:HKEY_LOCAL_MACHINE/System/StorageManager/FATFS查看值/EnableCache:将原值1改为33。

第2:HKEY_CURRENT_USER/ControlPanel/WIFI/里面的EapolParam1和EapolParam2这两项里面分别有2个双字节值,将其四项全部改为256。

第3:HKEY_LOCAL_MACHINE/Security/WAP查看值/NetworkCount:将双字节值0改为128.

提高系统显示加速

打开:\HKEY_LOCAL_MACHINE\SYSTEM\GDI\GLYPHCACHE底下“limit”的值(正常是61440)改大即可。我改到了92160,效果十分明显。不建议再大了,不过我加大到(120000)以上也没发现问题!!!胆小的改到(76800)也行!原理为加大系统显卡的预读内存,可以极好的优化效果!!!

动态窗口实现动画效果:

打开:\HKEY-LOCAL-MACHINE\SYSTEM\GWE下面的Animate=dword=0(默认为0,是取消动画),改为1实现动画效果。

完美增加运行内存(把storage熔入主内存),让你的系统从此不在为内存不足而担忧!

1、
打开注册表编辑器,找到:HKEY_LOCAL MACHINE\Drivers\BuiltIn\FlshDrv,将下面的键值FolderName由“Storage”改为“Program Files”。

将系统自带的program files任意改一个名字后再重启机器,再删掉这个任意名字的文件夹,就OK了。不过在删掉系统的program files文件夹前记得先把里面的connetion 和windows media player文件夹拷出来然后在复制到新的program files(storage)文件夹下。建议在操作前最好是先硬启一次机器,把系统的program files里面的文件全部都删除干净后,留个干净的文件夹,再进行以上操作,以免由于一些系统碎片文件而影响系统的正常运行!!!(当然,不硬启也行,只需把storage里面的东西全删除了也可以)

2、自动释放系统资源,解决系统资源严重不足

在Windows-Mobile中,每运行一个程序,系统资源就会减少。有的程序会消耗大量的系统资源,即使把程序关闭,在内存中还是有一些没用的DLL脚本程序文件在运行,这样就使得系统的运行速度下降。不过我们可以通过修改注册表键值的方法,使关闭程序后自动清除内存中没用的DLL文件而及时收回消耗的系统资源!打开注册表编辑器,找到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion主键,在下面建立一项键值,命名为:“explorer”,再到“explorer”底下新建一个名为“AlwaysUnloadDll”的字符串值,然后将“AlwaysUnloadDll”的键值写为“1”,退出注册表重启即可。
加大PPC音量
HKEY_CURRENT_USER\ControlPanel\Phone\项下的Vol项值加大,
预设值为6666(HEX),可将将其改成8888(HEX),软启动系统效果就出来了,音量明显增强,而且没有破音现象
其它型号机子系统预设值可能不一样,可根据需要在预设值的基础上增加5%~20%。

找到注册表:HKEY_CURRENT_USER\ControlPanel\SoundCategories

在下面的键值里有“RingPreview”、“Ring”、“InCall”,分别对应的是试听、来电等铃声的设置,
找一下键值:InitVol,把它改为“6",不要改得太大(可能会造成喇叭损坏),
然后HKEY_CURRENT_USER\ControlPanel\Phone\项下的Vol项值加大为8888默认是6666,改好后软启铃声便变大
改变标题栏时间显示信息(格式):
HKEY_LOCAL_MACHINE\Software\Microsoft\Shell
下新建DWORD值,名字为TBOpt,
=0时不显示任何日期时间信息;
=1时仅显示时间;
=2时仅显示日期;
=3时同时显示日期和时间,如截图。

去掉初次运行程序时的安全警告:
HKEY_LOCAL_MACHINE\Security\Policies\Policies\0000101a
= 1时不显示警告信息;
=0时恢复显示。

改变屏幕最下面那两个触摸软键的功能:
左键:
HKEY_CURRENT_USER\Software\Microsoft\Today\Keys\112\Open ="\Windows\Calendar.exe"(功能)
default="日历"(显示文本信息)
右键:
HKEY_CURRENT_USER\Software\Microsoft\Today\Keys\113\Open = "\Windows\“开始”菜单\Programs\Contacts.lnk"
default="联系人"(显示文本信息)

给程序指定GPS端口设置
修改后重启,会在设置/连接里面增加GPS设置选项
增加字键及值:HKEY_LOCAL_MACHINE\ControlPanel\GPS Settings\Group = 2
字键类型:DWORD
删除或改名:HKEY_LOCAL_MACHINE\ControlPanel\GPS Settings\redirect

网络
如果你连接的GPRS网络支持EDGE,那么标题栏栏上会显示“E”代替原来的“G”,此项改动不影响实际连接的GPRS网络类型,只是告诉你所连接的网络是普通的GPRS还是EDEG而已。(EDGE也称2.75G,比普通GPRS更快)同6,HKEY_LOCAL_MACHINE\Drivers\BuiltIn\RIL\EnableDifferGprsEdgeIcon
= 1 为根据实际显示;
=0 为一律显示为“G”

GPRS连接以后,点击标题栏连接图标“G”或“E”出现的提示框中增加“断开”按钮和实际累计连接时间信息,参看截图
HKEY_LOCAL_MACHINE\ControlPanel\Phone\Flags2
= 16增加“断开”按钮和累计连接时间显示(16为16进制值);
=0两者都不显示;
=8为增加“断开”按钮

加快上网速度
HKEY_LOCAL_MACHINE\Comm\TcpIp\Parms处的TcpMaxConnetctRetransmissions键值十进制为10,十六进制为A就可以了

改变日期时间显示格式,
不过这样改了,其它应用软件的短日期格式如Resco explorer显示文件信息时也会跟着改变。
HKEY_LOCAL_MACHINE\nls\overrides\SSDte
=ddd/d
为星期/日期

修改铃声路径
HKEY_CURRENT_USER\ControlPanel\SoundCategories\Ring\Directory = \Storage Card\Mymusic
不赞成改在卡上。尽量放在机子上。

CAB格式安装文件安装了以后避免被系统自动删除的又2个方法:
HKEY_LOCAL_MACHINE\Software\apps\Microsoft Application Installer\nDynamicDelete
= 0 不自动删除;
= 2 默认自动删除

HKEY_CLASSES_ROOT\cabfile\Shell\open\command
=wceload.exe "%1" /nodelete 不自动删除;
=wceload.exe "%1" 默认自动删除

重复安装应用程序时是否提示重新覆盖安装:
HKEY_LOCAL_MACHINE\Software\apps\Microsoft Application Installer\fAskOptions
= 1 提示;
= 0 不提示

在桌面“今日”中增加无线网卡(WiFi)设置快捷方式
就象蓝牙快捷方式一样,仅仅适用于有WiFi的838、830等机子,效果待评估。不过已验证过,Windows下有netui.dll文件
HKEY_LOCAL_MACHINE\Software\Microsoft\Today\Items\"Wireless"
DLL=netui.dll
Order=0
Enabled=1
Type=4
Options=1

同步联机时取消边联机边充电充电
不过虽然这是微软标准的字键,但在T-MDA-II上试验无效,不知其它牌子怎样?
HKEY_LOCAL_MACHINE\Drivers\BuiltIn\usbfndrv\EnableUsbCharging
= 1充电;
= 0不充电

开机后是否保持GPRS连接状态:
HKEY_LOCAL_MACHINE\Comm\ConnMgr\Providers\{7C4B7A38-5FF7-4bc1-80F6-5DA7870BB1AA}\Connections\|connection name|\AlwaysOn
= 1 总是连接;
=0 开机不自动连接

connection name是指手机上具体设定的连接名称,如中国移动CMWAP,根据实际情况不同而不同;而且会把所有连接都显示出来,可以删除不用的连接,等同于在设置面板上设定或删除。

屏蔽设置中“清除内存”等危险选项方法
HKEY_LOCAL_MACHINE\ControlPanel\
这下面的大多是手机设置里面的选项,大多数选项下都有一个字键:Group,当它等于0时,出现在“个人”栏里;等于1时出现在“系统”栏里;等于2时出现在“连接”栏里;大于2时,就哪里都不出现!所以修改它比直接删除对应的CPL文件要好得多--哪天要用把它改过来就行了!所以,要屏蔽“清除内存”,就这样改好了:
HKEY_LOCAL_MACHINE\ControlPanel\Clear Storage\Group
=3

修改注册表以提高机器运行速度:
修改注册表 HKEY_LOCAL_MACHINE\System\StoragManager\FATFS\EnableCache
将原值1改成3,3为推荐数值,理论上越高越快,我修改为6,未发现问题,速度级大提升!

1.一些改善性能的修改(主要是该缓存,根据ROM版本不同,有些键可能在注册表中找不到,新建即可)

HKEY_LOCAL_MACHINE\System\StorageManager\FATFS\CacheSize=8192

HKEY_LOCAL_MACHINE\System\StorageManager\FATFS\EnableCache=1

HKEY_LOCAL_MACHINE\System\StorageManager\Filters\fsreplxfilt\ReplStoreCacheSize=8192
HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\FATFS\Filters\DataCacheSize=8192

HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\FATFS\Flags=40
如何修改830相机快门时间
找到注册表中的HKEY_LOCAL_MACHINE > SOFTWARE > HTC > CAMERA > Captparam,把 Delay Time 由原來的 10 改做 2,重启,完成

加快输入法切换速度

用Resco的注册表工 具导出了输入法部分的注册 表内容,重新导入后问题解 决^^
(导出HKEY_CLASSES_ROOT 》CLSID这一项的注册表,我的机子是D830,有兄弟反映自己机子的注册表没有这一项,请找到你自己机子里输入法部分的注册 表内容,导出再导入,估计效果是一样的)

cmcc改中国移动

HKET_LOCAL_MACHINE\System\State\Phone下字符串值Current Operator Name的值改为"中国移动"

修改注册表延长待机时间

修改如下:

1.[HKEY_LOCAL_MACHINE\Comm\AsyncMac1\Parms]

"DisablePowerManagement"=dword:1

修改为:"DisablePowerManagement"=dword:0

2.[HKEY_LOCAL_MACHINE\Comm\Irsir1\Parms]

"DisablePowerManagement"=dword:1

修改为:"DisablePowerManagement"=dword:0

3.[HKEY_LOCAL_MACHINE\Comm\PPTP1\Parms]

"DisablePowerManagement"=dword:1

修改为:"DisablePowerManagement"=dword:0

4.[HKEY_LOCAL_MACHINE\Comm\L2TP1\Parms]

"DisablePowerManagement"=dword:1

修改为:"DisablePowerManagement"=dword:0

更改IE缓存到卡上
WM5 原设置为:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Cookies"="\Windows\Profiles\guest\Cookies"
"History"="\Windows\Profiles\guest\History"
"Cache"="\Windows\Profiles\guest\Temporary Internet Files"

更改IE缓存到卡上:
"Cookies"="\Storage card\Temp\guest\Cookies"
"History"="\Storage card\Temp\guest\History"
"Cache"="\Storage card\Temp\guest\Temporary Internet Files"

微软WM6注册表修改大全

提示,在没有解锁前,有些注册表的权限是无法修改的,所以,得到官方网站下载一个多普达的解锁软件进行解锁。

另:以上注册表修改方法,都是从网上收集整理的,并非每个选项,都经过本人测试。再次重申,修改注册表是有一定的风险,在未弄懂之前,切勿盲目修改!

一、提高机器运行速度:

修改 注册表 (HKEY_LOCAL_MACHINE\System\StoragManager\FATFS\EnableCache
将原值1改成3,3为推荐数值,理论上越高越快,极限值为6)

二、音量增強/增大 方法
进入 注册表 :
[HKEY_CURRENT_USER\ControlPanel\Phone]"Vol"=65536,   可更改为> 大于 65536
更改为大于65536, 如改为65588,完成,
即可退出 Registry,

PDA的音量已增大增強了.

经测试:65537 --- 68888

三、日历键改为别的程序的热键的办法:
HKEY_CURRENT_USER/software/Microsoft/Today/keys下的112,和113!
112对应左键,113对应右键

四、把滚动条,苗条起来:
进入以下目录
HKEY_LOCAL_MACHINE\System\GWE
这里有几个东东, 默认值一般为0xA (13)的:
cyVScr  (水平滚动条)
cyHScr  (垂直滚动条)
cyThMin (不知道什么东东)

把他们的值都改小点就ok了,试试改到:10,会有何变化

五、软起后有些设置都变会出厂设置,例如屏幕灯..,怎样可以保持我的设置呢?
打开 注册表 HKEY_CURRENT_USER\ControlPanel\BackLight\LockLevel]"LockLevel"=dword:将值由“1”改为“0”,原来为0,则改为1

六、移动开机STK服务:每次开机时或飞行过后,都会出现“尊敬的 神州行 用户,欢迎使用中国移动通讯!”如何不让其开机提示?
修改 注册表 ,HKEY-LOCAL-MACHINE\services\STK\dll,把dll里的改掉,随便什么都行

七、提升IE浏览器速度的方法
进入手机注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsft\Windows\Currentversion\internetsettings下查看值 ->secuvity_runscripts的值为“1”修改为“0”

八、提高系统显示加速
打开:\HKEY_LOCAL_MACHINE\SYSTEM\GDI\GLYPHCACHE底下“limit”的值(正常是61440)改大即可。可以改到92160,效果十分明显,不建议再大了。原理为:加大系统显卡的预读内存,可以极好的优化效果

九、动态窗口实现动画效果
打开:\HKEY-LOCAL-MACHINE\SYSTEM\GWE下面的Animate=dword=0(默认为0,是取消动画),改为1实现动画效果。

十、清除开始菜单中那些最近打开程序的快捷方式
打开注册表HEKY_CURRENT_USER\SOFTWARE\MICROSOFT\SHELL\TASKSWITCH 把里面的串值全部删除,马上重启,即可清除最近快捷方式    不过貌似不能永久不显示哦!

十一、自动释放系统资源,解决系统资源严重不足
在Windows-Mobile中,每运行一个程序,系统资源就会减少。有的程序会消耗大量的系统资源,即使把程序关闭,在内存中还是有一些没用的DLL脚本程序文件在运行,这样就使得系统的运行速度下降。不过我们可以通过修改注册表键值的方法,使关闭程序后自动清除内存中没用的DLL文件而及时收回消耗的系统资源!打开注册表编辑器,找到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion主键,在下面建立一项键值,命名为:“explorer”,再到“explorer”底下新建一个名为“AlwaysUnloadDll”的字符串值,然后将“AlwaysUnloadDll”的键值写为“1”,退出注册表重启即可。

十二、加大PPC音量
HKEY_CURRENT_USER\ControlPanel\Phone\项下的Vol项值加大,
预设值为6666(HEX),可将将其改成8888(HEX),软启动系统效果就出来了,音量明显增强,而且没有破音现象,其它型号机子系统预设值可能不一样,可根据需要在预设值的基础上增加5%~20%。
HKEY_CURRENT_USER\ControlPanel\SoundCategories
在下面的键值里有“RingPreview”、“Ring”、“InCall”,分别对应的是试听、来电等铃声的设置,
找一下键值:InitVol,把它改为“6",不要改得太大(可能会造成喇叭损坏),
然后HKEY_CURRENT_USER\ControlPanel\Phone\项下的Vol项值加大为8888默认是6666,改好后软启铃声便变大

十三、改变标题栏时间显示信息(格式)
HKEY_LOCAL_MACHINE\Software\Microsoft\Shell
下新建DWORD值,名字为TBOpt,
=0时不显示任何日期时间信息;
=1时仅显示时间;
=2时仅显示日期;
=3时同时显示日期和时间

十四、屏蔽“短信已发送”的提示:
修注册表KEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Inbox/SettingsSMSNoSentMsg”的将Dword值从0改为1,软启便可。

十五、去掉初次运行程序时的安全警告:
HKEY_LOCAL_MACHINE\Security\Policies\Policies\0000101a
= 1时不显示警告信息;
=0时恢复显示。

十六、GPRS连接以后,点击标题栏连接图标“G”或“E”出现的提示框中增加“断开”按钮和实际累计连接时间信息
HKEY_LOCAL_MACHINE\ControlPanel\Phone\Flags2
= 16增加“断开”按钮和累计连接时间显示(16为16进制值);
=0两者都不显示;
=8为增加“断开”按钮

十七、加快上网速度
HKEY_LOCAL_MACHINE\Comm\TcpIp\Parms处的TcpMaxConnetctRetransmissions键值十进制为10,十六进制为A就可以了

十八、改变日期时间显示格式
不过这样改了,其它应用软件的短日期格式如Resco explorer显示文件信息时也会跟着改变。
HKEY_LOCAL_MACHINE\nls\overrides\SSDte
=ddd/d
为星期/日期

十九、如何修改相机快门时间
找到注册表中的HKEY_LOCAL_MACHINE > SOFTWARE > HTC > CAMERA > Captparam,把 Delay Time 由原來的 10 改做 2,重启,完成

二十、更改IE缓存到卡上
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
"Cookies"="\Windows\Profiles\guest\Cookies"
"History"="\Windows\Profiles\guest\History"
"Cache"="\Windows\Profiles\guest\Temporary Internet Files"

二十一、修改通话记录的容量
HKEY_CURRENT_USER\ControlPanel\Phone\CallHistoryMAX 在“Value data”下为你想要的值,建议200-500,太大了打开时会有点慢

[技巧] 注册表修改26条必杀技———看招!

1、优化输入法的速度

[注册表:hkey_current_user/controlpanel/accessibility/
修改这两个字串 chartimeout 和 holdtimeout
chartimeout值是英文输入法的待选时间(就是按键后出现所按键的首字母并且下面有横线,这时可以多次按键选择次字母、第三字母的时间);holdtimeout是中文输入时选定汉字需要长按键的时间。
chartimeout通常600就可以了,再快就手忙脚乱了,holdtimeout建议400,甚至可以更低
要改回去缺省值是10000和800。

----------------------------------------

color=Red]2、改变闹钟和提醒的响铃次数

HKEY_CURRENT_USER

Controlpanel-Sounds-clock-SCRIPT:apw3pr(闹钟)

-reminder-SCRIPT:apw3pr(提醒)

-callwaiting-SCRIPT:apw3pr(来电等待)

另:如没有该键值,则新建之,w后的数字为间隔时间秒,可自行决定,r为重复响铃直到按键取消。

----------------------------------------

3、改变开始菜单的前几项的快捷方式的排列顺序和开机时默认的桌面快捷方式。

HKEY_CURRENT_USER-Software-Microsoft-shell-startmenu-order

-startmru-initialorder

以上两个主键的键值是一些.lnk文件,上面的一个就是开始菜单的前几项的快捷方式,要改变他们的排列

顺序只要找到storage\windows\start menu 文件夹里的.lik文件,将你需要*前排列的几项替换该主键的原有

键值就可以了。(其实有一个较简单的方法:在storage\windows\start menu 文件夹里再建几个如程序,通讯

等等的文件夹,把不常用的.lnk文件移动到里面,只剩你要置前的那几个.lnk文件,自然就到第一页了。)

下面一个就是开机时默认的几个桌面快捷方式,修改方法同上

----------------------------------------

4、改变铃声的存储位置。先在sd卡上建个文件夹,这里举例为\Storage Card\ring

HKEY_CURRENT_USER
Controlpanel-Soundcategories-Notification-directory:\Storage Card\ring\(短消息)

-ring-directory:\Storage Card\ring\(电话)

-reminder-directory:\Storage Card\ring\(提醒)

-alarm-directory:\Storage Card\ring\(闹钟)
通常,自定义铃声是放到了/storage/Application Data/sound目录下的,我们当然可以把它放到卡上。注册表解决办法: hkey_current_user/controlpanel/soundcategories/ring 在soundcategories目录下看到铃声分成了好几类.我们要修改的是ring类的设置.修改ring下的directory字串,把原来的默认目录\windows改成\storage card\music。假设数十首歌曲(wmv、wav)都拷在\storage card\music\目录下,现在回到"设置"--"声音",可以看到线路1,2的铃声已经自动,变成了music目录下的第一首歌曲.当然原来鸡叫羊鸣的那些是没有了.不过由于SP的铃声是分类的,这个影响只是线路1,2的响铃.其他闹钟,短信什么的丝毫不受影响.如果真的需要那些老铃声,从\windows目录里拷出来就是了。 而且联系人里面的自定义铃声取的也是注册表里的这个字串,使用很方便。

----------------------------------------

5、加大系统字体的大小

HKEY_CURRENT_USER
Controlpanel-Accessiblity-fontsize:3

一般改到3就好了,太大了一页显示不了几行了。

----------------------------------------

6、修改"全球通
HKEY_CURRENT_USER\Software\Microsoft\home\keys\113
Default = 全球通
Open = \Storage\windows\short_press.lnk

----------------------------------------

7、修改通话记录的容量
打开注册表编辑器,
\HKEY_CURRENT_USER\ControlPanel\Phone修改CallHistoryMAX为你想要的值,建议200-500,太大了打开时会有点慢 。最大值为4294967295(40多亿条),够你用了吧。

----------------------------------------

8、更改彩信默认存放位置
HKEY_LOCAL_MACHINE\SOFTWARE\ArcSoft\ArcSoft MMS UA\Config\Folder 下,点击“查看”会出现下面的几个
CannedTextFile 路径:\Storage\Program Files\ArcSoft\ArcSoft MMS UA\CannedText.txt(常用短语)
UAContentsPath 路径:\Storage\My Documents\UAContents\MMS UA (彩信存放处)
UnknownPath 路径:\Storage\My Documents\UnknownType Files (未知文件存放处)
VideoPath 路径:\Storage\My Documents (视频文件另存为处)
AudioDecPath 路径:\Storage\Windows (音频播放支持)
SoundPath 路径:\Storage\My Documents (音频文件另存为处)
VideoDecPath 路径:\Storage\Windows (视频播放支持)
PicturePath 路径:\Storage\My Documents\My Pictures (图片文件另存为处)

----------------------------------------

9、如何修改china Mobile为其他名字
运行注册表编辑器,在HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\RIL\OPERATORNAMES下建立新的string,value name填中国移动的网络号"46000",value data随便填你要显示的字符,联通的网络号为46001。然后打开、关闭飞行模式,就能在桌面上看到你的网络名称了

----------------------------------------

10、关闭弹出式菜单的声音
HKEY_CURRENT_USER
--> ControlPanel
--> Sounds
--> MenuPopup
--> Sound
把 value data 改为 *none*

----------------------------------------

11、关闭弹出式菜单下级菜单的声音
HKEY_CURRENT_USER
--> ControlPanel
--> Sounds
--> MenuCommand
--> Sound
把 value data 改为 *none*

----------------------------------------

12、注册表修改启动画面方法(图片大小应为176*220)
使用注册表软件  HKEY_LOCAL_MACHINE\Software\Microsoft\Splash Screen
修改或增加以下四项串值(设置自己图片的路径)
MSBitmap CarrierBitmap MSshutdownBitmap CarrierShutdownBitmap
图片的显示顺序就是四项从左到右的顺序,
即开机画面先显示MSBitmap,再显示CarrierBitmap.
关机画面先MSshutdownBitmap再显示CarrierShutdownBitmap.
注:检测外置sd卡在开机后,所以请不要把开机画面放在外置sd卡内.
否则系统会自动调用缺省图片.
还有两个DWORD参数-
CarrierShutdownTimeout MSShutdownTimeout
分别设置关机画面的延迟时间

----------------------------------------

13、更改SmartPhone系统声音
首先打开注册表编辑器,路径为:HKEY_CURRENT_USER/ControlPanel/Sounds下的键值:

CallDrop(电话错误)
CallWaiting(呼叫等待)
Clook(闹铃)
Congestion(占线音)
Disconnect(录音结束)
E-mail(邮件)
IM(即时信息)
Infbeg(网络连接)
Infend(网络挂断)
Dialing(开始录音)
Interrupt(断开连接)
Lowbattery(电量警告)
Menupopup(菜单跳出)
MenuCommand(选项确定)
Netbegin(开始网络连接)
Netend(断开网络连接)
Netint(网络连接受阻碍)
Password(命令通过)
Ring Tone0(线路1铃声)
Ring Tone1(线路2铃声)
SMS(短信)
SystemAsterisk(感叹)
..........Default(系统错误警告)
..........Exdamation(感叹)
..........Hand(惊叹)
..........Question(疑问)
Toolkit(STK服务)
VotceMail(语音信息)
VrecBeg(电话拨出)
VrecEng(通话结束)
Warning(系统提醒)

----------------------------------------

14、更改彩信50KB的限制!
首先进入注册表hkey_local_machine--software--arcsoft--arcsoft mms us--config--ui--sizelimit--按检视把senddefault和sendlimit5里面的数字改为1024000就可以把发送限制改为1m了,因为1M等于1024KB,所以2048000就是2M,依次类推!(其实MMS程序里已经有了)

----------------------------------------

15.让SmartPhone的短信铃声可以用wma打开注册表,找到HKEY_CURRENT_USER/ControlPanel/Sounds/SMS/....打开
“category”,将 “value data“ 的数值从 ”Notification“ 改为 "Ring" ;
然后还要将 “HKEY_CURRENT_USER/ControlPanel/SoundCategories/Notification/” 里的 “SCRIPT”值拷贝到“HKEY_CURRENT_USER/ControlPanel/SoundCategories/Ring/”下即可!!

----------------------------------------

16.短消息存到SD卡上:首先安裝 Registry Editor,因為需要它來更改系統設定值
然後利用讀卡器在你的 SD卡上建立 MAPI 目錄
接著在 \MAPI下建立個次目錄 ATTACHMENTS
執行:
跑 RegEdit 然後在 HKEY_CURRENT_USER -> Software -> Microsoft -> MAPI ->
Values -> AttachPath -> Value Date: \Storage Card\MAPI\ATTACHMENTS
完成之後,在去 DbPath -> Value Date: \Storage Card\cemail.vol
完成之後,再去 PropertyPath -> Value Date: \Storage Card\MAPI
全部都完成之後,記的要重新啟動你的 SmartPhone,這些更動才會生效

----------------------------------------

17.通过修改注册表间接提高535的照片质量
进入regedit
hkey_local_machina~~~controlpanel~~~camproperty~~camera_jpeg_quailty
将“valuedate"改为99就好了!
大于100的话系统会自己更改回来的!

----------------------------------------

18.修改注册表改变始菜单背景图片
打开HKEY-LOCAL-MACHONE-SOFTWARE-Microsoft-shell-Rai-:MSStart-检视-BKBitmapFile(如没有,新建键值 value name (数据名称添写):BKBitmapFile
value data(数据位置)添入你指定任意位置及图片名称,如:\Storage\kaishi.jpg
重启手机 即可

----------------------------------------

19.全屏来电默认图片
打开HKEY-LOCAL-MACHONE-SOFTWARE-Microsoft-shell-Rai-CallAlert-BKBitmapFile-
value data(数据位置)添入你指定任意位置及图片名称,如:\Storage\Call.jpg
如没有同上,新建键值重启手机 即可
HKEY-LOCAL-MACHONE-SOFTWARE-Microsoft-shell-Rai该目录下还有另外一些常用图片

HKEY-LOCAL-MACHONE-SOFTWARE-Microsoft-shell-Rai-:ErrorBox(错误提示)
HKEY-LOCAL-MACHONE-SOFTWARE-Microsoft-shell-Rai-:VolDlg(音量调整)
HKEY-LOCAL-MACHONE-SOFTWARE-Microsoft-shell-Rai-:MSCCNTACTS(联系人)
均可用此法修改
gif图片也可以显示,不过不能实现动画效果

----------------------------------------

20.彩信的存放位置更改
先进入注册表,找到彩信的目录,进 HKEY_LOCAL_MACHINE\SOFTWARE\ArcSoft\ArcSoft MMS UA\Config\Folder 下,点击“查看”会出现下面的几个:
CannedTextFile 路径:\Storage\Program Files\ArcSoft\ArcSoft MMS UA\CannedText.txt(常用短语)
UAContentsPath 路径:\Storage\My Documents\UAContents\MMS UA (彩信存放处)
UnknownPath 路径:\Storage\My Documents\UnknownType Files (未知文件存放处)
VideoPath 路径:\Storage\My Documents (视频文件另存为处)
AudioDecPath 路径:\Storage\Windows (音频播放支持)
SoundPath 路径:\Storage\My Documents (音频文件另存为处)
VideoDecPath 路径:\Storage\Windows (视频播放支持)
PicturePath 路径:\Storage\My Documents\My Pictures (图片文件另存为处)
Cur_VideoPath,Cur_SoundPath,Cur_PicturePath (这三个是打开视频,音频,图片的默认目录,如果没有用过彩信功能,它们不会出现,可以不用管)
操作方法:
将 UAContentsPath 的路径改到卡上的一个目录,先自行在卡上建立一个目录,比如 \Storage Card\My Documents\MMS ,这个就是彩信文件的存放点。
将 UnknownPath,VideoPath,SoundPath,PicturePath 也改到卡上。
如果想把常用短语也该到卡上,修改 CannedTextFile 的路径,不过这个很小,个人觉得没必要改。
注意:AudioDecPath 和 VideoDecPath 两个的路径不要改,否则录音和播放会出问题,\Storage\Windows 下有支持彩信播放和录制的文件。
这的路径,供大家参考:
CannedTextFile \Storage\Program Files\ArcSoft\ArcSoft MMS UA\CannedText.txt
UAContentsPath \Storage Card\My Documents\MMS
UnknownPath \Storage Card\My Documents\MMS\UnknownType Files
VideoPath \Storage Card\My Documents\My Videos
AudioDecPath \Storage\Windows
SoundPath \Storage Card\My Documents\My Sounds
VideoDecPath \Storage\Windows
PicturePath \Storage Card\My Documents\My Pictures
存放路径转移到卡上后,速度会相对慢一点,不影响使用,需要注意的是,刚开机时系统启动繁忙,不要急于打开彩信功能,否则有时会看不到收到的彩信。测试一段时间没有发现什么问题。

----------------------------------------
21.修改Moto MPx220 SP 藍牙手機名方法
先進入手機註冊表
HKEY_LOCAL_MACHINE\Ident > 在右邊改 NAME 機碼的內容便行

----------------------------------------

22.Moto Mpx220快捷键更改方法
Mpx220有四个快捷键,分别是:语音拨号、照相机、浏览器和录音,今天刚刚研究出来前三个的更改方法,可以更改成自己想用的程序。

在注册表的HKEY_LOCAL_MACHINE\Drivers\BuiltIn\KeyBd下有三个键值,分别是:

HomeKeyAppName: IE浏览器;默认值:\Windows\wapmonternet.exe

CameraCommandLine: 照相;默认值:\Windows\camera.exe

VSCommandLine: 语音拨号;默认值:\Windows\VoiceSignalLauncher.exe

注意:不能指向快捷方式,必须直接指向应用程序。

----------------------------------------
23.MPX220的开机和关机声音实在太响,夜晚关机时尤甚!

HEKY_CURRENT_USER/CONTROLPANEL/SOUND/POWERONWAVE下便是开机声音的几个键值

HEKY_CURRENT_USER/CONTROLPANEL/SOUND/SHUTDOWN下便是关机声音的几个键值

更改Sound的值,便可以选择开机关机声音,将ON的值从1改为0,便可关闭开机关机声音。

自己琢磨出来的。。。

----------------------------------------

24.屏蔽自带输入法顺畅用掌上狂拼
进入HKEY_LOCAL_MACHINE/T9 Input Method/IME,将里面的0400、0500、0600键值后面的t9****.dl后统一加一个“1”,系统便不会自动关联并启动T9输入法了;再将掌上狂拼的快捷方式加入Startup里面,使之开机自动运行,因为不会与系统原有输入法冲突,系统自然超级稳定了!
----------------------------------------

25.DIY MPX220开关机声音 全攻略

先下载自己喜欢的开关机声音的MP3 ,然后开始自己DIY我们的开关机声音

MPx220开关机的声音文件默认位置是固化在windows下的MOTO_PowerDown.wav(关机)、

MOTO_StartUp.wav(开机),开始想删除它,用其它声音文件替换,可惜没这个本事,只好另想它法。后

来想到了修改注册表,具体操作如下:
1、在外插的存储卡(midi SD卡)上建一个子目录(如:sounds),也可以用原来已有的子目录。
2、将windows_XP_启动.wav、windows_XP_关机.wav这两个文件拷入sounds(或其它目录也行)。
3、运行注册表软件,找到:HKEY_CURRENT_USER-ControlPanel-Sounds-PowerOnWave,里面有个

“sounds”,默认是“MOTO_PowerDown.wav”,把它修改为你放windows_XP_关机.wav的地方,如:

\storage card\sounds\windows_XP_关机.wav。再找到:HKEY_CURRENT_USER-ControlPanel-Sounds-Shutdown,
同样把里面的sounds指向改为\storage card\sounds\windows_XP_启动.wav。
即:
开机:HKEY_CURRENT_USER-ControlPanel-Sounds-PowerOnWave:sounds
修改字串sounds为:\storage card\sounds\windows_XP_启动.wav
关机:HKEY_CURRENT_USER-ControlPanel-Sounds-Shutdown:sounds
修改字串sounds为:\storage card\sounds\windows_XP_关机.wav

关手机,听听是不是你改了以后的关机声音。

-----------------------------------------------

26.mpx220外屏显示音量调整方法
注册表H_C_U下的controlpanel下的externallcd下的fliplogo键,将值改成0,就OK啦

记得重启哦!

DIY你的windows mobile 6{wm6注册表修改大全}

DIY你的windows mobile 6{wm6注册表修改大全}
以下文字摘自《移动MOBILE》2007年11月刊,由于没有现成的所以只好自己输入了。不管好与不好,还希望大家支持一下......由于C730属于wm6 standard,因此有的项目不适用.

修改注册表时推荐使用mircrosoft activesync将手机与电脑进行同步,然后在电脑上利用windows ce registry editor修改手机的注册表信息,其中“my wce device”项下的内容即为注册表信息,当然你也可以使用resco explorer等工具直接在手机上修改注册表信息。
注意:1.部分水货手机在解锁前可能无法修改,可尝试使用SDA ApplicationUnlock对手机进行解锁。下载地址:http://soft.tompda.com/c/softs/20051010/s_3423.asp (这个东西我在论坛里看到过的,大家可以自己找找看)
2.修改注册表有一定风险,问题严重时要硬启动才能恢复,因此大家在修改前请将联系人短信等重要数据作好备份。

1.提高系统运行速度
进入注册表HKEY_LOCAL_MACHINE\System\StorageManager\FATFS目录,找到"EnableCache",将原值有1改为3(3为推荐值,理论上数值越高系统运行速度越快,极限值为6),重启手机生效.

2.软启动后屏幕背光设置不在复位
进入注册表HEKY_CURRENT_USER\ControlPanel\BackLight\LockLevel目录,修改"LockLevel"项目数值由1改为0(如果原来为0则改为1).

3.增大音量(仅适用部分机型)
进入注册表HEKY_CURRENT_USER\ControlPanel\Phone目录,找到"vol"(如无该值则新建一个字符串值),双击该项目将原值65536加大,例如65588(最大值为68888),重新启动后生效.
进入注册表HEKY_CURRENT_USER\ControlPanel\SoundCategories目录,修改该目录下"Ring", "InCall","RingPreview"目录中"InitVol"项目值为6,可以增大来电铃声音量.注意不要将数值改的过大,否则会对扬声器造成伤害.

4.将滚动条变苗条
进入注册表HEKY_LOCAL_MACHINE\System\GWE目录,修改"cyVScr"(水平滚动条), "cyHScr"(垂直滚动条)的数值即可调整滚动条粗细.默认值一般为13,改为8即可.(嘿嘿...C730默认值为6,不用修改,当然你也可以加粗啦!)

5.提高系统显示加速
进入注册表HEKY_LOCAL_MACHINE\System\GDI\GLYPHCACHE目录,将 "limit"项目值(正常值为61440)改大即可,例如改为92160,效果会非常明显,但建议不要超过这一数值.原理为:加大系统显卡的预读内存, 可以极好的优化显示效果.

6.关闭STK服务
每次开机或关闭飞行模式后都会出现"尊敬的神州行用户,欢迎使用中国移动通信"或"我的地盘,听我的"等信息,可以通过以下方法将STK服务关闭.进入注册表HEKY_LOCAL_MACHINE\services\STK目录,将dll项目中的数值改掉,随便改什么都行.如果没有找到则进入HEKY_LOCAL_MACHINE\services\Trusted目录,将SIMToolkit项目值 "simtkit.dll"改为任意名字即可

7.提升IE浏览器速度
进入注册表HEKY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings目录,将"Security_RunScripts"项目值由1改为0.

8.动态窗口实现动画效果
进入注册表HEKY_LOCAL_MACHINE\System\GWE目录,将"Animate"项目值改为1(默认值为0,指取消动画,改为1则实现动画效果).

9.清除开始菜单中最近打开程序列表
进入注册表HEKY_CURRENT_USER\Software\Microsoft\Shell\TaskSwitch目录,将里面的串值全部删除,重新启动就可以清楚最近打开的程序列表.(不知道对C730有什么变化......)

10.自动释放系统资源,解决系统资源不足问题
在WM操作系统中每运行一个程序,系统资源就会相应减少,某些程序甚至会消耗大量的系统资源,即使关闭程序,内存中依然会有一些DLL脚本程序在运行,从而降低系统运行速度.对此我们可以通过修改注册表的方式使程序关闭后自动清楚内存中的无用DLL文件
进入注册表HEKY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion目录,新建一项键值,命名为"explorer",然后在之下新建一个名为"AlwaysUnloadDLL"的字符串值,将其值写为1,退出重新启动即可.若某些机型中已经存在"explorer",则直接修改即可.
(注:本论坛中有一贴名为"上百个C730能用的主题",大家在那里下时注意,最好下那些不需要插件的主题,因为那些个插件超非程序内存的......)

11.改变标题栏日期,时间显示状况
进入注册表HEKY_LOCAL_MACHINE\Software\Microsoft\Shell目录,新建"DWORD值",名称为"TBOpt",该值为0时不显示任何信息,为1时仅显示时间信息,为2时显示日期信息,为3时显示日期和时间信息.

12.改变日期时间显示格式
进入HEKY_LOCAL_MACHINE\nls\overrides目录,找到"SSDte"项目,将其值改为"ddd/d",此时显示格式为星期/日期.

13.屏蔽短信已发送提示
进入注册表HEKY_LOCAL_MACHINE\Software\Microsoft\Inbox目录,找到"SettingsSMSNoSentMsg"项目(如无该值则新建一个二进制值),将其值由0改为1,重新启动即可生效.

14.去掉初次运行程序时的安全警告
进入注册表HEKY_LOCAL_MACHINE\Security\Policies\Policies目录,将0000101a项目中的值改为1即可(为0时显示警告).

15.在标题栏GPRS/EDGE连接提示框中增加"断开"按扭和累计连接时间
进入注册表HEKY_LOCAL_MACHINE\ControlPanel\Phone目录,找到Flags2项目,(如无则新建一个字符串值),将其值改为所需要数值(数值为16时增加"断开"和累计时间显示,为0时二者都不显示,为8时只增加断开按扭).

16.提高上网速度
进入注册表HEKY_LOCAL_MACHINE\Comm\tcpip\Parms目录,将TcpMaxConnectRetransmissions的键值改为10即可.

17.修改相机快门时间(仅适用于部分机型)
进入注册表HEKY_LOCAL_MACHINE\Software\HTC\CAMERA\Captparam目录,将Delay Time项目的值由原来的10改为2,重启生效.

18.更改IE缓存到储存卡
进入注册表HEKY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders目录,将以下三个项目路径改到储存卡上,即"\Storage Card\Temp".
"Cokies"="\Windows\Profiles\guest\Cookies"
"History"="\windows\Profiles\guest\History"
"Cache"="\Windows\Profiles\guest\Temporary Internet Files"

19.修改通话记录的时间
进入注册表HEKY_CURRENT_USER\ControlPanel\Phone目录,将CallHistoryMax的值改大些,建议值为200-500(数值过大打开通话记录速度会变慢).重启后生效.

Git一分钟教程

流程:取代码 → 每次工作前更新代码到最新版本 → 修改代码 → 提交代码到服务器
取代码及修改全局设置


设置用户名与邮箱1
2 git config --global user.name "My Name"
git config --global user.email "[email protected]"


从已有的git库中提取代码1 git clone [email protected]:app.git myrepo


每次更改代码的操作


更新本地代码到最新版本(需要merge才能合到本地代码中)1 git fetch


合并更新后的代码到本地1 git merge


更新代码方式的另一种方法(git pull是git fetch和git merge命令的一个组合)1 git pull


修改代码后,查看已修改的内容1 git diff --cached


将新增加文件加入到git中1 git add file1 file2 file3


从git中删除文件1
2 git rm file1
git rm -r dir1


提交修改1 git commit -m 'this is memo'


如果想省掉提交之前的 git add 命令,可以直接用1 git commit -a -m 'this is memo'


commit和commit -a的区别, commit -a相当于:
第一步:自动地add所有改动的代码,使得所有的开发代码都列于index file中
第二步:自动地删除那些在index file中但不在工作树中的文件
第三步:执行commit命令来提交


提交所有修改到远程服务器,这样,其它团队成员才能更新到这些修改1 git push


其它常用命令


显示commit日志1 git log


不仅显示commit日志,而且同时显示每次commit的代码改变。1 git log -p


回滚代码:1 git revert HEAD


你也可以revert更早的commit,例如:1 git revert HEAD^


将branchname分支合并到当前分支中。(如果合并发生冲突,需要自己解决冲突)1 git merge branchname


解决冲突


当merge命令自身无法解决冲突的时候,它会将工作树置于一种特殊的状态,并且给用户提供冲突信息,以期用户可以自己解决这些问题。当然在这个时候,未发生冲突的代码已经被git merge登记在了index file里了。如果你这个时候使用git diff,显示出来的只是发生冲突的代码信息。


在你解决了冲突之前,发生冲突的文件会一直在index file中被标记出来。这个时候,如果你使用git commit提交的话,git会提示:filename.txt needs merge


在发生冲突的时候,如果你使用git status命令,那么会显示出发生冲突的具体信息。


在你解决了冲突之后,你可以使用如下步骤来提交:


第一步(如果需要增加文件):1 git add file1


第二步:1 git commit

Simple git setup for new git users

I recently set out to learn more about git, the new content manager for source code. "New", as in much younger than Subversion, and a hell of a lot younger than CVS!


No one I know personally uses git yet, but I see the Ruby on Rails community starting to use it a bit, so I decided I had better get up to speed.


Being the sole developer on my own Ruby on Rail projects, I don't really need the full powers of git. I just needed a simple setup, somewhere I could commit code over SSH. The initial steps for such a setup were not exactly simple to learn as a first-time git user. Hints were scattered across many different websites. So I'm documenting everything I've learned here in a blog entry, in case other git n00bs like myself might find it useful.


First make a new git repo on your remote host:
mkdir -p /git/foo
cd /git/foo
git init


git should return something like:
Initialized empty Git repository in .git/


Your /git/foo path will likely be different than mine, but it doesn't really matter where you put stuff. I already had an /svn directory with all my Subversion repos in there, so it made sense (to me) to add a /git directory and put all my new git repos in there.


If you're used to using Subversion you might think you can now "check out" this empty git repo, but you'd be wrong. You don't check out code from a git repo, you "clone" it instead. But trying to clone your new git repo right now leads to the (initially confusing) error:
fatal: no matching remote head


The error occurs because your new git repo has no tree, no files, etc.


Instead of trying to clone your new remote git repo, make another git repo on your local machine, some place where you'll be doing your actual code development later:
mkdir ~/foo
cd ~/foo
git init


git should again dazzle and impress you with the non-error message:
Initialized empty Git repository in .git/


Next add some files to the local repo you just created (still in same foo directory):
cp -r /path/to/your/project/* .


Your local git repo doesn't know about your new project files yet. You need to "add" them (still in the same directory):
git add *


Now that git knows about them you can commit them:
git commit -m 'initial commit'


The -m is your commit message. If you leave that off you'll be prompted to add a commit message, just like with Subversion.


At this point your project files do not yet exist in your remote git repo that you created at the very beginning. They have only been committed to your local git repo. To transfer them you'll need to do a "push", like this:
git push ssh://example.com/git/foo master


Again, your specific path may vary depending on where you created your remote git repo. If you're like me, you probably run your ssh server on an alternate port other than the standard port 22. In addition, your local username might be different than the one you use on the remote server. Your push syntax might be something more exotic, like this perhaps:
git push ssh://[email protected]:8022/git/foo master


"master" tells git to push the code into the main branch of your remote git repo. If you were pushing to another branch you'd use that instead.


If all went well you'll get a message something like:
* [new branch] master -> master


If you didn't get a similar message, check your push URL for accuracy.


Next you have some options for how to tell your local repo where it's origin/master is. I found the documented options workable, but I also found it's just a hell of a lot easier to clone the remote repo, it now has content after all!


So I tossed out my local git repo and cloned it anew:
cd ~
rm -rf foo
git clone ssh://example.com/git/foo


If you want your local repo directory to be named something else, add a directory name on the end like this:
git clone ssh://example.com/git/foo bar


I found my normal workflow is a lot like Subversion, just with the added step of pushing out to the remote repo after the local commit. There are commit hooks to make that automatic if you like.

2009年11月2日星期一

初用 git

拜讀 Tsung 的 Git Server 大作,也試著自己建立 git server。

不過設定途中發生一些問題,順便記錄下來。

在第一次 git clone ssh://project_ip/git/project.git 時候,一直發生 fatal: no matching remote head 錯誤訊息,根據 G 大師開示,解決方法是:

在第一次專案建立時,Client 端的指令:
mkdir test
cd test
git init
touch .git/git-daemon-export-ok
git remote add origin ssh://project_ip/git/project.git
touch index.html
git add index.html
git commit -m "init"
git push origin master

讓 project 內有檔案,而其他電腦的 client 部份,直接 git clone 就沒有問題。

準備把手上程式上到 git 了。

Debian Linux 架設使用 SSH 存取 的 Git Server

Git 是分散式的版本控制系統, 但是在此 分散式管理 之後再談, 先把 集中管理的部份 完成(試著把 SVN 做的事情取代掉).

Git 相關介紹
官方網站 Git – Fast Version Control System
Git Wikipedia (英文)
Git Wikipedia (中文)

Git 集中管理有 git://, http[s]://, ssh://, rsync:// 等方式, 在此就先從 ssh:// 開始.
Git 安裝
apt-get install git-core # in Debian / Ubuntu Linux
前置作業

因為此篇是使用 SSH, 所以下述開始前, 需要先將 SSH key 產生好, 並於 Server / Client 放置完成. 可參考:
產生 ssh keygen 免輸入密碼
SSH 免密碼登入
Guides: Providing your SSH Key
相關資料準備
Server: example.com
Linux 帳號的群組: www-data (確認 /etc/group 的 www-data 有你的帳號, ex: www-data:your_account)
Project name: project_name
Git Repository: /var/cache/git
建立 Git Repository
mkdir -p /var/cache/git/project_name.git
cd /var/cache/git/project_name.git
git –bare init
chown root:www-data -R .
chmod g+rwx -R .
由 Git Repository 取得資料
git clone ssh://example.com/var/cache/git/project_name.git
cd project_name
touch index.html
git add index.html
git commit -m ‘init’
git push origin master # local 預設 clone 是 master, push 到 origin(remote server)

Counting objects: 3, done.
Writing objects: 100% (3/3), 210 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://example.com/var/cache/git/project_name.git
* [new branch] master -> master
touch test.html
git add test.html
git commit -m ‘add test.html’
git push # 第二次後, 只需要 push 即可, 不需加 origin master.
測試
mkdir /tmp/a /tmp/b
cd /tmp/a
git clone ssh://example.com/var/cache/git/project_name.git
cd /tmp/b
git clone ssh://example.com/var/cache/git/project_name.git
echo “hello” > hello.html # 於 b 新增一個檔案, 下述新增並 push
git add hello.html
git commit -m ‘add hello.html’ # local commit.
git push # 推到 Server 上.
cd /tmp/a # 於 a pull 拉下來後, 應該會看到 hello.html
git pull # 會看到 hello.html

[译文] git 简要教程 (适用于 1.5.1 或更新版本)2

阅读本教程之前,你应该已经阅读过《GIT简要教程》(译注:本人曾经翻译过)了。

本教程将介绍GIT架构中的两个基础概念——对象数据库和索引文件——并为读者提供阅读其他GIT文档所需的基础知识。
GIT对象数据库

让我们从一个新项目开始,并加入少量的变更历史:
$ mkdir test-project$ cd test-project$ git initInitialized empty Git repository in .git/$ echo 'hello world' > file.txt$ git add .$ git commit -a -m "initial commit"Created initial commit 54196cc2703dc165cbd373a65a4dcf22d50ae7f7 create mode 100644 file.txt$ echo 'hello world!' >file.txt$ git commit -a -m "add emphasis"Created commit c4d59f390b9cfd4318117afde11d601c1085f241

git 响应 commit 时给出的 40 位 16 进制数是什么?

在教程的第一部分里我们就看到,commit 都有类似的 40 位 16 进制的名字。 git的版本历史中,每个对象都被使用这样一个字,它是对象内容的 SHA1 哈希结果;对于变更和其他各种东西来说,这样的名字保证了 git 永远不会把同样的东西保存两次 (因为同样的内容会产生同样的 SHA1 结果),并且,一个 git 对象的内容的永远都不会改变 (因为内容改变了名字也就肯定会跟着变了)。

当然,如果你重复上面的例子的话,将会得到不一样的 SHA1 哈希结果,因为创建 commit 的时间和人都不一样。

我们可以用 cat-file 命令来向 git 查询这个对象。不要用上面那 40 位数字,应该用你自己的 commit 名字来做这个操作。事实上,你可以用开头几位数字,而不一定要敲全整个 40 位:
$ git-cat-file -t 54196cc2commit$ git-cat-file commit 54196cc2tree 92b8b694ffb1675e5975148e1121810081dbdffeauthor J. Bruce Fields <[email protected]> 1143414668 -0500committer J. Bruce Fields <[email protected]> 1143414668 -0500

initial commit

一个 tree 可以对应一个或多个 blob 对象,每个都对应于一个文件。此外,一个 tree 还可以对应于多个 tree 对象,从而可以创建一个目录树。可以通过 ls-tree 命令来查看树中的内容 (注意,一个足够长的 tree 名字的开始部分就足矣了):
$ git ls-tree 92b8b694100644 blob 3b18e512dba79e4c8300dd08aeb37f8e728b8dad file.txt

这样,我们看到这个 tree 里面有一个文件。文件对应的 SHA1 哈希值是该文件内容的索引:
$ git cat-file -t 3b18e512blob

blob 对应着文件数据,我们可以用 cat-file 来看其中的内容:
$ git cat-file blob 3b18e512hello world

注意,这是那个老文件的内容;即 initial tree 这个 commit 对象里所对应的 tree 是当时记录下来的目录的状态。

所有的对象都在 git 目录之中,以其 SHA1 名称存放:
$ find .git/objects/.git/objects/.git/objects/pack.git/objects/info.git/objects/3b.git/objects/3b/18e512dba79e4c8300dd08aeb37f8e728b8dad.git/objects/92.git/objects/92/b8b694ffb1675e5975148e1121810081dbdffe.git/objects/54.git/objects/54/196cc2703dc165cbd373a65a4dcf22d50ae7f7.git/objects/a0.git/objects/a0/423896973644771497bdc03eb99d5281615b51.git/objects/d0.git/objects/d0/492b368b66bdabf2ac1fd8c92b39d3db916e59.git/objects/c4.git/objects/c4/d59f390b9cfd4318117afde11d601c1085f241

并且,这些文件的内容只是压缩数据和用来标识它们的类型和长度的头部。可能的类型包括 blob, tree, commit 和 tag。

最容易被找到的 commit 是 HEAD commit,可以通过 .git/HEAD 找到:
$ cat .git/HEADref: refs/heads/master

可以看到,这个命令给出了我们的当前分支,并且给出了 .git 目录下的一个文件名,该文件中包含着指向对应的 commit 对象的 SHA1 名字,这样我们就可以通过 cat-file 命令来查看这个 commit:
$ cat .git/refs/heads/masterc4d59f390b9cfd4318117afde11d601c1085f241$ git cat-file -t c4d59f39commit$ git cat-file commit c4d59f39tree d0492b368b66bdabf2ac1fd8c92b39d3db916e59parent 54196cc2703dc165cbd373a65a4dcf22d50ae7f7author J. Bruce Fields <[email protected]> 1143418702 -0500committer J. Bruce Fields <[email protected]> 1143418702 -0500

add emphasis

这里的 tree 对象对应着新的 tree 的状态:
$ git ls-tree d0492b36100644 blob a0423896973644771497bdc03eb99d5281615b51 file.txt$ git cat-file blob a0423896hello world!

而 parent 对象对应着上一个 commit:
$ git-cat-file commit 54196cc2tree 92b8b694ffb1675e5975148e1121810081dbdffeauthor J. Bruce Fields <[email protected]> 1143414668 -0500committer J. Bruce Fields <[email protected]> 1143414668 -0500

initial commit

这里,tree 对象就是我们开始时看过的那个,这个 commit 比较特殊,没有 parent。

大部分的 commit 都有且仅有一个 parent,不过一个 commit 有几个 parent 的情况也不少见。当一个 commit 表示一次合并的时候,parent 将指向被合并的各个分支的头部。

介绍了 blob, tree 和 commit,惟一还没有介绍的对象类型就是 tag 了,这个我们就不在这里介绍了,可以参考它的手册页 git-tag(1)

现在,我们总结一下 git 的版本历史中如何使用对象数据库:

commit 对象会指向一个 tree 对象,即当时的目录树的镜像,还会指向 parent commit,以表征项目的版本历史。

tree 对象代表一个目录的一个状态,将目录名与包含文件内容的 blob 对象和包含子目录信息的 tree 对象联系在一起。

blob 对象包含文件内容,没有其他结构。

每个分支的头部的 commit 对象的引用位于 .git/ref/heads/ 目录。

当前分支的名字存储在 .git/HEAD 文件之中。

顺便提一句,很多命令都用一个 tree 作为参数。不过上面已经看到,tree 可以有多种指代方式——tree 的 SHA1 名称、指向该 tree 的 commit 名称,当该 tree 恰好是某分支头部时,该分支的名称,等等——大部分这样的命令都接受这些名字作为参数。

在命令格式描述中,tree-ish 有时被用于表示这样的参数。
索引文件

上文中用于提交 commit 的主要方法是 "git commit -a",这条命令将所有我们的工作拷贝中改动过的文件做成一个 commit。不过,如果我们只想提交部分文件怎么办?部分文件中的部分改动呢?

如果看看幕后 commit 是怎么产生的,那我们将可以得到生成 commit 的更灵活的方法。

继续我们的测试项目,现在再次修改 file.txt:
$ echo "hello world, again" >>file.txt

不过这次,我们不立刻 commit,让我们多做一个中间步骤,并查看 diff,看看都发生了什么:
$ git diff--- a/file.txt+++ b/[email protected]@ -1 +1,2 @@ hello world!+hello world, again$ git add file.txt$ git diff

最后一个 diff 是空的,不过还没有进行 commit 呢,head 还没有包含这行新的内容呢:
$ git-diff HEADdiff --git a/file.txt b/file.txtindex a042389..513feba 100644--- a/file.txt+++ b/[email protected]@ -1 +1,2 @@ hello world!+hello world, again

所以,git diff 实际是在和 head 之外的什么东西比较。实际上,这个被比较的东西是索引文件,它以二进制形式存储在 .git/index 之中,其内容可以用 ls-files 查看:
$ git ls-files --stage100644 513feba2e53ebbd2532419ded848ba19de88ba00 0 file.txt$ git cat-file -t 513feba2blob$ git cat-file blob 513feba2hello world!hello world, again

我们的 git add 的实际工作是存储一个新的 blob ,之后将其索引信息放到索引文件中。如果我们再次修改文件,将会在 git-diff 中看到这些变更:
$ echo 'again?' >>file.txt$ git diffindex 513feba..ba3da7b 100644--- a/file.txt+++ b/[email protected]@ -1,2 +1,3 @@ hello world! hello world, again+again?

使用正确的参数,git diff 也可以显示出上次 commit 以来的变更或是索引和最后一次 commit 之间的变更:
$ git diff HEADdiff --git a/file.txt b/file.txtindex a042389..ba3da7b 100644--- a/file.txt+++ b/[email protected]@ -1 +1,3 @@ hello world!+hello world, again+again?$ git diff --cacheddiff --git a/file.txt b/file.txtindex a042389..513feba 100644--- a/file.txt+++ b/[email protected]@ -1 +1,2 @@ hello world!+hello world, again

我们随时都可以使用 (没有 -a 参数的) git commit 创建一个新的 commit,只提交包含在索引文件中的变更,而不包含工作拷贝中的其他变更:
$ git commit -m "repeat"$ git diff HEADdiff --git a/file.txt b/file.txtindex 513feba..ba3da7b 100644--- a/file.txt+++ b/[email protected]@ -1,2 +1,3 @@ hello world! hello world, again+again?

缺省地,git commit 使用索引文件创建 commit,而不是工作拷贝;-a 参数的提交是首先使用工作拷贝中的全部变更更新索引,然后提交 commit。

最后,有必要看看 git add 对索引文件的效果:
$ echo "goodbye, world" >closing.txt$ git add closing.txt

The effect of the "git add" was to add one entry to the index file:
$ git ls-files --stage100644 8b9743b20d4b15be3955fc8d5cd2b09cd2336138 0 closing.txt100644 513feba2e53ebbd2532419ded848ba19de88ba00 0 file.txt

并且,由于能够通过 cat-file 查看,新的一项指向了当前的文件内容:
$ git cat-file blob 8b9743b2goodbye, world

status 命令是一个很有用的快速查看状态的方法:
$ git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## new file: closing.txt## Changed but not updated:# (use "git add <file>..." to update what will be committed)## modified: file.txt#

由于 closing.txt 已经被缓存在索引文件中了,所以被列为将要提交的改动。而 file.txt 已经改动了但没被包含在索引中,它被标记为改动了但没有更新的。这时使用 git commit 将创建一个 commit 来添加 closing.txt (使用它的新内容),但不会修改 file.txt 。

此外,请记住 git diff 可以显示 file.txt 的变化,但不会显示 closing.txt 的变更,因为当前的 closing.txt 和索引文件中的是完全一致的。

除了作为新 commit 的中间环节,索引文件还在 check out 一个新分支的时候从对象数据库中取出,也用于合并操作时保存相关的分支。这里请参考相关手册页和核心教程
下面是?

现在,你已经了解了阅读 git 所有手册页所需的全部知识;一个不错的起点是学习每日 git中的命令。不知道的名词应该可以从词汇表中找到.

Git 手册包含了 git 的更全面介绍。

CVS 迁移 文档解释了如何将一个 CVS 仓库加入到 git 中,以及如何以 CVS 的方式使用 git。

对于一些有趣的 git 例子,可以看看HOWTO。

对于开发者,核心教程 深度介绍了 git 的底层机制,比如,创建一个新的 commit。

原文最后更新时间: 20-May-2007 09:08:18 UTC

王旭 (gnawux<at>gmail.com) 2008年5月1日 翻译

[译文] git 简要教程 (适用于 1.5.1 或更新版本)1

原文链接:http://www.kernel.org/pub/software/scm/git/docs/tutorial.html

这个教程将介绍如何将一个新的项目导入到 git 之中,如何修改项目并如何将这些变更与其他开发者分享。

如果你更感兴趣如何用 git 取出一个项目,比如,测试软件的最新版本,你可能更应该看看The Git User’s Manual的前两章。

首先,记住你可以用 man 来获取 git 的文档,比如 "git diff" 的文档可以用如下命令察看:
$ man git-diff

在做任何改动之前,最好把自己的名字和 email 地址介绍给大家,最简单的方法就是:
$ git config --global user.name "Your Name Comes Here"$ git config --global user.email [email protected]
导入一个新项目

假设你有一个名为 project.tar.gz 的 tarball 作为项目的初始内容。你可以如下操作来把它至于 git 版本控制之下。
$ tar xzf project.tar.gz$ cd project$ git init

Git 将会如下回复:
Initialized empty Git repository in .git/

现在,你已经初始化了工作目录——你可能已经注意到了名为 ".git" 的一个新目录了。

下一步就是使用 git-add(1) 命令告诉 git 当前目录的所有文件 (注意这个点:.) 全是项目的一个快照:
$ git add .

这个快照目前存放在一个临时区域之中,在 git 中称为 "index"(索引)。使用 git-commit(1) 命令,你可以把 index 的所有内容永久性地存放到软件仓库之中:
$ git commit

这条命令会向你提示输入版本变更信息。这样,你的项目的第一个版本就已经存入 git 之中了。
进行修改

修改一些文件之后,你可以将更新这些内容到 index 之中:
$ git add file1 file2 file3

现在,你已经准备就绪,可以提交了。现在你可以使用 git-diff(1) 命令的 –cache 参数:
$ git diff --cached

(如果不使用 –cached 参数,git-diff(1)会显示所有还没添加进 index 的已经做出的改动。) 你也可以使用 git-status(1)来获得一些当前状况的概要信息:
$ git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: file1# modified: file2# modified: file3#

如果你需要进行更多改动,现在就可以进行,然后可以添加到 index 之中。最后,使用如下命令提交改动:
$ git commit

这将再次要求你输入关于这次改动内容的描述性信息,之后记录下的项目新版本。

此外,如果想省掉提交之前的git add命令,你可以直接用
$ git commit -a

这样会自动检测所有修改过的文件 (不包括新文件) ,并一气呵成地将它们添到 index 之中,并提交。

关于提交的描述信息: 虽然这个信息不是必须的,但提交信息描述最好以一行不超过50个字符的概要性信息来开头,在一个空行之后再进行更多的描述。比如那些将 commit 转化为 email 的工具就会把这个第一行作为邮件标题,其余的提交内容则放在邮件内部。
Git 跟踪内容而不是文件

很多版本控制系统提供了一个 "add" 命令用来记录一个新文件。而 git 的 "add" 命令更加简单也更加强大: git add既用于新文件也用于新近改动的文件,在所有这些情况下,它在 index 中对所有的文件与状态进行一次快照,这样就可以在下一次 commit 命令中进行提交。
Viewing project history

在任何时候,你都可以如下查看所有你进行过的改动
$ git log

你可能还想看到每一步改进中的所有完整的 diff ,这可以使用如下命令
$ git log -p

浏览改动的概要对于获得每一步修改的情况常常是比较有用的,可以使用如下命令
$ git log --stat --summary
管理分支

一个 git 仓库可以包含多个开发分支。使用如下命令可以建立一个称为 "experimental" 的新分支
$ git branch experimental

如果你运行命令
$ git branch

你将可以得到类似下面的已有分支的列表
experimental* master

"experimental" 就是你刚刚建立的那个分支,而 "master" 分支则是建立仓库的时候自动创建的缺省分支,里面的星号表示你当前所在的分支;输入命令
$ git checkout experimental

就可以切换到 experimental 分支。现在修改一个文件,并提交改变,然后重新回到 master 分支:
(edit file)$ git commit -a$ git checkout master

你会发现,刚才的变更已经不可见了,这是因为这个改变是发生于 experimental 分支的,而你现在已经回到 master 分支了。

现在,你可以在 master 分支上做一些不同的变更:
(edit file)$ git commit -a

这里,两个分支已经产生不同了,每个分支上都发生了不同的改动。要把 experimental 中的改变也合并到 master 之中,运行命令
$ git merge experimental

如果两者的改变并不冲突,那么就算是完成了。而如果这里有冲突,有问题的文件左边会显示出标记,以表明这个文件发生了冲突;
$ git diff

上述命令将会列出具体的冲突。一旦你编辑文件解决了冲突,
$ git commit -a

这个命令将把合并的结果提交。最终,
$ gitk

会显示出漂亮的图标以展示历史变革。

这里你可以使用如下命令删除 experimental 分支。
$ git branch -d experimental

这个命令会确定 experimental 中的所有改动已经在当前分支当中了。

如果你在 crazy-idea 分支中进行开发,然后又后悔了,你可以用如下命令删除分支
$ git branch -D crazy-idea

分支操作十分简单而且代价低廉,所以适合于尝试一些东西。
使用 git 进行协作

假设 Alice 在 /home/alice/project 中的 git 仓库启动了一个新项目,而在本机中也拥有 home 目录的 Bob 想要贡献一些代码。

他可以以如下工作开始:
$ git clone /home/alice/project myrepo

这会新建一个名为 "myrepo" 的目录,里面包含了 Alice 的仓库的一份克隆。这份克隆与原始项目完全一致,可以处理自己的一份原始项目历史。

之后,Bob 进行了一些变更并提交了这些变动:
(edit files)$ git commit -a(repeat as necessary)

当他完成的时候,他告诉 Alice 将 /home/bob/myrepo 之中的变动导入到原始仓库之中。她使用如下命令来完成这一工作:
$ cd /home/alice/project$ git pull /home/bob/myrepo master

这会合并 Bob 的 "master" 分支到 Alice 的当前分支。如果 Alice 也已经修改了某些内容,她需要手工修复冲突。(注意,"master" 参数实际上并不是必要的,因为这是缺省分支。)

"pull" 命令包括两个操作: 从远端分支中取出改动,然后合并到当前分支之中。

当你只在一个很小的小组里工作的时候,通常不会频繁地访问同一个仓库。通过定义仓库的快捷方式,可以让访问远程仓库更方便一些:
$ git remote add bob /home/bob/myrepo

这样,Alice 可以如下用 "git fetch" 命令仅取出改动,而不把它们合并到当前分支之中:
$ git fetch bob

和长格式不同,当 Alice 使用 git remote设置的快捷方式从 Bob 的仓库中获取内容的时候,取出的内容存储在一个 remote tracking 分支之中,在本例中是 bob/master。所以,如下操作:
$ git log -p master..bob/master

将会列出从 Bob 从 Alice 的主分支中分支出去以后的所有改动。

检查了这些变动之后,Alice 可以将这些变动合并到自己的 master 分支中:
$ git merge bob/master

这个合并也可以通过从自己的 remote tracking 分支中 pull 来做到,如:
$ git pull . remotes/bob/master

注意,git pull 总是合并进当前的分支,不论命令行给出的是什么。

之后,Bob 可以如下使用 Alice 的最近改动更新自己的仓库
$ git pull

这里,他不需要给出 Alice 的仓库的位置;当 Bob 克隆了 Alice 的仓库的时候,git 在仓库设置中保存了她的仓库的位置,即 pull 所使用的位置:
$ git config --get remote.origin.url/home/alice/project

(git-clone 创建的完整配置信息可以用 "git config -l" 获得,git-config(1)的 man page 解释了所有选项的含义。)

Git 也在 "origin/master" 分支保存了一份 Alice 的主分支的原始拷贝:
$ git branch -r origin/master

如果其后 Bob 决定转到另一台主机上工作,他还可以通过 ssh 来克隆原始仓库:
$ git clone alice.org:/home/alice/project myrepo

此外,git 本身也有远程协议,并且可以使用 rsync 或 http,详细情况可以查看 git-pull(1)的 man page。

Git 也可以使用类似 CVS 的工作方式,使用一个中心仓库,所有用户将改动推送到仓库之中,相关内容可以查阅 git-push(1)的手册页或git for CVS users。
浏览历史

Git 的历史是通过一系列相互关联的 commit 构成的。我们已经通过 git log 命令看到了这些提交的列表。注意,每个 git log 条目的第一行是那次提交的名称:
$ git logcommit c82a22c39cbc32576f64f5c6b3f24b99ea8149c7Author: Junio C Hamano <[email protected]>Date: Tue May 16 17:18:22 2006 -0700

merge-base: Clarify the comments on post processing.

把这个名称用于 git show 命令,可以得到提交的详情。
$ git show c82a22c39cbc32576f64f5c6b3f24b99ea8149c7

不过还有其他办法来指代这次提交。你可以只使用名称的开始部分,只要它足够长,保证在所有提交中是惟一的就行了:
$ git show c82a22c39c # the first few characters of the name are # usually enough$ git show HEAD # the tip of the current branch$ git show experimental # the tip of the "experimental" branch

每一次提交通常都有一次提交作为 "parent" ,它是项目的前一个状态:
$ git show HEAD^ # to see the parent of HEAD$ git show HEAD^^ # to see the grandparent of HEAD$ git show HEAD~4 # to see the great-great grandparent of HEAD

要注意,合并提交可能会有多个 "parent":
$ git show HEAD^1 # show the first parent of HEAD (same as HEAD^)$ git show HEAD^2 # show the second parent of HEAD

你还可以给你的提交一个名字; 命令
$ git-tag v2.5 1b2e1d63ff

让你可以使用 "v2.5" 来指代 1b2e1d63ff。如果你想把这个名字与他人共享 (比如标记一个发布版本),你应该建立一个 "tag" 对象,可能还需要签署它; 详情请查看 git-tag(1)的 man page。

任何 git 命令都可以使用上述任何一种名字。比如:
$ git diff v2.5 HEAD # compare the current HEAD to v2.5$ git branch stable v2.5 # start a new branch named "stable" based # at v2.5$ git reset --hard HEAD^ # reset your current branch and working # directory to its state at HEAD^

小心使用上述最后一个命令: 这将丢失工作目录中的所有改动,他还会清除本分支内随后的所有提交。如果这个分支是包含这些提交的惟一分支,它们将永远地丢失了。此外,不要对一个公众可见的、有其他开发者从中 pull 内容的分支使用 "git reset" 命令,这将导致一些不必要的合并来清除其他开发者的历史信息。如果你需要取消已经推送的改动,可以使用git-revert(1)命令。

git grep 可以在项目的所有版本历史中寻找字符串,如下命令
$ git grep "hello" v2.5

会在版本 v2.5 中寻找所有 "hello" 的踪迹。

如果你不提供 commit 名称,git grep 会在你当前的目录中搜索所有由 git 管理的文件。于是,如下命令
$ git grep "hello"

是搜索 git 跟踪的所有文件的便捷的方式。

很多 git 命令可以处理一组提交,可以通过多种方式来指定版本。这里是一些 git log 的例子:
$ git log v2.5..v2.6 # commits between v2.5 and v2.6$ git log v2.5.. # commits since v2.5$ git log --since="2 weeks ago" # commits from the last 2 weeks$ git log v2.5.. Makefile # commits since v2.5 which modify # Makefile

你给出的范围的上下边界不一定是严格的时间先后关系,比如,"stable-release" 分支可能会在 "master" 分支之后相当长一段时间才会引入同一个提交内容,这样
$ git log stable..experimental

将会列出 expermental 分支之中已经有的,而 stable 分支却还没有的提交,而命令
$ git log experimental..stable

将会列出 stable 中已有、但 experimental 却没有的提交。

"git log" 命令有一个弱点:必须将所有提交在一个列表中呈现出来。当项目历史中有多个不同开发分支并最终合并到一起时,"git log" 中呈现出来的顺序可能没什么意义。

大部分有大量开发者的项目 (比如 linux kernel 或 git 本身) 都经常合并分支,gitk 可以更好地将这些合并变化展示出来。比如,
$ gitk --since="2 weeks ago" drivers/

这个命令允许你浏览过去两个星期中在 "drivers" 目录之中的任意提交。(注意: 你可以按住 ctrl 键然后用 "-" 和 "+" 来调整 gitk 的字体大小。)

最后,大部分命令可以带有文件名,这可以用于指定某次提交中的某个文件,从而指定某个文件的某个版本:
$ git diff v2.5:Makefile HEAD:Makefile.in

你还可以用 "git show" 命令去查看任意文件的任意版本:
$ git show v2.5:Makefile
下一步学习

这个教程应该足够你的项目进行基本的项目发布版本管理。不过,要完全深入地理解 git 的强大功能可能还需要理解两个简单的概念:

对象数据库是个相当阳春的系统,用于存储你的项目的历史,包括文件、目录以及各次提交。

索引文件是目录树的状态的缓存,用于建立提交、取出工作目录并保存一次合并中包含的不同的目录树。

本教程的第二部分解释了对象数据库、索引文件以及一些其他你在使用 git 中所需要了解的零七八碎的概念。

如果你不想在这条路上继续下去,还有一些细枝末节的东西可能十分有趣:

git-format-patch(1), git-am(1): 用于将一系列 git 提交转化成 email 发送的补丁或反之,对于 linux 内核这样的高度依赖于邮件发送的补丁的项目来说十分有用。

git-bisect(1): 当你的项目发生问题 (功能或性能上的退步) 的时候,一个跟踪发现错误的方法就是通过历史发现那个罪魁祸首的提交。Git bisect 可以帮助你进行二分查找发现那个提交。它能在一个有很多分支合并的具有复杂非线性历史的项目中十分灵巧地进行接近最优的搜索。

Everyday GIT with 20 Commands Or So

git for CVS users.

原文最后更新 25-Aug-2007 03:53:15 UTC

译文初稿:2007年7月,王旭 (gnawux<at>gmail.com)

译文最后更新:2008年5月2日,王旭 (gnawux<at>gmail.com)

GIT日常命令20来条

[基本仓库]: 拥有 GIT 仓库的人需要的命令——也就是所有人,因为 git 的每个工作拷贝都是一个仓库。

之后,[个人开发者 (独立工作)]: 任何需要进行 commit 的人都需要的命令,即使是一个人工作的情况。

如果你和其他人一起工作,你还需要列在[个人开发者 (参与者)]小节的命令。

扮演[集成者]角色的人还需要学习这一节中的命令。

[仓库管理]命令是给哪些负责维护 GIT 仓库的系统管理员的。
基本仓库

所有人都可以用这些命令来维护 git 仓库。

git-init(1) 或 git-clone(1) : 创建一个新仓库。

git-fsck(1) : 检查仓库的错误。

git-gc(1) 进行日常维护工作,如 repack 或 prune。
实例:

检查健康状况并去除无用的内容 (译注:cruft 不知如此翻译是否妥当,git-gc 基本是这个含义)。
$ git fsck (1)
$ git count-objects (2)
$ git gc (3)

不加–full参数的情况下,这个命令一般会以非常低廉的代价确保仓库在一个不错的健康状态之中。

统计有多少松散的对象,没有 repack 的对象消耗了多少硬盘空间。

在本地仓库进行 repack,并进行其他日常维护工作。

将一个小项目 repack 进入一个单独的 pack。
$ git gc (1)

将所有可以从 refs 访问到的对象都打包添加进一个 pack,然后删除其他 pack。
个人开发者 (独立工作)

独立工作的个人开发者不需要和其他人交换补丁,在单一的仓库中独自工作,通常会用到这些命令。

git-show-branch(1): 查看当前的分支位置。

git-log(1):查看发生了些什么。

git-checkout(1) 和 git-branch(1):在分支间切换。

git-add(1):管理索引文件。

git-diff(1)和git-status(1):查看正在改动些什么。

git-commit(1):向前推进当前分支。

git-reset(1) 和 (带有路径参数的)git-checkout(1):撤销变更。

git-merge(1):合并两个本地分支。

git-rebase(1):维护局部分支。(译注:git rebase 的工作大致是这样:原来在本地基于上游版本v,进行了一些改进,现在上游版本进化到了v+n,这时,在本地将基础首先进化到 v+n,然后把对 v 提交的、但还没进入 v+n 的 commit 加入到 v+n,其中可能会有冲突,这可能需要进行一些冲突处理,这里的这个在上游版本基础上添加内容而成的分支称为 topic 分支,这里翻译为局部分支。)

git-tag(1):标记标签。
实例:

以一个 tarball 来作为新仓库的起点。
$ tar zxf frotz.tar.gz$ cd frotz$ git-init$ git add . (1)
$ git commit -m "import of frotz source tree."
$ git tag v2.43 (2)

将当前目录的所有内容加入仓库。

添加一个轻量级的,没有注释的标签。

简历一个局部分支并进行开发。
$ git checkout -b alsa-audio (1)
$ edit/compile/test
$ git checkout -- curses/ux_audio_oss.c (2)
$ git add curses/ux_audio_alsa.c (3)
$ edit/compile/test
$ git diff HEAD (4)
$ git commit -a -s (5)
$ edit/compile/test
$ git reset --soft HEAD^ (6)
$ edit/compile/test
$ git diff ORIG_HEAD (7)
$ git commit -a -c ORIG_HEAD (8)
$ git checkout master (9)
$ git merge alsa-audio (10)
$ git log --since='3 days ago' (11)
$ git log v2.43.. curses/ (12)

创建一个新的局部分支。

取消对curses/ux_audio_oss.c的修改。

如果添加了文件的话,需要告诉 git;而删除或修改文件的话,一会的 git commit -a 就可以处理了。

查看将会提交哪些变更。

签署并提交所有你测试过的内容。

回到上一个 commit,但保存工作拷贝中的内容。

查看自从上一个我们取回的不成熟提交以来的所有变更。

重新进行上一步中没有完成的提交,使用你自己写的提交信息。

切换到 master 分支。

将局部分支合并入你的主分支。

检查提交日志;其他的可以一起用上的输出选择方式包括–max-count=10 (最多显示10个commit), –until=2005-12-10 等等。

只查看curses/ 目录中,v2.43标签以来的变更。
个人开发者 (参与者)

在一个小组中参与协同工作的开发者需要学会下面一些命令,以和他人沟通,同时也需要独立的开发者们会用到的命令。

git-clone(1):从上游来复制出本地仓库。

git-pull(1) 和 git-fetch(1):同上游保持同步更新。

git-push(1):共享仓库,这是是用 CVS 风格的情况下共享仓库的方法。

git-format-patch(1):准备邮件形式提交补丁,如果采用 Linux 内核风格的工作方法。
实例:

克隆上游源,并在此基础上工作。最后,将变更送回到上游。
$ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6$ cd my2.6$ edit/compile/test; git commit -a -s (1)
$ git format-patch origin (2)
$ git pull (3)
$ git log -p ORIG_HEAD.. arch/i386 include/asm-i386 (4)
$ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL (5)
$ git reset --hard ORIG_HEAD (6)
$ git gc (7)
$ git fetch --tags (8)

若干次类似操作。

从本地分支输出 email 形式的补丁用于提交。

git pull从origin取出更新并合并如当前分支。

取出之后,查看上次取出后上游产生的变更,只观察我们感兴趣的部分。

从某仓库的某分支取出变更并合并。

回退上一次取出的内容。

用垃圾回收去掉上次回退造成的残余物。

时常从origin取出标签信息,并放到.git/refs/tags/目录下。

推送入另一个仓库。
satellite$ git clone mothership:frotz frotz (1)
satellite$ cd frotz
satellite$ git config --get-regexp '^(remote|branch)\.' (2)
remote.origin.url mothership:frotz
remote.origin.fetch refs/heads/*:refs/remotes/origin/*
branch.master.remote origin
branch.master.merge refs/heads/master
satellite$ git config remote.origin.push \
master:refs/remotes/satellite/master (3)
satellite$ edit/compile/test/commit
satellite$ git push origin (4)

mothership$ cd frotz
mothership$ git checkout master
mothership$ git merge satellite/master (5)

mothership 主机上的你的归属目录中有一个 frotz 仓库,从那里克隆仓库到 satellite 主机上来。

克隆缺省会设置这些配置变量。这样,git pull 命令就会从 mothership 取出内容,并放到到本地的remotes/origin/*目录下的跟踪分支来。

设置git push命令将本地的master分支推送到 mothership 主机的 remotes/satellite/master分支去。

push 将会把我们的工作存储到 mothership 主机的 remotes/satellite/master 跟踪分支上。你可以把这作为是一种备份手段。

在 mothership 主机上,合并 satellite 主机上来的工作到 master 分支。

从某个标签开始分支。
$ git checkout -b private2.6.14 v2.6.14 (1)
$ edit/compile/test; git commit -a
$ git checkout master
$ git format-patch -k -m --stdout v2.6.14..private2.6.14 |
git am -3 -k (2)

基于一个众所周知的(但在什么东西后面的)标签创建一个私有分支。

不适用正式的 "merge",将 private2.6.14 分支上的改动移植到 master 分支上来。
集成者

项目中的中心人物会扮演一个集成者的角色,收集他人提供的变更,查看并集成在一起,对外发布结果。与一般参与者相比,集成者还需要用到这样一些命令。

git-am(1):应用来自各个开发者的 email 形式的补丁。

git-pull(1):合并来自你信任的副手的变更。

git-format-patch(1):准备并发送替换建议给贡献者们。

git-revert(1):撤销修补。

git-push(1):发布新的版本。
实例:

我的典型 GIT 一天。
$ git status (1)
$ git show-branch (2)
$ mailx (3)
& s 2 3 4 5 ./+to-apply
& s 7 8 ./+hold-linus
& q
$ git checkout -b topic/one master
$ git am -3 -i -s -u ./+to-apply (4)
$ compile/test
$ git checkout -b hold/linus && git am -3 -i -s -u ./+hold-linus (5)
$ git checkout topic/one && git rebase master (6)
$ git checkout pu && git reset --hard next (7)
$ git merge topic/one topic/two && git merge hold/linus (8)
$ git checkout maint
$ git cherry-pick master~4 (9)
$ compile/test
$ git tag -s -m "GIT 0.99.9x" v0.99.9x (10)
$ git fetch ko && git show-branch master maint 'tags/ko-*' (11)
$ git push ko (12)
$ git push ko v0.99.9x (13)

查看有什么正在做、没提交的东西。

查看有哪些局部分支,思考他们是否成熟了。

阅读邮件,保存那些可以用的,也保存那些还不是很成熟的。

交互式打补丁,使用自己的签名。

如果需要,建立局部分支,并用自己的签名打补丁。

将内部的还没有并入 master 也没有成为稳定分支的一部分的局部分支用 rebase 移植到 master 上。

reset pu,让它总是从 next 开始。

将仍在工作中的分支们合并在一起。

对先前的版本进行问题修正。

建立一个有签名的标签。

确信我没有偶然将 master 退回到已经发布出去的版本的后面了。ko 是我在 kernel.org 的仓库的简写,看起来类似这样:
$ cat .git/remotes/koURL: kernel.org:/pub/scm/git/git.gitPull: master:refs/tags/ko-masterPull: next:refs/tags/ko-nextPull: maint:refs/tags/ko-maintPush: masterPush: nextPush: +puPush: maint

在 git show-branch 的输出中, master 应该包含 ko-master 的所有内容, 而 next 应该包含ko-next 的所有内容。

推送出最新版本。

把标签也推送出去。
仓库管理

仓库管理员会使用如下工具来设置和维护开发者们对仓库的访问方法。

git-daemon(1):允许匿名下载仓库。

git-shell(1) 可以被用于restricted login shell 来将中心仓库共享给用户。

update hook howto 有一个不错的关于管理一个共享的中心仓库的例子。
实例:

我们假设如下内容位于 /etc/services 文件之内:
$ grep 9418 /etc/servicesgit 9418/tcp # Git Version Control System

用 git-daemon 通过 inetd 提供 /pub/scm 服务。
$ grep git /etc/inetd.confgit stream tcp nowait nobody \ /usr/bin/git-daemon git-daemon --inetd --export-all /pub/scm

实际配置文件中应该是一行。

用 git-daemon 通过 xinetd 提供 /pub/scm 服务。
$ cat /etc/xinetd.d/git-daemon# default: off# description: The git server offers access to git repositoriesservice git{ disable = no type = UNLISTED port = 9418 socket_type = stream wait = no user = nobody server = /usr/bin/git-daemon server_args = --inetd --export-all --base-path=/pub/scm log_on_failure += USERID}

设置时请参考你的 xinetd(8) 文档,上述设置适用于 Fedora 系统。其他系统可能有所不同。

仅提供 push/pull 权限给开发者。
$ grep git /etc/passwd (1)
alice:x:1000:1000::/home/alice:/usr/bin/git-shell
bob:x:1001:1001::/home/bob:/usr/bin/git-shell
cindy:x:1002:1002::/home/cindy:/usr/bin/git-shell
david:x:1003:1003::/home/david:/usr/bin/git-shell
$ grep git /etc/shells (2)
/usr/bin/git-shell

将 login shell 设置为 /usr/bin/git-shell, 这样,只有git push 和 git pull 操作才被允许。用户如果要访问计算机,需要通 ssh 访问权限。

in many distributions /etc/shells needs to list what is used as the login shell. 很多发布版中,只有 /etc/shells 列出的程序才能作为 login shell.

CVS 风格的共享仓库。
$ grep git /etc/group (1)
git:x:9418:alice,bob,cindy,david
$ cd /home/devo.git
$ ls -l (2)
lrwxrwxrwx 1 david git 17 Dec 4 22:40 HEAD -> refs/heads/master
drwxrwsr-x 2 david git 4096 Dec 4 22:40 branches
-rw-rw-r-- 1 david git 84 Dec 4 22:40 config
-rw-rw-r-- 1 david git 58 Dec 4 22:40 description
drwxrwsr-x 2 david git 4096 Dec 4 22:40 hooks
-rw-rw-r-- 1 david git 37504 Dec 4 22:40 index
drwxrwsr-x 2 david git 4096 Dec 4 22:40 info
drwxrwsr-x 4 david git 4096 Dec 4 22:40 objects
drwxrwsr-x 4 david git 4096 Nov 7 14:58 refs
drwxrwsr-x 2 david git 4096 Dec 4 22:40 remotes
$ ls -l hooks/update (3)
-r-xr-xr-x 1 david git 3536 Dec 4 22:40 update
$ cat info/allowed-users (4)
refs/heads/master alice\|cindy
refs/heads/doc-update bob
refs/tags/v[0-9]* david

将开发者们都放入 git 组。

并让整个共享仓库对组可写。

使用 Carl 写的 Documentation/howto 中的 update-hook 例子用于分支策略控制。

alice 和 cindy 可以向 master 中 push 内容,只有 bob 可以向 doc-update 中 push 内容。david 是对外发布管理员,是惟一可以创建并 push 版本标签的人。

支持哑协议传输的 HTTP Server.
dev$ git update-server-info (1)
dev$ ftp [email protected] (2)
ftp> cp -r .git /home/user/myproject.git

确认 info/refs 和 objects/info/packs 的内容是更新过的。

上传到你的 ISP 提供的公共 HTTP 服务器。

原文最新更新: 23-Apr-2008 16:08:38 UTC

翻译时间:2008年5月3日,王旭 (gnawux<at>gmail.com)

git add原来还有交互模式!

只怪自己书读的不够多,Git这么有用的功能都不知道。

之前碰到大批要加入新的文件时,要么“git add .”,要么就用手动的方式。原来还有“git add -i”,如图所示:

git会列出所有untracked的文件,然后你可以用各种形式加入。

比如1,则会加入编号为1的文件。

3-5,则只加3~5号文件。

foo,则是匹配该前缀的文件。

*,就是所有文件啰。

真是太方便了,git是全能的!