https学习总结 https学习总结 1、https简介 [在github上搭建网站]使用Git搭建我的静态网站

 

 

 

 

1、https简介

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,RFC2818文档中https也称作TLS之上的HTTP。因此加密的详细内容请看SSL。 https所用的端口号是443。见下图:
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

从上面两张图中可知,https协议是基于SSL协议的。

2、https的实现原理

有两种基本的加解密算法类型:

1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

下面看一下https的通信过程:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

https通信的优点:

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的。

3、服务器验证客户端

如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:

①客户的证书使用日期是否有效

②为客户提供证书的CA 是否可靠

③发行CA 的公钥能否正确解开客户证书的发行CA 的数字签名

④检查客户的证书是否在证书废止列表(CRL)中

4、加密

在https的通信过程中,组合使用了公用密钥方式加密和共享密钥方式加密这两种技术。

公用密钥方式要比共享密钥方式慢得多,因此使用公用密钥来完成共享密钥的交换。公用密钥是从证书中获得的。

拿到共享密钥之后,所有的内容之间的通信都会使用共享密钥来进行加密和解密。

公用密钥的作用就是为了安全的交换共享密钥,共享密钥是用来通信内容的加密和解密。这样既确保了通信之间的安全,也确保了加密和解密的效率。

5、SSL的连接

   连接分为两个阶段,即握手和数据传输阶段。

握手阶段对服务器进行认证并确立用于保护数据传输的加密密钥。必须在传输任何应用数据之前完成握手。一旦握手完成,数据就被分成一系列经过保护的记录进行传输。

(原创)一个和c#中Lazy<T>类似的c++ Lazy<T>类的实现

  在.net 4.0中增加一个延迟加载类Lazy<T>,它的作用是实现按需延迟加载,也许很多人用过。一个典型的应用场景是这样的:当初始化某个对象时,该对象引用了一个大对象,需要创建,这个对象的创建时需要较长的时间,同时也需要在托管堆上分配较多的空间,这样可能会在初始化时变得很慢,尤其是UI应用时,会导致用户体验很差。其实狠多时候并不需要马上就获取大数据,只是在需要时获取,这种场景就很适合延迟加载了。先看看c#中Lazy<T>如何使用的吧:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
class LargeObject
{
    public int InitializedBy { get { return initBy; } }

    int initBy = 0;
    public LargeObject(int initializedBy)
    {
        initBy = initializedBy;
        Console.WriteLine("LargeObject was created on thread id {0}.", initBy);
    }

    public long[] Data = new long[100000000];
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
class TestLazy
{
    Lazy<LargeObject> lazyLargeObject = null;

    public TestLazy()
    {
        //创建一个延迟加载对象
        lazyLargeObject = new Lazy<LargeObject>(InitLargeObject);
    }

    public void ReallyLoad()
    {
        //此时真正加载
        lazyLargeObject.Value;
        Console.WriteLine("lazy load big object");

        //do something
    }
}

void Test()
{
    TestLazy t = new TestLazy();
    t.ReallyLoad(); //这时,真正延迟加载时才会打印"lazy load big object"
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

  

  c++中目前还没有类似的Lazy<T>延迟加载类,其实延迟加载类内部用到了lamda表达式,将函数封装到lamda表达式中去,而不是马上求值,而是在需要的时候再调用lamda表达式去求值。c++11 中有lamda表达式和function,正好做这个事情,看看c++11如何实现类似c#的Lazy<T>延迟加载类吧。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
#include <boost/optional.hpp>
template<typename T>
struct Lazy
{
    Lazy(){}

    template <typename Func, typename... Args>
    Lazy(Func& f, Args && ... args)
    {
        m_func = std::move([&f, &args...]{return f(args...); });
    }

    T& Value()
    {
        if (!m_value.is_initialized())
        {
            m_value = m_func();
        }

        return *m_value;
    }

    bool IsValueCreated() const
    {
        return m_value.is_initialized();
    }

private:
    std::function<T()> m_func;
    boost::optional<T> m_value;
};

template<class Func, typename... Args>
Lazy<typename std::result_of<Func(Args...)>::type>
    lazy(Func && fun, Args && ... args)
{
    return Lazy<typename std::result_of<Func(Args...)>::type>(std::forward<Func>(fun), std::forward<Args>(args)...);
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

再看看测试代码:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
struct BigObject
{
    BigObject()
    {
        cout << "lazy load big object" << endl;
    }
};

struct MyStruct
{
    MyStruct()
    {
        m_obj = lazy([]{return std::make_shared<BigObject>(); });
    }

    void Load()
    {
        m_obj.Value();
    }

    Lazy< std::shared_ptr<BigObject>> m_obj;
};

int Foo(int x)
{
    return x * 2;
}

void TestLazy()
{
    //带参数的普通函数
    int y = 4;
    auto lazyer1 = lazy(Foo, y);
    cout << lazyer1.Value() << endl;

    //不带参数的lamda
    Lazy<int> lazyer2 = lazy([]{return 12; });
    cout << lazyer2.Value() << endl;

    //带参数的fucntion
    std::function < int(int) > f = [](int x){return x + 3; };
    auto lazyer3 = lazy(f, 3);
    cout << lazyer3.Value() << endl;

    //延迟加载大对象
    MyStruct t;
    t.Load();
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

输出结果:

8
12
6
lazy laod big object

  这个Lazy<T>类可以接收lamda表达式和function,实现按需延迟加载。和c#的Lazy<T>用法类似。不过还没c#中Laze<T>那么强大,没有增加线程策略在里面,目前还不想做得更复杂,简单够用就行。


c++11 boost技术交流群:296561497,欢迎大家来交流技术。

 
 
随笔- 42  文章- 0  评论- 88 

[在github上搭建网站]使用Git搭建我的静态网站

 

本文目录                                         

本章节内容

①注册我的git账号

②创建一个项目

③密钥

④连接我的项目

⑤下载上传我的代码

1.注册我的git账号           

   打开站点:https://github.com/,注册一个账号,这里我们需要将自己的代码托管在github上面。

注册该站点有两个目的:

    托管我们的开源项目;

    我们在上面建个静态博客吧。

为了安全起见,你可以启用两步验证。

2.创建一个项目              

    让我们的账户保持登录状态,点击右上角 用户名(PS:我的是flyher),这时出来我们托管过的项目,选中Repositories选项卡,下一行看到 New ,新建我们的项目。如图:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    进入下一页,填写我们的项目名称,描述信息等。当然,你还可以选择你的项目协议,是否开源之类的。如图:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

点击Create repository,这样我们就创建成功了项目。但是,为什么木有看到我的网站呢?别急:

这时点击 右侧的扳手

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

在我们进入的Options选项卡中我们发现如下条目:

Create a beautiful site for your project with our GitHub Pages generator.

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

点击“Automatic Page Generator

我们看到跳转的页面:

Project Name:网站标题;

Tagline:网站副标题;

Body:这个就是网页源码了;

Google Analytics Tracking ID:搜索引擎抓取关键字.

这些你都可以自定义。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

填完后(PS:后面依然可以自己修改),我们点击" Continue to Layouts"

选择自己的博客主题(PS:可以先选上,搞定后自己改代码)

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    选好之后点击"Publish" 就成功了。我们预览看看:http://flyher.github.io/blog

  flyher:用户名;blog:项目名

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

  提示,404错误,等10分钟吧。

(PS:LZ我的等了两周,然后收到邮件手创建失败,原因尚未验证成功Email,于是再验证,没收到邮件,当前强迫症似的连续请求的N次验证,结果一直收不到验证邮件。给github写了2封邮件,估计石沉大海了,两周后的今天,奇迹般居然提示让我验证了,然后就成功了。真是人品不好么?)

 10分钟之后,Ok了。

3.密钥                         

    博客搞定了,总得更新自己的代码吧,这样需要使用git,至于怎么安装git,我不想多说了,这里我们打开安装成功的Git Bash,也就是命令行。

    创建SSH Keys,执行 ssh-keygen -t rsa -C "邮箱",然后会要你保存一个路径:

1 ssh-keygen -t rsa -C "xx@gmail.com"//狠多邮箱都支持

我将其保存到/d/testC#/dll/git/id_rsa(id_rsa为文件名),输入完整,会让你输入一个密码,输入即可。

(PS:不知道什么是SSH Keys,普及一下:SSH keys 即 Secure Shell Keys,是为了防止任何人随意clone 或 push 代码而产生的. keys 有公匙和密匙,你在本地生成了密匙和公匙之后,把你的公匙告诉给服务器或者其他协作者,那么你就可以在他们的git版本库clone和push代码等操作.相对于一台服务器来说,一台协作者机器对应一个SSH keys.SSH有两种,一种基于口令,一种基于密钥。)

 https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 成功生成了我的key.

 https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 密钥用啥用呢,当然是连接我的项目,便于用git更新代码,就是传说的版本控制。

 连接之前,我们一定要将生成的SSH Keys添加到Github上才能认证。

         用记事本打开id_rsa.pub,将里面的一堆东西复制出来,粘贴到GitHub网站的SSH Keys中。看截图:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

     如果你通过了邮件验证你就会收到提示。

准备工作至此完成,我们可以连接我们的项目了。

4.连接我的项目                         

在Git Bash命令行上写以下语句

1 ssh -T git@github.com

却提示:Permission denied (publickey)

查了github网站的帮助信息:传送门

检查每一步到:Make sure you have a key and SSH is using it

发现使用命令:

1 ssh-add -l

提示:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

原来是私钥尚未加载,按照帮助的说法,现在需要先把私钥加载上。

使用以下命令:

1 ssh-add d:/testC#/dll/git/web/key

ps:我的私钥放在了d:/testC#/dll/git/web/文件下,文件名为key

依然提示上面的错误:Cound not open a connection to your authentication agent.

这意思不是说ssh-agent没有连接,查了很多东西,大部分是说要修改windows下的.bash_profile文件,但是我没找到,用ssh-agent bash --login -i 这个命令解决了这个问题。

1 ssh-agent bash --login -i 

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

接着重复上述步骤 添加私钥,OK。这下不报错了。

这时提示输入密码,OK,加载上了。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

再次连接试试:

1 ssh -T git@github.com

提示:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 PS:需要等待几十秒。

5.下载上传我的代码                                  

   将GitHub Pages个人文件下载到本地:

自己的git地址先看这里:

 https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 执行语句:

  flyher:账户名;blog:项目名

 或者执行:

1 git clone https://github.com/flyher/blog.git

 执行效果: 

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    这样我们发现,down下来的不是我们在github保存的代码,很奇怪,仔细一看,发现有两个分支,静态网站的代码在gh-pages中,代码在分支master中。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    而我们现在的命令界面,什么都没有显示,也就是我们在github网站上有两个分支,而在本地却没有。

怒了,删除刚在blog文件夹下clone的所有文件。

    查看我们的状态和目前所处分支:

1 git status

命令提示:fatal:Not a git repository<or any of the parent directories>:.git
意思就是 当前文件夹中缺少 .git文件夹(PS:里面保存有分支信息),那就是我们刚才怒删了,再建一个吧。

  我们创建一下:

1  git init

看到blog文件夹下多出了一个隐藏文件夹 .git
再次输入命令查看所处分支:

1 git status

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

我们当前所处master分支,也就是和github网站上第一个分支,这样看来,之所以同步之后我们看到的是master的文件也是有原因的。

   现在先看看本地有几个分支:

1 git branch -a

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    只有master一个分支,既然这样,我们创建一个 gh-pages 分支吧,可以和远程保持一致的嘛。

1 git symbolic-ref HEAD refs/heads/gh-pages

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 看到后面的括号显示 gh-pages

说明已经切换到 gh-pages分支上了(PS:若没有切换,建议删除.git重新玩吧)。

我们先把远程的 gh-pages 同步下来吧,因为在 上一步 我们为我们的网站选择了主题,这些源代码肯定先同步下来我们才可以在他的基础上修改的。

  输入命令:

1 git pull origin git@github.com:flyher/blog.git

居然显示错误信息
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

网上狂查(PS:此处省略一万字,真是疯了),发现真正能解决的办法,  输入命令:

1 git remote add origin git@github.com:flyher/blog.git

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 自此同步下载:

1 git pull orgin git@github.com:flyher/blog.git

汗,依然提示错误,依然是
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

难道后面地址有问题,试着改了一下命令:

1 git pull origin gh-pages

回车之后,我们看到了gh-pages分支的源代码居然都下载下来了,欣喜:
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

居然能够自动识别出From github.com:flyher/blog

不懂为什么它知道是这个blog中的XXX,求解.

    https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

改改代码吧,改改pgbar.html,从网上下载了一个虚拟的jquery进度条,改了改,超级好看,改好同步:

1 git add .
2 git commit -a -m "test2"
3 git push origin gh-pages

PS:

add . 添加当前目录所有的文件和文件夹,如果只想增量同步,将 . 改为自己想要同步的文件夹或者文件名就行了。

test2相当于备具,就是修改代码的原因

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

第一行是我把LICENSE删除的提示,添加上就不会报错了。

我们看看我们在github网站上的情况。

源码:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

页面:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

至此,我们的代码可以修改同步了。发现github居然不支持Jquery???

但是为什么有时候会出现有的文件的代码合并在了一起混乱了,真心不懂什么原因.求教。

 我也是第一次使用git,文中错误在所难免,望能批评矫正。本文只是学习笔记。另外请教了两个问题,见文中红色标识的文本。 

 
 
分类: Project

1、https简介

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,RFC2818文档中https也称作TLS之上的HTTP。因此加密的详细内容请看SSL。 https所用的端口号是443。见下图:
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

从上面两张图中可知,https协议是基于SSL协议的。

2、https的实现原理

有两种基本的加解密算法类型:

1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

下面看一下https的通信过程:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

https通信的优点:

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的。

3、服务器验证客户端

如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:

①客户的证书使用日期是否有效

②为客户提供证书的CA 是否可靠

③发行CA 的公钥能否正确解开客户证书的发行CA 的数字签名

④检查客户的证书是否在证书废止列表(CRL)中

4、加密

在https的通信过程中,组合使用了公用密钥方式加密和共享密钥方式加密这两种技术。

公用密钥方式要比共享密钥方式慢得多,因此使用公用密钥来完成共享密钥的交换。公用密钥是从证书中获得的。

拿到共享密钥之后,所有的内容之间的通信都会使用共享密钥来进行加密和解密。

公用密钥的作用就是为了安全的交换共享密钥,共享密钥是用来通信内容的加密和解密。这样既确保了通信之间的安全,也确保了加密和解密的效率。

5、SSL的连接

   连接分为两个阶段,即握手和数据传输阶段。

握手阶段对服务器进行认证并确立用于保护数据传输的加密密钥。必须在传输任何应用数据之前完成握手。一旦握手完成,数据就被分成一系列经过保护的记录进行传输。

  在.net 4.0中增加一个延迟加载类Lazy<T>,它的作用是实现按需延迟加载,也许很多人用过。一个典型的应用场景是这样的:当初始化某个对象时,该对象引用了一个大对象,需要创建,这个对象的创建时需要较长的时间,同时也需要在托管堆上分配较多的空间,这样可能会在初始化时变得很慢,尤其是UI应用时,会导致用户体验很差。其实狠多时候并不需要马上就获取大数据,只是在需要时获取,这种场景就很适合延迟加载了。先看看c#中Lazy<T>如何使用的吧:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
class LargeObject
{
    public int InitializedBy { get { return initBy; } }

    int initBy = 0;
    public LargeObject(int initializedBy)
    {
        initBy = initializedBy;
        Console.WriteLine("LargeObject was created on thread id {0}.", initBy);
    }

    public long[] Data = new long[100000000];
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
class TestLazy
{
    Lazy<LargeObject> lazyLargeObject = null;

    public TestLazy()
    {
        //创建一个延迟加载对象
        lazyLargeObject = new Lazy<LargeObject>(InitLargeObject);
    }

    public void ReallyLoad()
    {
        //此时真正加载
        lazyLargeObject.Value;
        Console.WriteLine("lazy load big object");

        //do something
    }
}

void Test()
{
    TestLazy t = new TestLazy();
    t.ReallyLoad(); //这时,真正延迟加载时才会打印"lazy load big object"
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

  

  c++中目前还没有类似的Lazy<T>延迟加载类,其实延迟加载类内部用到了lamda表达式,将函数封装到lamda表达式中去,而不是马上求值,而是在需要的时候再调用lamda表达式去求值。c++11 中有lamda表达式和function,正好做这个事情,看看c++11如何实现类似c#的Lazy<T>延迟加载类吧。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
#include <boost/optional.hpp>
template<typename T>
struct Lazy
{
    Lazy(){}

    template <typename Func, typename... Args>
    Lazy(Func& f, Args && ... args)
    {
        m_func = std::move([&f, &args...]{return f(args...); });
    }

    T& Value()
    {
        if (!m_value.is_initialized())
        {
            m_value = m_func();
        }

        return *m_value;
    }

    bool IsValueCreated() const
    {
        return m_value.is_initialized();
    }

private:
    std::function<T()> m_func;
    boost::optional<T> m_value;
};

template<class Func, typename... Args>
Lazy<typename std::result_of<Func(Args...)>::type>
    lazy(Func && fun, Args && ... args)
{
    return Lazy<typename std::result_of<Func(Args...)>::type>(std::forward<Func>(fun), std::forward<Args>(args)...);
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

再看看测试代码:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站
struct BigObject
{
    BigObject()
    {
        cout << "lazy load big object" << endl;
    }
};

struct MyStruct
{
    MyStruct()
    {
        m_obj = lazy([]{return std::make_shared<BigObject>(); });
    }

    void Load()
    {
        m_obj.Value();
    }

    Lazy< std::shared_ptr<BigObject>> m_obj;
};

int Foo(int x)
{
    return x * 2;
}

void TestLazy()
{
    //带参数的普通函数
    int y = 4;
    auto lazyer1 = lazy(Foo, y);
    cout << lazyer1.Value() << endl;

    //不带参数的lamda
    Lazy<int> lazyer2 = lazy([]{return 12; });
    cout << lazyer2.Value() << endl;

    //带参数的fucntion
    std::function < int(int) > f = [](int x){return x + 3; };
    auto lazyer3 = lazy(f, 3);
    cout << lazyer3.Value() << endl;

    //延迟加载大对象
    MyStruct t;
    t.Load();
}
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

输出结果:

8
12
6
lazy laod big object

  这个Lazy<T>类可以接收lamda表达式和function,实现按需延迟加载。和c#的Lazy<T>用法类似。不过还没c#中Laze<T>那么强大,没有增加线程策略在里面,目前还不想做得更复杂,简单够用就行。


c++11 boost技术交流群:296561497,欢迎大家来交流技术。

本文目录                                         

本章节内容

①注册我的git账号

②创建一个项目

③密钥

④连接我的项目

⑤下载上传我的代码

1.注册我的git账号           

   打开站点:https://github.com/,注册一个账号,这里我们需要将自己的代码托管在github上面。

注册该站点有两个目的:

    托管我们的开源项目;

    我们在上面建个静态博客吧。

为了安全起见,你可以启用两步验证。

2.创建一个项目              

    让我们的账户保持登录状态,点击右上角 用户名(PS:我的是flyher),这时出来我们托管过的项目,选中Repositories选项卡,下一行看到 New ,新建我们的项目。如图:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    进入下一页,填写我们的项目名称,描述信息等。当然,你还可以选择你的项目协议,是否开源之类的。如图:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

点击Create repository,这样我们就创建成功了项目。但是,为什么木有看到我的网站呢?别急:

这时点击 右侧的扳手

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

在我们进入的Options选项卡中我们发现如下条目:

Create a beautiful site for your project with our GitHub Pages generator.

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

点击“Automatic Page Generator

我们看到跳转的页面:

Project Name:网站标题;

Tagline:网站副标题;

Body:这个就是网页源码了;

Google Analytics Tracking ID:搜索引擎抓取关键字.

这些你都可以自定义。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

填完后(PS:后面依然可以自己修改),我们点击" Continue to Layouts"

选择自己的博客主题(PS:可以先选上,搞定后自己改代码)

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    选好之后点击"Publish" 就成功了。我们预览看看:http://flyher.github.io/blog

  flyher:用户名;blog:项目名

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

  提示,404错误,等10分钟吧。

(PS:LZ我的等了两周,然后收到邮件手创建失败,原因尚未验证成功Email,于是再验证,没收到邮件,当前强迫症似的连续请求的N次验证,结果一直收不到验证邮件。给github写了2封邮件,估计石沉大海了,两周后的今天,奇迹般居然提示让我验证了,然后就成功了。真是人品不好么?)

 10分钟之后,Ok了。

3.密钥                         

    博客搞定了,总得更新自己的代码吧,这样需要使用git,至于怎么安装git,我不想多说了,这里我们打开安装成功的Git Bash,也就是命令行。

    创建SSH Keys,执行 ssh-keygen -t rsa -C "邮箱",然后会要你保存一个路径:

1 ssh-keygen -t rsa -C "xx@gmail.com"//狠多邮箱都支持

我将其保存到/d/testC#/dll/git/id_rsa(id_rsa为文件名),输入完整,会让你输入一个密码,输入即可。

(PS:不知道什么是SSH Keys,普及一下:SSH keys 即 Secure Shell Keys,是为了防止任何人随意clone 或 push 代码而产生的. keys 有公匙和密匙,你在本地生成了密匙和公匙之后,把你的公匙告诉给服务器或者其他协作者,那么你就可以在他们的git版本库clone和push代码等操作.相对于一台服务器来说,一台协作者机器对应一个SSH keys.SSH有两种,一种基于口令,一种基于密钥。)

 https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 成功生成了我的key.

 https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 密钥用啥用呢,当然是连接我的项目,便于用git更新代码,就是传说的版本控制。

 连接之前,我们一定要将生成的SSH Keys添加到Github上才能认证。

         用记事本打开id_rsa.pub,将里面的一堆东西复制出来,粘贴到GitHub网站的SSH Keys中。看截图:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

     如果你通过了邮件验证你就会收到提示。

准备工作至此完成,我们可以连接我们的项目了。

4.连接我的项目                         

在Git Bash命令行上写以下语句

1 ssh -T git@github.com

却提示:Permission denied (publickey)

查了github网站的帮助信息:传送门

检查每一步到:Make sure you have a key and SSH is using it

发现使用命令:

1 ssh-add -l

提示:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

原来是私钥尚未加载,按照帮助的说法,现在需要先把私钥加载上。

使用以下命令:

1 ssh-add d:/testC#/dll/git/web/key

ps:我的私钥放在了d:/testC#/dll/git/web/文件下,文件名为key

依然提示上面的错误:Cound not open a connection to your authentication agent.

这意思不是说ssh-agent没有连接,查了很多东西,大部分是说要修改windows下的.bash_profile文件,但是我没找到,用ssh-agent bash --login -i 这个命令解决了这个问题。

1 ssh-agent bash --login -i 

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

接着重复上述步骤 添加私钥,OK。这下不报错了。

这时提示输入密码,OK,加载上了。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

再次连接试试:

1 ssh -T git@github.com

提示:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 PS:需要等待几十秒。

5.下载上传我的代码                                  

   将GitHub Pages个人文件下载到本地:

自己的git地址先看这里:

 https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 执行语句:

  flyher:账户名;blog:项目名

 或者执行:

1 git clone https://github.com/flyher/blog.git

 执行效果: 

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    这样我们发现,down下来的不是我们在github保存的代码,很奇怪,仔细一看,发现有两个分支,静态网站的代码在gh-pages中,代码在分支master中。

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    而我们现在的命令界面,什么都没有显示,也就是我们在github网站上有两个分支,而在本地却没有。

怒了,删除刚在blog文件夹下clone的所有文件。

    查看我们的状态和目前所处分支:

1 git status

命令提示:fatal:Not a git repository<or any of the parent directories>:.git
意思就是 当前文件夹中缺少 .git文件夹(PS:里面保存有分支信息),那就是我们刚才怒删了,再建一个吧。

  我们创建一下:

1  git init

看到blog文件夹下多出了一个隐藏文件夹 .git
再次输入命令查看所处分支:

1 git status

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

我们当前所处master分支,也就是和github网站上第一个分支,这样看来,之所以同步之后我们看到的是master的文件也是有原因的。

   现在先看看本地有几个分支:

1 git branch -a

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

    只有master一个分支,既然这样,我们创建一个 gh-pages 分支吧,可以和远程保持一致的嘛。

1 git symbolic-ref HEAD refs/heads/gh-pages

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 看到后面的括号显示 gh-pages

说明已经切换到 gh-pages分支上了(PS:若没有切换,建议删除.git重新玩吧)。

我们先把远程的 gh-pages 同步下来吧,因为在 上一步 我们为我们的网站选择了主题,这些源代码肯定先同步下来我们才可以在他的基础上修改的。

  输入命令:

1 git pull origin git@github.com:flyher/blog.git

居然显示错误信息
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

网上狂查(PS:此处省略一万字,真是疯了),发现真正能解决的办法,  输入命令:

1 git remote add origin git@github.com:flyher/blog.git

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

 自此同步下载:

1 git pull orgin git@github.com:flyher/blog.git

汗,依然提示错误,依然是
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

难道后面地址有问题,试着改了一下命令:

1 git pull origin gh-pages

回车之后,我们看到了gh-pages分支的源代码居然都下载下来了,欣喜:
https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

居然能够自动识别出From github.com:flyher/blog

不懂为什么它知道是这个blog中的XXX,求解.

    https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

改改代码吧,改改pgbar.html,从网上下载了一个虚拟的jquery进度条,改了改,超级好看,改好同步:

1 git add .
2 git commit -a -m "test2"
3 git push origin gh-pages

PS:

add . 添加当前目录所有的文件和文件夹,如果只想增量同步,将 . 改为自己想要同步的文件夹或者文件名就行了。

test2相当于备具,就是修改代码的原因

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

第一行是我把LICENSE删除的提示,添加上就不会报错了。

我们看看我们在github网站上的情况。

源码:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

页面:

https学习总结
https学习总结
1、https简介
[在github上搭建网站]使用Git搭建我的静态网站

至此,我们的代码可以修改同步了。发现github居然不支持Jquery???

但是为什么有时候会出现有的文件的代码合并在了一起混乱了,真心不懂什么原因.求教。

 我也是第一次使用git,文中错误在所难免,望能批评矫正。本文只是学习笔记。另外请教了两个问题,见文中红色标识的文本。