Git常用操作

git pull 拉远程分支并合并到本地
git fetch 拉远程分支不做合并
忽略文件 .gitignore
添加文件 git add .
提交所有修改 git commit -am ‘备注信息’
推送本地分支到仓库 git push origin master:master
删除远端分支 git push origin :test
从拉远端代码到本地仓库 git pull origin master:master
根据分支创建新分支 git checkout -b dev2 master
切换分支 git checkout dev2
删除本地分支 git branch -d dev2
强制删除本地分支 git branch -D dev2
查看所有分支 git branch -a
查看所有远端分支 git branch -r
删除本地存在远端不存在 git branch -d -r origin/test
拉取远端分支到本地 git fetch origin dev
拉去远端并合并本地 git pull origin dev 可能会有冲突
暂存修改记录 git stash (可以把新增文件add仓库一起暂存)
查看暂存记录 git stash list
删除暂存 git stash drop 暂存编号
清除暂存 git stash clear
弹出暂存 git stash pop
撤销未提交修改 git checkout filename
撤销已提交修改 git reset –hard|–soft 版本
撤销已push修改 git revert -n commitID (解决冲突、提交、push)

git还原操作git reset、git revert和git checkout区别

1、git checkout
使用场景:误删除仓库当中还存在的文件或者撤销未提交的修改
git checkout 1.php

2、git reset
使用常见:已commit或已commit并push
git reset [–hard|soft|mixed|merge|keep] [<commit>或HEAD]:将当前的分支重设(reset)到指定的<commit>或者HEAD(默认,如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。mode的取值可以是hard、soft、mixed、merged、keep。下面来详细说明每种模式的意义和效果。
查看提交历史
git log
commit 3
commit 2
commit 1
执行
git reset –hard HEAD~1
或者git reset –hard HEAD^
再执行git log
commit 2
commit 1
git status没有任何内容
git reset –soft HEAD~1
git status会显示上次提交的文件
如果–hard回滚之后需强制推才可以!!

3、git revert
git rever HEAD^
git rever -n commitId
解决冲突,提交,push

配置phpmyadmin管理多个server

//修改librarise/config.default.php
$cfg['AllowArbitraryServer'] = true; //默认是false,改成true 
最后添加

$hosts = array(
'1'=>array('host'=>'127.0.0.1','user'=>'root','password'=>'123456'),
'2'=>array('host'=>'127.0.0.2','user'=>'root','password'=>'123456')
);
for($i=1;$i<=count($hosts);$i++){
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = $hosts[$i]['host'];
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Servers'][$i]['user'] = $hosts[$i]['user'];
$cfg['Servers'][$i]['password'] =$hosts[$i]['password'];

}

关闭Ubuntu提示欢迎语

Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Fri Sep 23 09:31:54 CST 2016

System load: 0.3 Processes: 254
Usage of /: 2.3% of 114.33GB Users logged in: 1
Memory usage: 4% IP address for eth0: 10.200.10.203
Swap usage: 0%

Graph this data and manage this system at:
https://landscape.canonical.com/

276 packages can be updated.
170 updates are security updates.

New release ‘16.04.1 LTS’ available.
Run ‘do-release-upgrade’ to upgrade to it.

编辑/etc/pam.d/sshd
session optional pam_motd.so motd=/run/motd.dynamic noupdate
session optional pam_motd.so # [1]
屏蔽这两行即可

上拉加载更多

 
  • 第一个
  • 第二个
$(function(){
    var counter = 2;//开始加载
    var num = 6;//每页数量
    //容器外层
    $('#content_drop').dropload({
        scrollArea : window,
        loadDownFn : function(me){
            $.ajax({
                type: 'GET',
                url: 'index.php?p='+ counter,
                dataType: 'json',
                success: function(data){
                	if(data.status  !=0){
                        // 锁定
                        me.lock();
                        // 无数据
                        me.noData();
                    } else {
                    	var result = '';
                        counter++;
                        for(var i = 0; i < num; i++){
                        	//处理内容
                        }
                        $('#content_list').append(result);
                        me.resetload();
                    }
                },
                error: function(xhr, type){
                    console.log('Ajax error!');
                    me.resetload();
                }
            });
        }
    });
});

参考:https://github.com/ximan/dropload

NodeJS操作Mysql示例

//config.js
module.exports={
	
	mysql:{
		host:'localhost',
		port:3306,
		user:'Joyous',
		password:'123456',
		database:'html5',
		charset:'utf8',
		connectionLimit:100,
	}
}
//mysql.js
var mysql=require('mysql');
var config = require('./config.js');
var DB  = mysql.createPool(config.mysql);
var DB_MYSQL = function(){
	__constructor();
	//数据查询接口
	this.fetchRow = function(tableName, idJson, callback) {
		DB.query('SELECT * FROM ' + tableName + ' where ? ', idJson, function(error, results){
			if(error) {
				console.log('ERROR :' + error.message);
				DB.end();
				callback(false);
			} else {
				if(results) {
					callback(results.pop());
				} else {
					callback(results);
				}
			}
		});
		
	};
	//数据插入接口
	this.insert = function(tableName, rowInfo, callback) {
		DB.query('INSERT INTO ' + tableName + ' SET ?', rowInfo, function(err, result){
			if(err) throw err;
			callback(result.insertId);
		});
		
	};
	//数据修改接口
	this.update = function(tableNmae, idJson, rowInfo, callback) {
		DB.query('UPDATE ' + tableName + ' SET ? where ?', [rowInfo, idJson], function(error, result){
			if(error) {
				console.log('UPDATE ERROR :' + error.message);
				callback(false);
			} else {
				callback(result)
			}
		});
	};
	//数据删除接口
	this.remove = function(tableName, idJson, callback){
		DB.query('DELETE ' + tableName + ' where ? ', idJson, function(err, results){
			if(err) {
				console.log('DELETE ERROR :' + err.message);
				DB.end();
				callback(false);
			} else {
				callback(true);
			}
		});
	};
	//自定义查询
	this.queryStr = function(sql,callback){
		DB.query(sql, function(error, result){
			if(error) {
				console.log('QUERY'+ error.message);
				DB.end();
				callback(false);
			} else {
				callback(result);
			}
		});
	};
	//条件查询
	this.fetchAll = function(tableName, whereJson, orderByjson, limitArr, selectStr, callback){
		var andWhere=whereJson['and'],orWhere=whereJson['or'],andArr=[],orArr=[];
		for(var i =  0;i0 ? andArr.join(' and ') : '',
			orStr = orArr.length > 0 ? orArr.join(' or ') : '',
			limitStr = limitArr.length > 0 ? ' limit '+limitArr.join(",") : "",
			orderStr = orderByjson['type'] ? ' order by ' + orderByjson['key'] + ' ' + orderByjson['type'] : '';
			var sql = 'SELECT ' + selectStr + ' FROM ' + tableName + ' where ' + andStr + orStr + orderStr + limitStr;
			DB.query(sql,function(err, results) {
				if(err) {
					console.log('FETCHALL ERROR :' + err.message);
					DB.end();
					callback(false);
				} else {
					callback(results);
				}
			});
	};
	//构造函数
	function __constructor(){

	}
};
module.exports = new DB_MYSQL();
//test.js
var DB=require('./lib/mysql.js');
DB.fetchRow('cj_sys',{id:1},function(res){
	console.log(res.id);
});

 

代理Node服务器

apache版本

        DocumentRoot /data/html/abc
        ServerName blog.phpfs.com

        ProxyPass http://127.0.01:3000/#注意Node监听的端口
        ProxyPassReverse http://127.0.0.1:3000/


nginx版本
server {  
    listen  80;  
    server_name blog.phpfs.com;  
    location / {  
        proxy_pass http://127.0.0.1:3000;  
    }  
} 

 

NodeJs当中module.exports和exports的区别

Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。

var a = {name: ‘nswbmw 1’};
var b = a;
console.log(a);
console.log(b);
b.name = ‘nswbmw 2’;
console.log(a);
console.log(b);
var b = {name: ‘nswbmw 3’};
console.log(a);
console.log(b);

输出
{ name: ‘nswbmw 1’ }
{ name: ‘nswbmw 1’ }
{ name: ‘nswbmw 2’ }
{ name: ‘nswbmw 2’ }
{ name: ‘nswbmw 2’ }
{ name: ‘nswbmw 3’ }
a 是一个对象,b 是对 a 的引用,即 a 和 b 指向同一个对象,即 a 和 b 指向同一块内存地址,所以前两个输出一样。当对 b 作修改时,即 a 和 b 指向同一块内存地址的内容发生了改变,所以 a 也会体现出来,所以第三四个输出一样。当对 b 完全覆盖时,b 就指向了一块新的内存地址(并没有对原先的内存块作修改),a 还是指向原来的内存块,即 a 和 b 不再指向同一块内存,也就是说此时 a 和 b 已毫无关系,所以最后两个输出不一样。

1、exports 是指向的 module.exports 的引用
2、module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}
3、require() 返回的是 module.exports 而不是 exports

//exports只是一个引用!!!
var exports = module.exports = function(param) {
console.log(param);
};

//exports 重新赋值
exports.print = function(param) {
console.log(param + “,we are printing.”);
};
//b.js
var a=require(“./a.js”);
a(‘test’);
a.print(‘test’);
如果还是不明白!!!!
强烈推荐阅读:http://cnodejs.org/topic/5231a630101e574521e45ef8

NodeJS操作Redis

新建test.js,然后在目录下执行npm install redis

var redis = require('redis');
var client = redis.createClient(6379,'127.0.0.1');
client.on('connect', function() {
    console.log('connected');
});
//string
client.set('framework', 'AngularJS');
client.get('framework',function(err,data){
    console.log(data);
});
//hash
client.hmset('frameworks', 'javascript', 'AngularJS', 'css', 'Bootstrap', 'node', 'Express');
client.hgetall('frameworks', function(err, object) {
    console.log(object);
});
//list
client.rpush(['framework-list', 'angularjs', 'backbone'], function(err, reply) {
    console.log(reply);//长度
});
client.lrange('framework-list', 0, -1, function(err, reply) {
    console.log(reply); //元素
});
//set
client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
    console.log(reply); // 3
});
client.smembers('tags', function(err, reply) {
    console.log(reply);
});
//判断key是否存在
client.exists('key', function(err, reply) {
    if (reply === 1) {
        console.log('exists');
    } else {
        console.log('doesn\'t exist');
    }
});
//删除key
client.del('frameworks', function(err, reply) {
    console.log(reply);
});
//设定有效期
client.set('key1', 'val1');
client.expire('key1', 30);
//增加
client.set('key2', 10, function() {
    client.incr('key2', function(err, reply) {
        console.log(reply); // 11
    });
});

 
参考:https://www.npmjs.com/