git切换分支保存修改的代码的方法

最近在一个原有的项目上做一次非常大的改版,底层的数据库做了很大的变化,跟现在的版本无法兼容。现在的工作除了开发最新的版本之外还要对原来的版本做例行的维护,修修补补。于是有了在两个分支之间游走切换的问题,最新改版的代码在分支new上,旧版本的代码在分支old上,我在new上开发了一半,忽然有人给了我一个改进的需求,于是我要切换回old去修改代码。在这个场景下,我摸索了三种方法:

及时commit代码

在new分支上把已经开发完成的部分代码commit掉,不push,然后切换到old分支修改代码,做完了commit,所有分支互不影响,这是一个理想的方法。

 

使用git stash

有时候写了一半的JAVA代码,都还不能编译通过的,就被叫去改另一个分支的bug了。

在new分支上的时候在命令行输入:

git stash

或者

git stash save “修改的信息"

这样以后你的代码就回到自己上一个commit了,直接git stash的话git stash的栈会直接给你一个hash值作为版本的说明,如果用git stash save “修改的信息”,git stash的栈会把你填写的“修改的信息”作为版本的说明。

接下来你回到old分支修改代码完成,你又再回到new分支,输入:

git stash pop

或者

git stash list
git stash apply stash@{0}

就可以回到保存的版本了。git stash pop的作用是将git stash栈中最后一个版本取出来,git stash apply stash@{0}的作用是可以指定栈中的一个版本,通过git stash list可以看到所有的版本信息:

stash@{0}: On order-master-bugfix: 22222
stash@{1}: On order-master-bugfix: 22222

然后你可以选择一个你需要的版本执行:

git stash apply stash@{0}

这时候你搁置的代码就回来了。

 

用IDE工具的shelve的功能

有一些IDE工具提供了shelve的功能,shelve的意思是“将…搁在一边”,即把还没写完的代码先搁在一边。我开发都是使用jetbrains公司的IDEA和PhpStorm,它们就提供了shelve的功能,方法:

首先在IDE的底部找到“Changes”,点开会有local的选项卡,选中你要搁置的代码,点击右键,选择“Shelve Changes”,在提交的输入框中输入你的注释,以便回来的时候识别你需要的版本,点击“Shelve Changes”键即可。这时选项卡上会多一个“Shelf”的选项卡,里面就有你搁置的代码。

这时候你可以去old分支修改代码,改完了之后回到new分支,到“Shelf”选项卡下选择你要恢复的代码或者版本,点击右键选择“Unshelve Changes”,你的搁置的代码就回来了。

修改Linux服务器时间测试crontab

最近在公司做的一个应用,有跟时间有关的逻辑,测试人员需要对这个逻辑进行测试,需要修改Linux服务器的时间,开始的时候,我们使用:

[root@web_test www]# date -s '2013-08-26 9:59'

来修改系统的时间,输入date之后也看到了时间确实被改了,于是我们在等待crontab自动执行10点钟的定时脚本,时间到了之后,我们查看脚本的输出日志,日志的时间或者是日志根本不存在,也就是说脚本根本就没有本执行(我们的脚本手动执行是不会有问题的)。为了排查问题,我们把crontab的中的脚本原来定在10点钟跑的改成了每分钟都会跑,结果是它成功执行了,那么这就说明我们的crontab本身是没有问题的,问题就出在系统时间上了!

查阅了相关的资料发现:在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS!这就是为什么我们的脚本不执行的问题的原因了。如果要确保修改生效要执行如下命令:

[root@web_test www]# clock -w

修改了系统时间之后再输入clock -w就可以将系统时间写入CMOS,然后我们的crontab定时脚本就跑起来了!

诶,等一下,那我们改了系统的时间怎么把系统的时间还原成现实中的时间呢?不要看着你的手表手动输入,要那种很准确的时间?

我们要做的就是寻找一个网络时间服务器,比如一些国家授时中心,我查了有这些:

微软公司授时主机(美国)
time.windows.com
台警大授时中心(台湾)
asia.pool.ntp.org
中科院授时中心(西安)
210.72.145.44
网通授时中心(北京)
219.158.14.130

我们只要运行:

[root@web_test www]# ntpdate asia.pool.ntp.org

然后再输入clock -w就手动将系统时间写入CMOS,就OK啦!

用于修改图片大小并保持长宽比的jQuery插件(Tony原创)

        最近站长Tony开发了一个jquery.imgresize.js插件,这是一个用来修改图片大小并保持长宽比的jQuery插件,用于用户发布文章之后查看文章,如果用户的图片超过了我们容器的宽度不至于把样式搞乱,如果没有超过容器的宽度就保持原来的大小,兼容IE6、7、8浏览器。值得注意的是jquery版本要求是1.3到1.8,HTML声明请遵循W3C标准。

使用方法:

$('img').imgresize();
$('img').imgresize({width:600});

支持多张图片同时调整大小,例如选择器的元素有多张图片,让多张图片同时调整成等于或小于width的大小。没有填写width这个参数图片将保持原来的大小。

2013年9月25日优化了原来的代码,提高了插件的兼容性。

demo地址:http://www.tonitech.com/demo/jquery.imgresize.js

jquery.imgresize.js插件的代码如下:

// @charset "utf-8";
/**
 * jquery版本要求:1.3 ~ 1.8,HTML声明请遵循W3C标准
 * 用来修改图片大小并保持长宽比的jQuery插件
 * 兼容IE6浏览器
 * @author wangzhiangtony@qq.com
 * @version 1.2
 * @date 2013-9-25 14:46:49
 */
(function($) {
    $.fn.imgresize = function(opts) {
        var defaults = {
            width : null
        };
        var options = $.extend(defaults, opts);

		if(options.width != null) {
            if($.browser.msie) {
				$('img').each(function(index, element){
                    var src = $(element).attr('src');
                    $(element).load(function() {
                        iresize(this);
                    });
                    $(element).attr('src', src + '?' + new Date().getTime());
				});
            } else {
                $('img').load(function() {
                    iresize(this);
                });
            }
        }

        function iresize(self) {
            var width = $(self).width();
            var height = $(self).height();
            if(width > options.width) {
                height = options.width * height / width;
                $(self).css('width', options.width);
                $(self).css('height', Math.round(height));
            }
        }
    };
})(jQuery);

demo下载地址:

jquery.imgresize.js (542)

js、jQuery修改CSS中expression()的方法

在本博客的博文《在IE6 position不支持fixed属性的解决方案》中使用了CSS的expression来动态改变top的算术值:
/*IE6 动态设置top位置*/
_top: expression(eval(document.documentElement.scrollTop) +  450);
那么一定有人不禁要问,如何动态改变这个top的实际值,也就是修改这个expression的内容呢?方法如下:
var domThis=$(this)[0];
domThis.style.setExpression(
'top', 'eval((document.documentElement).scrollTop + ' +  50 + ')'
);

使用以上方法就可以解决动态修改expression的内容了。

Warning: date() [function.date]: It is not safe to rely on

今天在学习php的时候,用date()函数的时候出现了一个问题,原本是要出现:

Bob’s Auto Parts

Order Results

Order processed. at22:10, 23rd March 2011

Your order is as follows:

tires

bottles of oil

spark plugs

的页面居然显示:

Bob’s Auto Parts

Order Results

Warning: date() [function.date]: It is not safe to rely

on the system’s timezone settings. You are *required* to use the date.timezone

setting or the date_default_timezone_set() function. In case you used any of

those methods and you are still getting this warning, you most likely misspelled

the timezone identifier. We selected ‘UTC’ for ‘8.0/no DST’ instead in

E:\www\processorder.php on line 15

Order processed. at14:09, 23rd March 2011

Your order is as follows:

tires

bottles of oil

spark plugs

发现时间比我们少了8小时,初步判断是默认的格林尼治时间,网上很多论坛都有解决方法,一般都是两种:

1、在页头使用date_default_timezone_set()设置默认时区为北京时间,即

date_default_timezone_set("PRC");

就可以了。

2、在php.ini中设置date.timezone的值为PRC,设置好以后的为:date.timezone=PRC,同时取消这一行代码的注释,即去掉前面的分号就可以了。

我试过第一种方法,是可行了,而第二种方法修改了之后,然后关闭阿帕奇,却依然不行。我想将来如果还是遇到这种情况,我只能使用第一种方法了。

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=405