asp.net mvc 接入阿里大于 短信验证码发送 - 邹柯 - 博客园

mikel阅读(1306)

来源: asp.net mvc 接入阿里大于 短信验证码发送 – 邹柯 – 博客园

项目前端页面实例

第1步:登录阿里大于控制台

https://www.alidayu.com/center/user/account?spm=0.0.0.0.P1K1jG

第2步:创建应用

第3步:配置短信签名

第4步:配置短信模板

第5步:前端

<tr class=”margin-top”> <td class=”padding-top text-center”>手机号</td> <td><input type=”text” class=”inputs” id=”Phone” name=”Phone”> </td> <td><input type=”button” value=”获取验证码” id=”sms” onclick=”sendemail()”></td> </tr> <tr> <td class=”padding-top text-center”>验证码</td> <td><input type=”text” class=”inputs” id=”Code” name=”Code”></td> </tr>

第6步:js处理

$(function () { $(“#sms”).click(function () { sendCode($(“#sms”)); }); v = getCookieValue(“secondsremained”);//获取cookie值 if (v > 0) { settime($(“#sms”));//开始倒计时 } }) //发送验证码 function sendCode(obj) { var phoneNumber = $(“#Phone”).val(); var result = isPhoneNum(phoneNumber); if (result) { //将手机利用ajax提交到后台的发短信接口 $.post(“/College/Code”, { Phone: phoneNumber }, function (data) { if (data == “ok”) { alert(“验证码发送成功!”); } else { alert(“验证码发送失败,请重新发送!”); } }); addCookie(“secondsremained”, 60, 60);//添加cookie记录,有效时间60s settime(obj); //开始倒计时 } } //开始倒计时 var countdown; function settime(obj) { countdown = getCookieValue(“secondsremained”); if (countdown == 0) { obj.removeAttr(“disabled”); obj.val(“获取验证码”); return; } else { obj.attr(“disabled”, true); obj.val(“重新发送(” + countdown + “)”); countdown–; editCookie(“secondsremained”, countdown, countdown + 1); } setTimeout(function () { settime(obj) }, 1000) //每1000毫秒执行一次 } //校验手机号是否合法 function isPhoneNum(phoneNumber) { var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; if (!myreg.test(phoneNumber)) { alert(‘请输入有效的手机号码!’); return false; } else { return true; } } //发送验证码时添加cookie function addCookie(name, value, expiresHours) { var cookieString = name + “=” + escape(value); //判断是否设置过期时间,0代表关闭浏览器时失效 if (expiresHours > 0) { var date = new Date(); date.setTime(date.getTime() + expiresHours * 1000); cookieString = cookieString + “;expires=” + date.toUTCString(); } document.cookie = cookieString; } //修改cookie的值 function editCookie(name, value, expiresHours) { var cookieString = name + “=” + escape(value); if (expiresHours > 0) { var date = new Date(); date.setTime(date.getTime() + expiresHours * 1000); //单位是毫秒 cookieString = cookieString + “;expires=” + date.toGMTString(); } document.cookie = cookieString; } //根据名字获取cookie的值 function getCookieValue(name) { var strCookie = document.cookie; var arrCookie = strCookie.split(“; “); for (var i = 0; i < arrCookie.length; i++) { var arr = arrCookie[i].split(“=”); if (arr[0] == name) { return unescape(arr[1]); break; } else { return “”; break; } } }

第7步:后台控制器处理

#region 商学院报名发送验证码 public ActionResult ValidateCode() { string Code = GetRandomString(6); string url = “https://eco.taobao.com/router/rest”; string appkey = “****”; //此处填写你自己的 string secret = “****”; //此处填写你自己的 ITopClient client = new DefaultTopClient(url, appkey, secret); AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest(); req.Extend = “”; //可空,返回状态 req.SmsType = “normal”; //不可更改 req.SmsFreeSignName = “个人小站”; //申请的短信签名,不可填写与申请的不一 req.SmsParam = “{VCode:'” + Code + “‘}”; //模板内参数必填 req.RecNum = Request[“Phone”]; //接收者手机号码 req.SmsTemplateCode = “SMS_74235011”; //短信模板的编号,不可出错 AlibabaAliqinFcSmsNumSendResponse rsp = client.Execute(req); if (rsp.IsError == false) { Console.WriteLine(rsp.Body); //return Content(rsp.Body); } //将验证码设置缓存 var CodeInfo = (Object)Code; CacheOpt.SetCache(“Code”, CodeInfo, Convert.ToInt32(60)); return Content(“ok”); } #region 生成6位验证码 public string GetRandomString(int iLength) { string buffer = “0123456789”; // 随机字符中也可以为汉字(任何) StringBuilder sb = new StringBuilder(); Random r = new Random(); int range = buffer.Length; for (int i = 0; i < iLength; i++) { sb.Append(buffer.Substring(r.Next(range), 1)); } return sb.ToString(); } #endregion

第8步:缓存处理

public class CacheOpt { /// <summary> /// 设置缓存 /// </summary> /// <param name=”CacheKey”></param> /// <param name=”objObject”></param> /// <param name=”Seconds”>超过多少秒后过期</param> public static void SetCache(string CacheKey, object objObject, long Seconds) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, System.DateTime.Now.AddSeconds(Seconds), TimeSpan.Zero); } /// <summary> /// 获取数据缓存 /// </summary> /// <param name=”CacheKey”>键</param> public static object GetCache(string CacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCache[CacheKey]; } }

注:完整版项目地址:http://www.gmkcn.com/

asp.net C# 实现阿里大鱼和云片网短信接口类 - 叶长种 - 博客园

mikel阅读(850)

来源: asp.net C# 实现阿里大鱼和云片网短信接口类 – 叶长种 – 博客园

云片网短信通用类

复制代码
public class YunpianSMS
    {
        public YunpianSMS()
        { }

        /// <summary>
        /// 服务器HTTP地址
        /// </summary>
        private static string BASE_URI = "http://yunpian.com";

        /// <summary>
        /// 服务版本号
        /// </summary>      
        private static string VERSION = "v1";

        /// <summary>
        /// 查账户信息的http地址 
        /// </summary>           
        private static string URI_GET_USER_INFO = BASE_URI + "/" + VERSION + "/user/get.json";

        /// <summary>
        /// 通用接口发短信的http地址 
        /// </summary>
        private static string URI_SEND_SMS = BASE_URI + "/" + VERSION + "/sms/send.json";

        /// <summary>
        /// 模板接口短信接口的http地址 
        /// </summary>
        private static string URI_TPL_SEND_SMS = BASE_URI + "/" + VERSION + "/sms/tpl_send.json";

        /// <summary>
        /// 通用接口查回复的短信的http地址 
        /// </summary>
        private static string URI_GET_REPLY = BASE_URI + "/" + VERSION + "/sms/get_reply.json";

        /// <summary>
        /// APIKEY
        /// </summary>
        private static string APIKEY = "APIKEY";

        /// <summary>
        /// 获取用户信息
        /// </summary>
        /// <returns>Json格式</returns>
        public static string GetUserInfo()
        {
            System.Net.WebRequest req = System.Net.WebRequest.Create(URI_GET_USER_INFO + "?apikey=" + APIKEY);
            System.Net.WebResponse resp = req.GetResponse();
            System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
            return sr.ReadToEnd().Trim();
        }

        /// <summary>
        ///  发短信通用接口
        /// </summary>
        /// <param name="text">短信内容</param>
        /// <param name="mobile">接收的手机号码,有多个手机号则用逗号分隔,一次最多100个手机号码</param>
        /// <returns>Json格式</returns> 
        public static string SendSms(string text, string mobile)
        {
            //注意:参数必须进行Uri.EscapeDataString编码。以免&#%=等特殊符号无法正常提交
            string parameter = "apikey=" + APIKEY + "&mobile=" + mobile + "&text=" + text;
            return HttpPost(URI_SEND_SMS, parameter);
        }

        /// <summary>
        /// 模板接口发短信
        /// </summary>
        /// <param name="tpl_id">模板ID</param>
        /// <param name="mobile">接收的手机号码</param>
        /// <param name="tpl_value">模板变量值</param>
        /// <returns>Json格式</returns>
        public static string TplSendSms(long tpl_id, string mobile, string tpl_value)
        {
            string postDataStr = "apikey=" + APIKEY + "&mobile=" + mobile + "&tpl_id=" + tpl_id.ToString() + "&tpl_value=" + tpl_value;
            return HttpPost(URI_TPL_SEND_SMS, postDataStr);
        }

        /// <summary>
        /// 查回复的短信
        /// </summary>
        /// <param name="page_num">页码,从1开始</param>
        /// <param name="page_size">每页个数,最大100个</param>
        /// <param name="mobile">接收的手机号码</param>
        /// <returns>Json格式</returns>
        public static string GetReplySms(int page_num, int page_size, string mobile,string datastart,string dataend)
        {
            DateTime now = DateTime.Now;
            //string datastart = now.AddDays(-3).ToString("yyyy-MM-dd 00:00:00");
            //string datasend = now.AddDays(1).ToString("yyyy-MM-dd 00:00:00");
            string postDataStr = "apikey=" + APIKEY + "&start_time=" + datastart + "&end_time=" + dataend
                + "&page_num=" + page_num + "&page_size=" + page_size + "&mobile=" + mobile;

            return HttpPost(URI_GET_REPLY, postDataStr);
        }

        /// <summary>
        /// 通用接口请求
        /// </summary>
        /// <param name="Url"></param>
        /// <param name="postDataStr"></param>
        /// <returns></returns>
        public static string HttpPost(string Url, string postDataStr)
        {
            byte[] dataArray = Encoding.UTF8.GetBytes(postDataStr);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = dataArray.Length;
            //request.CookieContainer = cookie;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(dataArray, 0, dataArray.Length);
            dataStream.Close();
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                String res = reader.ReadToEnd();
                reader.Close();
                return res;
            }
            catch (Exception e)
            {
                return e.Message + e.ToString();
            }
        }
    }
复制代码

调用短信模版方式:

复制代码
string tpl_value = HttpUtility.UrlEncode(
                            HttpUtility.UrlEncode("#username#", Encoding.UTF8) + "=" +
                            HttpUtility.UrlEncode(phone, Encoding.UTF8) + "&" +
                            HttpUtility.UrlEncode("#passwd#", Encoding.UTF8) + "=" +
                            HttpUtility.UrlEncode(passwd, Encoding.UTF8), Encoding.UTF8);
                        //短信失败时,调用第二短信接口
                        YunpianSMS.TplSendSms(1508914, phone, tpl_value);
复制代码

阿里大鱼短信通用类

复制代码
public class AliDaYuSMS
    {
        /// <summary>
        /// <summary>
        /// Url
        /// </summary>
        private static string Url = "http://gw.api.taobao.com/router/rest";
        /// AppKey
        /// </summary>
        private static string AppKey = "AppKey";
        /// <summary>
        /// AppSecret
        /// </summary>
        private static string AppSecret = "AppSecret";

        /// <summary>
        ///  发短信通用接口
        /// </summary>
        /// <param name="extend">公共回传参数,
        /// 在“消息返回”中会透传回该参数;举例:用户可以传入自己下级的会员ID,在消息返回时,
        /// 该会员ID会包含在内,用户可以根据该会员ID识别是哪位会员使用了你的应用</param>
        /// <param name="smsFreeSignName">短信签名</param>
        /// <param name="code">短信模板ID</param>
        /// <param name="smsParam">短信模板变量“验证码${code},您正在进行${product}身份验证,打死不要告诉别人哦!”,
        /// 传参时需传入{"code":"1234","product":"alidayu"}</param>
        /// <param name="mobile">接收的手机号码,群发短信需传入多个号码,以英文逗号分隔,一次调用最多传入200个号码。</param>
        /// <returns>Json格式</returns> 
        public static string SendSms(string extend, string smsFreeSignName, string code, string smsParam, string mobile)
        {
            ITopClient client = new DefaultTopClient(Url, AppKey, AppSecret);
            AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest();
            req.Extend = extend;
            req.SmsType = "normal";
            req.SmsFreeSignName = smsFreeSignName;
            req.SmsParam = smsParam;
            req.RecNum = mobile;
            req.SmsTemplateCode = code;
            AlibabaAliqinFcSmsNumSendResponse rsp = client.Execute(req);
            return rsp.SubErrMsg;
        }
    }

调用方式

                    var smsresult = AliDaYuSMS.SendSms(phone, "潮运动", "SMS_13000621", "{\"username\":\"" + phone + "\",\"passwd\":\"" + passwd + "\"}", phone);
复制代码

 

git 使用简易指南

mikel阅读(1079)

来源: git 使用简易指南

git – 简易指南

助你开始使用 git 的简易指南,木有高深内容,;)。

作者:罗杰·杜德勒
感谢:@tfnico@fhd and Namics
其他语言 englishdeutschespañolfrançaisitalianonederlandsportuguêsрусскийtürkçe,
မြန်မာ日本語한국어
如有纰漏,请到 github 填报

创建新仓库

创建新文件夹,打开,然后执行
git init
以创建新的 git 仓库。

检出仓库

执行如下命令以创建一个本地仓库的克隆版本:
git clone /path/to/repository
如果是远端服务器上的仓库,你的命令会是这个样子:
git clone username@host:/path/to/repository

工作流

你的本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录,它持有实际文件;第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,指向你最近一次提交后的结果。

添加与提交

你可以计划改动(把它们添加到缓存区),使用如下命令:
git add <filename>
git add *
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
git commit -m "代码提交信息"
现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。

推送改动

你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:
git push origin master
可以把 master 换成你想要推送的任何分支。

如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:
git remote add origin <server>
如此你就能够将你的改动推送到所添加的服务器上去了。

分支

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”。在其他分支上进行开发,完成后再将它们合并到主分支上。

创建一个叫做“feature_x”的分支,并切换过去:
git checkout -b feature_x
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_x
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的
git push origin <branch>

更新与合并

要更新你的本地仓库至最新改动,执行:
git pull
以在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动。
要合并其他分支到你的当前分支(例如 master),执行:
git merge <branch>
两种情况下,git 都会尝试去自动合并改动。不幸的是,自动合并并非次次都能成功,并可能导致 冲突(conflicts)。 这时候就需要你修改这些文件来人肉合并这些 冲突(conflicts) 了。改完之后,你需要执行如下命令以将它们标记为合并成功:
git add <filename>
在合并改动之前,也可以使用如下命令查看:
git diff <source_branch> <target_branch>

标签

在软件发布时创建标签,是被推荐的。这是个旧有概念,在 SVN 中也有。可以执行如下命令以创建一个叫做 1.0.0 的标签:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。使用如下命令获取提交 ID:
git log
你也可以用该提交 ID 的少一些的前几位,只要它是唯一的。

替换本地改动

假如你做错事(自然,这是不可能的),你可以使用如下命令替换掉本地改动:
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到缓存区的改动,以及新文件,都不受影响。

假如你想要丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
git fetch origin
git reset --hard origin/master

有用的贴士

内建的图形化 git:
gitk
彩色的 git 输出:
git config color.ui true
显示历史记录时,只显示一行注释信息:
git config format.pretty oneline
交互地添加文件至缓存区:
git add -i

解决Git建立远程分支关联时fatal the current branch master has no upstream branch 问题 - 拂晓的专栏 - CSDN博客

mikel阅读(3612)

来源: 解决Git建立远程分支关联时fatal the current branch master has no upstream branch 问题 – 拂晓的专栏 – CSDN博客

问题描述
今天在使用git时,在本地新建了一个分支,按照网上搜到的方式使用 git branch –set-upstream dev origin/dev (这里的dev为本地新建的分支)命令建立本地分支与远程分支的关联,但该命令执行后并不能成功push变更到远程分支。

问题解决
出现上述问题,说明远程并没有感知到本地新建的这个分支,经过多种尝试后,发现一旦执行 git branch –set-upstream 命令后本地与远程的关联要是仍旧没有建立成功,则再次执行 git push -u origin dev 即可成功建立本地与远程的关联。

git push -u origin dev

在GitHub上管理项目 - 圣骑士wind - 博客园

mikel阅读(892)

来源: 在GitHub上管理项目 – 圣骑士wind – 博客园

在GitHub上管理项目

 

新建repository

本地目录下,在命令行里新建一个代码仓库(repository)
里面只有一个README.md
命令如下:
touch README.md
git init
初始化repository

git add README.md
将README.md加入到缓存区

(可以用git add –a将所有改动提交到缓存(注意是两个杠))

 

git commit -m “first commit”
提交改变,并且附上提交信息”first commit”

 

Push

  git remote add origin https://github.com/XXX(username)/YYYY(projectname).git

加上一个remote的地址,名叫origin,地址是github上的地址(Create a new repo就会有)
因为Git是分布式的,所以可以有多个remote.

git push -u origin master
将本地内容push到github上的那个地址上去。

参数-u
用了参数-u之后,以后就可以直接用不带参数的git pull从之前push到的分支来pull。

 

此时如果origin的master分支上有一些本地没有的提交,push会失败.

所以解决的办法是, 首先设定本地master的上游分支:

git branch –set-upstream-to=origin/master

然后pull:
git pull –rebase

最后再push:

git push

 

分支

新建好的代码库有且仅有一个主分支(master),它是自动建立的。
可以新建分支用于开发:
git branch develop master
新建一个叫develop的分支,基于master分支

切换到这个分支:
git checkout develop
现在可以在这个develop分支上做一些改动,并且提交。
注意:切换分支的时候可以发现,在Windows中的repository文件夹中的文件内容也会实时相应改变,变成当前分支的内容。

 

push方法1:

现在如果想直接Push这个develop分支上的内容到github

  git push -u origin

如果是新建分支第一次push,会提示:
  fatal: The current branch develop has no upstream branch.
To push the current branch and set the remote as upstream, use
git push –set-upstream origin develop
输入这行命令,然后输入用户名和密码,就push成功了。

以后的push就只需要输入git push origin

 

 

push方法2:

比如新建了一个叫dev的分支,而github网站上还没有,可以直接:

git push -u origin dev

这样一个新分支就创建好了。

 

push方法3:

提交到github的分支有多个,提交时可以用这样的格式:

git push -u origin local:remote
比如:git push -u origin master:master
表明将本地的master分支(冒号前)push到github的master分支(冒号后)。
如果左边不写为空,将会删除远程的右边分支。

 

创建分支的另一种方法

用命令git checkout -b develop2 develop
可以新建一个分支develop2,同时切换到这个分支

 

删除分支

git branch可以查看所有的分支
git branch -d develop2 将develop2分支删除

 

Clone

使用git clone+github地址的方法,项目默认只有master分支。git branch也只有master

要看所有的分支:git branch -a或者是git branch -r

这时候要新建一个分支,叫做dev,基于远程的dev分支:git checkout -b dev origin/dev

 

加Tag

git tag tagname develop
git tag中的两个参数,一个是标签名称,另一个是希望打标签的点develop分支的末梢。

 

合并分支

git checkout master

先转到主分支
git merge –no-ff develop

然后把develop分支merge过来

参数意义:
不用参数的默认情况下,是执行快进式合并。
使用参数–no-ff,会执行正常合并,在master分支上生成一个新节点。
merge的时候如果遇到冲突,就手动解决,然后重新add,commit即可。

 

相关链接:

GitHub网址:https://github.com/

Git 一些错误的解决方法-微硬程序员-51CTO博客

mikel阅读(845)

注:Git初学者的个人经验记录,仅供参考1. Pull is not possible because you have unmerged files.症状:pull的时候$ git pullPull is not possible because you have unmerged files.Please, fix them up in the work tree, and then use

来源: Git 一些错误的解决方法-微硬程序员-51CTO博客

注:Git初学者的个人经验记录,仅供参考

1. Pull is not possible because you have unmerged files.

症状:pull的时候

$ git pull

Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use ‘git add/rm <file>’
as appropriate to mark resolution, or use ‘git commit -a’

应该是因为local文件冲突了

解决方法:

引用——

1.pull会使用git merge导致冲突,需要将冲突的文件resolve掉 git add -u, git commit之后才能成功pull.

2.如果想放弃本地的文件修改,可以使用git reset –hard FETCH_HEAD,FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull.
注意:

git merge会形成MERGE-HEAD(FETCH-HEAD) 。git push会形成HEAD这样的引用。HEAD代表本地最近成功push后形成的引用。

就我的经验,有时候会莫名其妙地出现这种状况,而且Untracked files 还特别多(实际上自己可能只改了一两个文件),所以只好先保存好自己确定做出的local的修改,然后用git reset –hard FETCH_HEAD回到上次成功pull之后的点,然后再pull就没有问题了

2.You are not currently on a branch.

症状:有一次pull的时候又出现冲突,这回用“git reset –hard FETCH_HEAD”方法都不行了,出现:

$ git pull
You are not currently on a branch, so I cannot use any
'branch.<branchname>.merge' in your configuration file.
Please specify which remote branch you want to use on the command
line and try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

解决方法:

首先git checkout -b temp

其次git checkout master

即可恢复到master repository的状态,然后就可以pull了

参考:

http://skywhsq1987.iteye.com/blog/1814137

http://slacy.com/blog/2011/04/git-pull-says-you-are-not-currently-on-a-branch/

http://ddmytrenko.blogspot.com/2012/03/git-not-currently-on-any-branch.html

如何通过Git GUI将自己本地的项目上传至Github - 尼古拉斯.张飞的博客 - CSDN博客

mikel阅读(789)

来源: 如何通过Git GUI将自己本地的项目上传至Github – 尼古拉斯.张飞的博客 – CSDN博客

githud是一个程序员以后成长都会使用到的,先不说很多优秀的开源框架都在这上面发布,光是用来管理自己的demo都已经让人感到很方便,用得也很顺畅。而真正让我下定决心使用github的原因是因为两次误操作,将自己所有的学习demo全都删除,而且由于数据太大,是彻底删除的那种,使用数据恢复软件,但然并卵,恢复的数据杂乱无章,另一次是由于自己的固态损坏,所有的东西也全没了,终于痛下决心好好研究github的使用。
在上面的原因之下,花了一天的时间来研究github,一下是一天来的学习成果。
1.至于怎么注册和安装git客户端,可参照以下这篇博客:http://blog.csdn.net/vipzjyno1/article/details/22098621
通过命令行,以上的博客也说德很清楚,下面要说的是如何通过Git GUI将自己本地的文件上传至Github上。
2.将自己本地文件上传至Github
1)创建.git仓库
    在自己的本地文件(位置随意),点击右键==》选择Git GUI Here ,会弹出以下框,选择create new Repository,也就是箭头处,红色圈内是我自己已经创建的。
点击create new Repository以后会出现让你输入一个文件夹的弹窗,直接输入一个文件夹名称即可。点击创建,这时打开Git文件夹里面有一个.git文件夹,但有些人是看不到的,这是因为,默认情况下是隐藏的,自己将自己电脑里的文件显示即可,不会的自行百度。这时,这个Git文件夹就是你的项目仓库。只要将你需要上传的项目放在该文件夹即可。
完成点击创建以后,会弹出可视化窗:点击Remote–》Add…
弹出以下框以后输入你Github的用户名(shanerou是我的github名称)和你需要将你本地的项目放在Github的仓库的地址,如我在Github上创建了一个repository名称为Test的,然后添加如下,点击创建,弹出success的框代表创建成功
在Git文件夹下放入我的一个demo:SD_SQList2
按以下步骤操作:
点击第三步时,在Initial Commit Message 框里将会看到一行信息
点击第四步,也就是提交命令以后,左边已经缓存的文件被提交,缓存文件消失,这时点击第五步即可,点击第五步后出现以下框:
输入你Github的用户名 和密码:
点击上传:出现以下弹框则表示上传成功
这时到你的Github上去看,将会看到以下dome:

Git可视化极简易教程 — Git GUI使用方法 | 菜鸟教程

mikel阅读(860)

来源: Git可视化极简易教程 — Git GUI使用方法 | 菜鸟教程

前言

之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中的成本,但是搜索了一下并没有找到满意的教程,新的一年自己梳理一下自己的经验。

可能男生们大神比较多,觉得Git是如此简单,便已觉得命令行操作就是SO EASY,甚至或许有看不起可视化这样面对低端用户的心理,好的,那您就当我是水货可以右上角了。

我一直觉得类似GIT这样的东西,他对于我而言只是个不完全必须的工具,我并不想成为使用他的专家,类似的东西,今天有GIT,明天可能有GAT,或者GAY?所以快速地掌握它我需要的重要日常操作,最好是10分钟,那就好了,如果你有类似的想法,好吧,那不要废话了,咱们赶紧开始。

(全文限windows系统。)

何为GIT?

安装GIT,大致了解下GIT是做某子的

权限校验

首先,您的数据保存在远端服务器一份,服务器需要对您的身份识别。一段RSA加密字符串。

启动GUI,菜单-帮助,【Step1-创建密钥】Generate SSH KEY

271102462211960

【Step2-添加密钥】去你的代码托管服务器,你的账号设置中,添加它。

比如在Github中的地址,title随意,比如你可以用Home,company等作为标识来区别。

271104566587275

Gitlab中的演示

271108115808959

账号保存

如果不做设置的话,每次提交的时候,都会询问你填写密码。于是我们先来把这个设置好。

【Step3.1-添加环境变量

我的电脑 – 属性 – 高级系统设置 – 环境变量 – 新建变量

变量名HOME,变量值%USERPROFILE%

271117100641718

271117191748667

271117300493045

271117384245853

【Step3.2-创建账号文件】

开始 – 运行 中打开%Home%,即windows的管理员账号文件夹。

新建一个名为”_netrc”的文件,填写你要保存的服务器地址及账号密码,保存。

271123307214691

271123401437312

操作流程

如果你用过SVN的话就会大致了解操作流程,如果没有也没关系。

初始化(Git init)

顾名思义,就是新建一个项目,跟你用PS新建一张画布一样。在你新建好的文件夹中右键创建即可,若点击Git bash则以此目录作为当前目录进入命令行状态。

271234025648572

添加(Git add)

添加并不是提交代码到远程Git库,Git也并不会你修改了代码它自动帮你保存你修改的每一个过程。你修改了很多文件,但未必所有的修改,最终打算提交上去,那么哪些是你打算提交的,你可以添加进来待会提交,叫做缓存改动。很简单,比如本地电脑上我有整个项目完整的东东,甚至包含了账号密码的一些文件,但是我只是ADD除账号密码之外的文件,并不缓存账号密码文件的改动。不被ADD它就不会参与后续的操作。通常我都会直接全部缓存,它会自动寻找所有有改动的文件,而不需要提交的文件放在忽略的文件夹中。(关于忽略下面我们就会说到)

271238259396476

忽略(.gitignore)

但实际上大部分我们的文件都是一起提交的,并不会逐一去甄选,又或者类似PSD这样的大源文件以及并不作为产品最终展示的过渡文件,我们可以统一放在临时文件夹中,并忽略此文件夹。

271134259394618

提交(Git commit)

提交则代表此前被添加ADD的文件已确认被提交到Git库了。需要注意的是,如果你改变代码的缩进(尽管没有修改内容),默认状态下会被识别为整个代码全部变更。提交的时候是要求必须要写备注的

271240398302205

上传(Git push)

顾名思义,上传则是上至远端服务器了,小伙伴们可以看到咱们的渣渣代码了(好羞涩。

271241402522046

获取远程代码(Git remote/fetch)

比如你在公司做好的东东,今夜难眠十分亢奋,回家准备继续搬砖,那咱们就在家里的电脑上,同上进行好各种安装配置账号,先把公司做好的东东嫩下来(不过公司是内网不可以,但是假如是Github上是可以的)。又或者和小伙伴一起开发个啥,你也要先fetch他的下来。至于怎么操作,下面上图。现在你只要知道,大大们下齿全露刷牙表情对你口口念念的fetch是个啥子~

271145255335341 来,跟我念,fetch~~(我怕你们脑补不出来……)

先来设置与远程地址的关联,Git remote:

271242561118002

271244220336453

填写SSH地址与项目名。下面有3个选项:

第一个:立刻获取最新改动(所以如果是本地克隆远程一个项目,也可以这样操作)。

第二个:本地新建的项目,初始化远程仓库并发布过去。

第三个:什么也不做。

在项目的进行过程中,获取仓库的最新改动Git fetch

271259025495085

选择从远程仓库哪个分支中获取更新,如果没有则只有主支。

提示成功则改动的已经被存放到临时区了,你一会还需要进行合并操作,如果没有任何改动,则列表中是空的,比如:

271300329558531

合并(Git merge)

请注意啦,不管你本地有没有代码,fetch之后呢,是都要merge的,也就是说,fetch下来后,大大的代码还在一个小黑屋里,我们需要把它装到自己兜里。

选择合并 – 本地合并,然后选择本地的分支(如果你没有创建分支,则只有1个主支master)

271254126278757

冲突处理(Conflict)

合并的过程中可能会出现一些红色的文件与一堆叹号,这时候慌慌张张的点啥它都不管用,不用担心,不是程序坏了,只是有冲突的文件,例如A童鞋写了width:1180px,你写了width:auto。那到底用你们谁的呢。

在GUI界面正文区,正文区右键可以选择,Use local version(使用本地版本)或Use remote version(使用远程版本),到底用你的还是小伙伴的?或者你也可以自己再整合。

271257485644055

其他还有分支和一些高级功能,如果需要了解可以自己再摸索摸索,以上的操作已经可以满足简单的开发需求了。

总结

1.先进行安装,密钥添加,账号等一次性操作。

2.操作流程:

271314500648180

是不是觉得so easy了呢,赶紧have a try!

在线生成网址二维码的API接口 - 不抛弃、不放弃:Aaron莫言 - CSDN博客

mikel阅读(826)

来源: 在线生成网址二维码的API接口 – 不抛弃、不放弃:Aaron莫言 – CSDN博客

现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站。想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口。都是采用http协议接口,无需下载安装什么软件,可简单方便地引用,这才是最简单、最便捷的免费网址二维码生成工具。
在线生成网址二维码的API接口:

1.http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.ifeng.com

2.http://b.bshare.cn/barCode?site=weixin&url=http://www.ifeng.com

3.http://s.jiathis.com/qrcode.php?url=http://www.ifeng.com

4.http://qr.liantu.com/api.php?text=http://www.ifeng.com

5.http://api.k780.com:88/?app=qr.get&data=http://www.ifeng.com&level=L&size=6

6.https://api.qrserver.com/v1/create-qr-code/?size=150×150&data=http://www.ifeng.com

使用说明:把url=后面的网址改成你要生成二维码的;用它们只需要填写好网址就能自动生成二维码,方便实用,以上几个,任选一种即可。
———————
作者:Aaron莫言
来源:CSDN
原文:https://blog.csdn.net/aoxiangzhe/article/details/80895802
版权声明:本文为博主原创文章,转载请附上博文链接!

【随记】解决:VS2010 调试器无法继续继续运行该进程,无法启动调试 - 钱恩基 - 博客园

mikel阅读(889)

今天在调试项目的时候突然出现错误: 按照网上的一些方法弄了后还是同样报错,把本地代码删除后从库上重现拉下来的项目依然报错,到这里就明白不是项目本身问题了,而是VS2010 的问题,经过网上查资料,问同事各种方法之后,终于找到了问题所在:原来是PowerDesigner 16 的插件导致的; 解决方法:在VS上的菜单栏【工具】–>【扩展管理器】中把PowerDesigner 16 的插件卸载,重启VS就解决了。

来源: 【随记】解决:VS2010 调试器无法继续继续运行该进程,无法启动调试 – 钱恩基 – 博客园

今天在调试项目的时候突然出现错误:

按照网上的一些方法弄了后还是同样报错,把本地代码删除后从库上重现拉下来的项目依然报错,到这里就明白不是项目本身问题了,而是VS2010 的问题,经过网上查资料,问同事各种方法之后,终于找到了问题所在:原来是PowerDesigner 16 的插件导致的;

解决方法:在VS上的菜单栏【工具】–>【扩展管理器】中把PowerDesigner 16 的插件卸载,重启VS就解决了。