邵珠庆の日记 生命只有一次,你可以用它来做很多伟大的事情–Make the world a little better and easier


1612月/130

Git常用命令列表

发布在 邵珠庆

修改git-log的日期格式

git config log.date iso

git config --global log.date iso

--date=(relative|local|default|iso|rfc|short|raw) 
Only takes effect for dates shown in human-readable format, such as when using "--pretty". 
log.date config variable sets a default value for log command’s --date option. 
--date=relative shows dates relative to the current time, e.g. "2 hours ago". 
--date=local shows timestamps in user’s local timezone. 
--date=iso (or --date=iso8601) shows timestamps in ISO 8601 format. 
--date=rfc (or --date=rfc2822) shows timestamps in RFC 2822 format, often found in E-mail messages. 
--date=short shows only date but not time, in YYYY-MM-DD format. 
--date=raw shows the date in the internal raw git format %s %z format. 
--date=default shows timestamps in the original timezone (either committer’s or author’s).

 

列出修改过的文件 : git status
查看文件修改具体信息: git diff (是显示还没有暂存起来的改动)
查看已经暂存起来的文件和上次提交时的快照之间的差异 :git diff –cached/–staged
提交 : git commit  -m “commit message”
跳过使用暂存区域的提交  : git commit -a -m “commit message”
移除文件(从暂存区域移除):git rm xx(连带从工作目录中删除指定的文件)

如果删除之前修改过并且已经放到暂存区域的话:git rm -f xx
把文件从Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中:git rm –cached xx
xx: 一个文件或者是目录,或者是glob模式

移动文件:git mv  from_name  to_name

查看提交历史:git log

显示每一次的提交的差异:git log -p
指定了显示差异的次数: git log -p -x (x为次数,整数)
显示简要的增改行数统计:git log –stat
自定义log格式:git log –pretty=(online,full,fuller,short,format)
[format:"options"]
option list:
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用-date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
加入ASCII 字符串表示的简单图形:git log –pretty=(online,format) –graph
git log的详细选项:
-p 按补丁格式显示每个更新之间的差异。
–stat 显示每次更新的文件修改统计信息。
–shortstat 只显示–stat 中最后的行数修改添加移除统计。
–name-only 仅在提交信息后显示已修改的文件清单。
–name-status 显示新增、修改、删除的文件清单。
–abbrev-commit 仅显示SHA-1 的前几个字符,而非所有的40 个字符。
–relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
–graph 显示ASCII 图形表示的分支合并历史。
–pretty 使用其他格式显示历史提交信息。可用的选项包括oneline,short,full,fuller 和format(后跟指定格式)
按照时间限制输出长度:git log –since=time, 如git log –since=2.weeks 最近两周内的提交,git log –since=“2012-11-26” 具体某一天的提交
更多:git log option
-(n) 仅显示最近的n 条提交
–since, –after 仅显示指定时间之后的提交。
–until, –before 仅显示指定时间之前的提交。
–author 仅显示指定作者相关的提交。
–committer 仅显示指定提交者相关的提交。

修改最后一次提交:git commit –amend(使用当前的暂存区域快照提交)
取消已经暂存的文件:git reset HEAD <file>…
取消对文件的修改:git checkout — file(危险:所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。所以在用这条命令前,请务必确定真的不再需要保留刚才的修改)
列出每个远程库的简短名字:git remote
对应的克隆地址:git remote -v
添加远程仓库:git remote add [shortname] [url]
抓取所有一个远程库有的,但本地仓库没有的信息:git fetch shortname
抓取数据合并到本地:git pull shortname
从远程仓库抓取数据:git fetch [remote-name](到远程仓库中拉取所有你本地仓库中还没有的数据)
推送数据到远程仓库:git push [remote-name] [branch-name]
查看远程仓库信息:git remote show [remote-name]
远程仓库的删除和重命名:git remote rename from_name to_name
移除对应的远端仓库:git remote rm shortname
列显已有的标签:git tag
指定某些 tag匹配:git tag -l ‘version’, 如 git tag -l ‘v 1.* ‘(l:list 不是1,2,3的1)
含附注的标签:git tag -a vx.x -m ‘description’ 如,git tag -a v1.0 -m ‘this is version 1.0′
查看相应标签的版本信息:git show tagName ,如git show v1.0
签署标签:git tag -s vx.x -m ‘description’ 如,git tag -s v1.1 -m ‘this is version 1.1′
轻量级标签:不使用-a -s等tag方式,git tag vx.x
验证标签:git tag -v tagname [v:verify]
后期加注标签:git tag -a vx.x hushnum,如git tag -a v1.3 asdec13 (对应提交对象的校验和)
分享标签:git push shortname tagname
一次推送所有(本地新增的)标签:git push shortname –tags
删除本地tag:git tag -d tag_name
删除远端tag: git push shortname :refs/tags/tag_name

1612月/130

Mysql函数GROUP_CONCAT

发布在 邵珠庆

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

语法:

GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC |DESC] [,col_name ...]] [SEPARATOR str_val])

1.例如:
SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHEREstudent_id=2 GROUP BY student_id; 
+------------+---------+ 
| student_id | courses | 
+------------+---------+ 
| 2          | 3,4,5 |
+------------+---------+ 
这 就不需要用php循环了
$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id");
$result = explode(',', $row['courses']); 

2.当然分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:

SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_coursesWHERE student_id=2 GROUP BY student_id;
+------------+---------+ 
| student_id | courses | 
+------------+---------+ 
| 2          | 3|||4|||5 |
+------------+---------+ 

3.除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排:
SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROMstudent_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+ 
| student_id | courses | 
+------------+---------+ 
| 2 | 5,4,3 |
+------------+---------+ 

4.需要注意的:

a.int字段的连接陷阱

当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来,
否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串,
而是byte[]。

该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。

select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串

附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

b.长度陷阱
用了group_concat后,select里如果使用了limit是不起作用的.
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。