diff --git a/README.md b/README.md index c8e30195da77d643b2e5b2408f5fb5ed78e29039..0b2198056e3b93e070a780e679a14897e4929f0a 100644 --- a/README.md +++ b/README.md @@ -1 +1,43 @@ -#test1 +仓库 + +在 Git 的概念中,仓库,就是你存在.git目录的那个文件夹内的所有文件,包括隐藏的文件,Git程序会再当前目录以及上级目录查找是否存在.git文件,如果存在,则会将.git目录存在的文件夹开始下的所有文件当成你需要管理的文件,所以,我们如果想将某个文件夹当做一个Git仓库,你可以在那个文件夹下通过终端(Window为Cmd或者PoewrShell或者Bash)来执行 + +git init +这样,你所期望的那个文件夹就成为了一个Git管理的仓库了 + +版本 + +严格来讲,Git并不存在版本的概念,但人们也硬是发展出了这么个玩意,在Git中,计数基础是提交,即我们常说的Commit,我们每做一点更改便可以产生一次提交,当提交累计起来,可以作为产品定型时,就在当前的Commit上打上一个标记,将这个标记我们称之为版本多少多少,那么就算完成了一个版本,标记本身被称之为Tag,请注意,在Git中,版本仅仅只是某一个提交的标签,并没有其他意义,Git本身也仅有打标签的功能,并没有版本功能,版本功能是根据Tag来扩展的,Git本身并没有 + +分支 + +这是Git中最重要的也是最常用的概念和功能之一,分支功能解决了正在开发的版本与上线版本稳定性冲突的问题在Git使用过程中,我们的默认分支一般是Master,当然,这是可以修改的,我们在Master完成一次开发,生成了一个稳定版本,那么当我们需要添加新功能或者做修改时,只需要新建一个分支,然后在该分支上开发,完成后合并到主分支即可 + +提交 + +提交在Git中同样是非常重要的概念,Git对于版本的管理其实是对于提交的管理,在整个Git仓库中,代码存在的形式并不是一分一分的代码,而是一个一个的提交,Git使用四十个字节长度的16进制字符串来标识每一个提交,这基本保证了每一个提交的标识是唯一的,然后通过组织一个按照时间排序的提交列表,就组成了我们所说的分支,请注意,分支在本质上只是一个索引,所以,我们可以任意回退,修正,即使因为某些原因丢失了,也可以重建另外,关于Git的储存方式:Git是仅仅只储存有修改的部分,并不会储存整个文件,所以,请不要删除文件夹整个文件夹的内容,除非你确定你不再需要他,否则请勿删除 + +同步 + +同步,也可以称之为拉取,在Git中是非常频繁的操作,和SVN不同,Git的所有仓库之间是平等的,所以,为了保证代码一致性,尽可能的在每次操作前进行一次同步操作,具体的为在工作目录下执行如下命令: + +git pull origin master +其中origin代表的是你远程的仓库,可以通过命令 git remote -v 查看,master是分支名,如果你本地是其他分支,请换成其他分支的名字,另,因为远程仓库与你本地仓库可能存在冲突,故当存在冲突时,请参考进阶篇的如何处理冲突 + +推送 + +和拉取一样,也是一个非常频繁的操作,当你代码有更新时,你需要更新到远程仓库,这个动作被称之为推送,执行的命令与拉取一样,只是将其中的pull这个单词改成push,同样,如果远程仓库存在你本地仓库没有的更新,则在推送前你需要先进行一次同步,如果你确定你不需要远程的更新,则在推送时加上 -f 选项,则可以强制推送,注:在协同开发中,我并不建议这么做,因为这样很可能覆盖别人的代码 + +推送代码示例: + +git push origin master +强制推送代码示例: + +git push origin master -f +冲突 + +在使用Git开发时,如果只是一个人使用,那么基本不会产生冲突,但是在多人合作开发的情况下,产生冲突是很正常的一件事情,关于如何处理冲突,请参考进阶篇的如何处理代码冲突 这一小节 + +合并 + +合并这个命令通常情况下是用于两个分支的合并,一般用于本地分支,远程分支多用Pull命令,该命令的功能是将待合并分支与目标分支合并在一起,注意,这个命令只会合并当前版本之前的差异,两个分支的提交历史会根据提交时间重新组织索引,故只可能会产生一次冲突但是会生成一个提交,如果你不想生成这次提交,加上 --base参数即可 \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000000000000000000000000000000000000..3e0752a989de960ea4f35f8fa0ba6d16019655b2 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,283 @@ +'use strict' +var gulp = require('gulp'), + uglify = require('gulp-uglify'), + pump = require('pump'), + cssmin = require('gulp-cssmin'), + clean = require('gulp-clean'), + path = require("path"), + argv = require('yargs').argv, + path = require("path"), + zip = require('gulp-zip'), + gulpRimraf = require("gulp-rimraf"), + exit = require('gulp-exit'), + git = require('gulp-git'), + gulpSequence = require('gulp-sequence'), + mySSH = require('./gulp/ssh'), + fs = require('fs'), + shell = require('gulp-shell'); + +var deployConfig = { + test: { + servers: [{ + sshConfig: { + host: '127.0.0.1', + port: 22, + username: 'lancelot', + password: 'lancelot', + readyTimeout: 200000 + } + }], + deployPath: "/home/web/dist", + deploySrc: [], + deployServers: [] + } +}; + +var cfg; + +function getEnvConf(type) { + var conf = {}; + conf.env = argv.env || "test"; + conf.type = type; + conf.rootDir = path.normalize(path.join(__dirname, type)); + conf.distDir = path.normalize(path.join(__dirname, "/dist")); + conf.distTempDir = path.normalize(__dirname + "/dist/temp"); + console.log("env: %s", conf.env); + console.log("root dir : %s", conf.rootDir); + console.log("dist dir : %s", conf.distDir); + return conf; +} + + +gulp.task('echo', shell.task([ + 'echo hello', + 'echo word' +])) + +gulp.task('pull', function () { + var env = argv.env || "test"; + var repo = { + test: "develop", + production: "master" + }; + // + git.checkout(repo[env], function (err) { + if (err) throw err; + git.pull('origin', [repo[env]], function (err) { + if (err) throw err; + var tag = new Date().format("yyyyMMdd.hhmmss"); + git.tag(tag, 'Version' + tag, function (err) { + if (err) throw err; + }); + }); + }); +}); + + +var STATIC_SRC = 'static/'; +var paths = { + allCss: [STATIC_SRC + 'css/*.css', STATIC_SRC + 'css/*/*.css'], + scripts: [STATIC_SRC + 'js/*.js', STATIC_SRC + 'js/*/*.js'] +}; + +gulp.task('static:clean', function () { + return gulp.src('dist-static/', {read: false}) + .pipe(clean()); +}); + +gulp.task('static:copy', ['static:clean'], function () { + return gulp.src('static/**/*') + .pipe(gulp.dest('dist-static')); +}); + +gulp.task('static:css', function () { + gulp.src(paths.allCss) + .pipe(cssmin()) + .pipe(gulp.dest('dist-static/css')); +}); + +gulp.task('static:uglify', function (cb) { + pump([ + gulp.src(paths.scripts), + uglify(), + gulp.dest('dist-static/js') + ], + cb + ); +}); + +gulp.task('static:zip', function () { + return gulp.src(["dist-static/**/*"]) + .pipe(zip('publish.zip')) + .pipe(gulp.dest("./dist-static")) +}); + +gulp.task('static:deploy', function () { + var env = argv.env || "test"; + cfg = deployConfig[env]; + if (!cfg) { + console.error("Invalid env !!!"); + } + + cfg.deploySrc = ["dist-static/**"]; + cfg.deployPath = cfg.deployPath + "/static"; + cfg.deployServers = cfg.servers; + + var envCfg = getEnvConf("static"); + var logName = "deploy-" + envCfg.type; + gulp.src("dist-static/publish.zip") + .pipe(mySSH({ + servers: [cfg.deployServers[0]], + dest: cfg.deployPath + '/publish.zip', + shell: ['cd ' + cfg.deployPath, + 'shopt -s extglob', + 'sudo rm -rf !(logs|node_modules|publish.zip)', + 'unzip -o publish.zip', + "rm publish.zip" + ], + logPath: logName + })) + .pipe(exit()); +}); + +gulp.task('project-static', function () { + gulpSequence('static:copy', 'static:css', 'static:uglify', 'static:zip', + 'static:deploy', + function () { + console.log("***** Deploy Finished!!!!"); + process.exit(0); + } + ); +}); + +gulp.task('project-main', function (cb) { + var env = argv.env || "test"; + cfg = deployConfig[env]; + if (!cfg) { + console.error("Invalid env !!!"); + } + cfg.deploySrc = ["dist/**"]; + cfg.deployPath = cfg.deployPath + "/app"; + cfg.deployServers = cfg.servers; + + var envCfg = getEnvConf("main"); + require("./gulp/deploy.js")(envCfg, cfg); + + gulpSequence("clean:dist", "copyWebSiteToDist", + "process:setting", "process:dockerfile", "zipPublishFile", + "startDeploy", + function () { + console.log("***** Deploy Finished!!!!"); + process.exit(0); + }); +}); + +gulp.task('project-sendemail', function (cb) { + var env = argv.env || "test"; + cfg = deployConfig[env]; + if (!cfg) { + console.error("Invalid env !!!"); + } + cfg.deploySrc = ["dist/**"]; + cfg.deployPath = cfg.deployPath + "/app"; + cfg.deployServers = cfg.servers; + + var envCfg = getEnvConf("sendemail"); + require("./.gulp/deploy.js")(envCfg, cfg); + + gulpSequence("clean:dist", "copyWebSiteToDist", + "process:setting", "process:dockerfile", "zipPublishFile", + "startDeploy", + function () { + console.log("***** Deploy Finished!!!!"); + process.exit(0); + }); +}); + +gulp.task('project-sendsms', function (cb) { + var env = argv.env || "test"; + cfg = deployConfig[env]; + if (!cfg) { + console.error("Invalid env !!!"); + } + cfg.deploySrc = ["dist/**"]; + cfg.deployPath = cfg.deployPath + "/app"; + cfg.deployServers = cfg.servers; + + var envCfg = getEnvConf("sendsms"); + require("./.gulp/deploy.js")(envCfg, cfg); + + gulpSequence("clean:dist", "copyWebSiteToDist", + "process:setting", "process:dockerfile", "zipPublishFile", + "startDeploy", + function () { + console.log("***** Deploy Finished!!!!"); + process.exit(0); + }); +}); + +gulp.task('project-sendcdn', function (cb) { + var env = argv.env || "test"; + cfg = deployConfig[env]; + if (!cfg) { + console.error("Invalid env !!!"); + } + cfg.deploySrc = ["dist/**"]; + cfg.deployPath = cfg.deployPath + "/app"; + cfg.deployServers = cfg.servers; + + var envCfg = getEnvConf("sendcdn"); + require("./.gulp/deploy.js")(envCfg, cfg); + + gulpSequence("clean:dist", "copyWebSiteToDist", + "process:setting", "process:dockerfile", "zipPublishFile", + "startDeploy", + function () { + console.log("***** Deploy Finished!!!!"); + process.exit(0); + }); +}); + +gulp.task('project-checkpay', function (cb) { + var env = argv.env || "test"; + cfg = deployConfig[env]; + if (!cfg) { + console.error("Invalid env !!!"); + } + cfg.deploySrc = ["dist/**"]; + cfg.deployPath = cfg.deployPath + "/app"; + cfg.deployServers = cfg.servers; + + var envCfg = getEnvConf("checkpay"); + require("./.gulp/deploy.js")(envCfg, cfg); + + gulpSequence("clean:dist", "copyWebSiteToDist", + "process:setting", "process:dockerfile", "zipPublishFile", + "startDeploy", + function () { + console.log("***** Deploy Finished!!!!"); + process.exit(0); + }); +}); + +gulp.task('project-scheduler-bill', function (cb) { + var env = argv.env || "test"; + cfg = deployConfig[env]; + if (!cfg) { + console.error("Invalid env !!!"); + } + cfg.deploySrc = ["dist/**"]; + cfg.deployPath = cfg.deployPath + "/app"; + cfg.deployServers = cfg.servers; + + var envCfg = getEnvConf("scheduler-bill"); + require("./.gulp/deploy.js")(envCfg, cfg); + + gulpSequence("clean:dist", "copyWebSiteToDist", + "process:setting", "process:dockerfile", "zipPublishFile", + "startDeploy", + function () { + console.log("***** Deploy Finished!!!!"); + process.exit(0); + }); +});