git入门-官方教程《Pro Git》简单总结

[笔记]Pro Git第二版 电子版章节来自于:https://git-scm.com/book/en/v2 中文书名精通Git(第二版)。 笔记中部分截图来源于书本电子版、runoob的Git专题、网络。 第一章:基本概念 概念图: 集中式版本管理系统(SVN) 分... 阅读详情

置顶

  1. 有必要把git整理一下了

一、起步

1. 配置

  1. 用户信息
    $ git config --global user.name "John Doe"
        $ git config --global user.email johndoe@example.com 
    
    • 远程提交时,commit的用户一定要有远程提交的权限,之前我就是这个问题,一直提交不了
  2. 文本编辑器
    git config --global core.editor "\"D:\应用程序\Sublime Text3\sublime_text.exe\""
    $ git config --global core.editor emacs/vim
    
    • 修改config文件
    //...略
    [core]
        editor = \"D:\\应用程序\\Sublime Text3\\sublime_text.exe\"
    
  3. 检查配置信息
    $ git config --list
    user.name=John Doe
    user.email=johndoe@example.com
    color.status=auto
    color.branch=auto
    color.interactive=auto
    color.diff=auto
    ...
    

2. license

在这里插入图片描述

二、git基础

1. 获取 Git 仓库

  1. 本地初始化
    //在项目目录
    git init
    git add .
    git commit -m "信息"
    
  2. 克隆现有的仓库
    • 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
    • 从github上clone项目
    git clone https://github.com/xtlvlv/Algorithm.git newname
    //newname是自定义本地仓库名,可以省略
    
    • 也可以自己在服务器搭建git,详见第四章。

2. 记录每次更新到仓库

  1. 检查当前文件状态
    git status
    git status -s   //更简洁的查看
    
  2. 跟踪新文件
    git add README
    
    • 这个也用于暂存修改
    • 若一个文件git add后,又修改了,commit时提交的是修改前的状态,必须再次git add
  3. 忽略文件
    • 创建一个名为 .gitignore 的文件,列出要忽略的文件模式。例如
    $ cat .gitignore
    *.[oa]  //忽略所有以.o或.a结尾的文件
    *~  //忽略所有~结尾的文件
    
    • 文件 .gitignore 的格式规范如下:
      • 所有空行或者以 # 开头的行都会被 Git 忽略。
      • 可以使用标准的 glob 模式匹配。
      • 匹配模式可以以(/)开头防止递归。
      • 匹配模式可以以(/)结尾指定目录。
      • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
  4. 查看已暂存和未暂存的修改
    • 当git add 后又修改了文件,git status就会显示已暂存和未暂存的文件
    • 查看都修改了哪些
    git diff
    
  5. 提交更新
    git commit  //这种方式会启动文本编辑器以便输入本次提交的说明。
    git commit -m "说明"    //简短说明,快速提交
    
  6. 跳过使用暂存区域
    git commit -a
    
    • 这种方式 Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
  7. 移除文件
    git rm README
    
  8. 移动文件
    • 改名
    git mv file_from file_to
    //等价于
    $ mv README.md README
    $ git rm README.md
    $ git add README
    

3. 查看提交历史,git log

  1. 常用
    git log
    git log -g -2
    
    • -p 用来显示每次提交的内容差异。 加上 -2 仅显示最近两次提交
  2. 每次提交的简略的统计信息,你可以使用 --stat 选项
    git log --stat
    
  3. 输出限制
    • 用时查文档吧

4. 撤消操作

  1. 重新提交
    git commit --amend
    
    • 若git commit 后没有做任何修改,执行这条命令没有改变
    • 若git commit 后修改了,执行这条命令改变之前的提交,不是重新提交,也就是只有一条提交记录
  2. 取消暂存的文件
    git reset HEAD README.md
    
    • 把 README.md 从暂存区取消,commit时就不会提交这个文件
  3. 撤消对文件的修改
    git checkout -- README.md
    
    • 可以将 README.md 还原成上次提交时的样子
    • git checkout – [file] 是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令。
    • 在 Git 中任何 已提交的 东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend 选项覆盖的提交也可以恢复。 然而,任何你未提交的东西丢失后很可能再也找不到了。

5. 远程仓库的使用,git remote

  1. 查看远程仓库
    git remote  //如果是clone下来的,至少有个origin
    $ git remote -v   //显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
    bakkdoor  https://github.com/bakkdoor/grit (fetch)
    bakkdoor  https://github.com/bakkdoor/grit (push)
    cho45     https://github.com/cho45/grit (fetch)
    cho45     https://github.com/cho45/grit (push)
    defunkt   https://github.com/defunkt/grit (fetch)
    defunkt   https://github.com/defunkt/grit (push)
    koke      git://github.com/koke/grit.git (fetch)
    koke      git://github.com/koke/grit.git (push)
    origin    git@github.com:mojombo/grit.git (fetch)
    origin    git@github.com:mojombo/grit.git (push)
    
  2. 添加远程仓库
    $ git remote add pb https://github.com/paulboone/ticgit
    $ git remote -v
    origin	https://github.com/schacon/ticgit (fetch)
    origin	https://github.com/schacon/ticgit (push)
    pb	https://github.com/paulboone/ticgit (fetch)
    pb	https://github.com/paulboone/ticgit (push)
    
    • pb 代表URL的简写
  3. 从远程仓库中抓取与拉取
    • git fetch [remote-name]
    • 这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
    $ git fetch pb
    
    • 如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。
    • git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
    • 如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull 命令来自动的抓取然后合并远程分支到当前分支。默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支)
  4. 推送到远程仓库
    • git push [remote-name] [branch-name]
    $ git push origin master    //克隆时通常会自动帮你设置好这两个名字
    
    • 只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。
    • 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
  5. 查看远程仓库
    • git remote show [remote-name]
    $ git remote show origin
    
  6. 远程仓库的移除与重命名
    • 重命名
    $ git remote rename pb paul
    $ git remote
    origin
    paul
    
    • 移除
    $ git remote rm paul
    $ git remote
    origin
    

6. 打标签,git tag

  1. 列出标签
    git tag
    
  2. 创建标签
    • 轻量标签(lightweight)
      轻量标签本质上是将提交校验和存储到一个文件中,没有保存任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字:
    $ git tag v1.4-lw
    $ git tag
    v1.4-lw
    
    • 附注标签(annotated)
      附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;
    $ git tag -a v1.4 -m 'my version 1.4'
    $ git tag
    v1.4
    //查看标签信息与对应的提交信息
    $ git show v1.4
    tag v1.4
    Tagger: Ben Straub <ben@straub.cc>
    Date:   Sat May 3 20:19:12 2014 -0700
    
    my version 1.4
    ......
    
    • 对过去的提交打标签
    //查看历史
    $ git log --pretty=oneline
    9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
    964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
    //加标签
    $ git tag -a v1.2 9fceb02
    
  3. 共享标签
    • 默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname]。
    $ git push origin v1.5
    $ git push origin --tags    //把所有不在远程仓库服务器上的标签全部传送到那里。
    
  4. 删除标签
    git tag -d v1.4-lw  //加上 -d 删除,但不会更新远程仓库的
    
    • 远程仓库移除标签
    //git push <remote> :refs/tags/<tagname>
    $ git push origin :refs/tags/v1.4-lw
    
  5. 检出标签
    $ git checkout 2.0.0
    

三、git分支

1. 分支简介

  1. 分支创建
    $ git branch testing
    
    • Git 又是怎么知道当前在哪一个分支上呢?
      它有一个名为 HEAD 的特殊指针。在 Git 中,它是一个指针,指向当前所在的本地分支(译注:将 HEAD 想象为当前分支的别名)。
  2. 分支切换
    $ git checkout testing
    
    • HEAD就会指向testing,此时做的更改是在testing分支上,HEAD一直跟着testing,切换为master的话就会回到之前的分支
  3. 查看各个分支当前所指的对象
    $ git log --oneline --decorate
    

2. 分支的新建与合并,git checkout

  1. 新建分支
    $ git checkout -b iss53
    //并将HEAD指向iss53, 等价于
    $ git branch iss53
    $ git checkout iss53
    
  2. 删除分支
    $ git branch -d hotfix
    
  3. 合并分支
    • 要先移动到被合并的分支,比如想把hotfix合并到master上,要先移动到master分支上
    $ git checkout master
    $ git merge hotfix
    
    • 不同的合并情况
      • 快进合并:master和hotfix在一条线上,只是把master往前移动到hotfix上
      • 分叉合并: master和hotfix不在一条线上,复杂一些
  4. 遇到冲突时的分支合并
    • 如果在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。
    • 若遇到冲突后,只能把冲突解决才能合并,即把连个分支都修改的某个文件,变为相同的修改

3. 分支管理,git branch

  1. 查看分支
    $ git branch
    iss53
    * master    //表示当前在这个分支上
    testing
    
  2. 查看每一个分支的最后一次提交
    $ git branch -v 
    
  3. 要查看哪些分支已经合并到当前分支
    $ git branch --merged
    iss53   //表明iss53已经合并到master,可以删除了
    * master
    
    • 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。
  4. 查看所有包含未合并工作的分支
    $ git branch --no-merged
    testing
    
    • 删除未合并的分支会失败
    $ git branch -d testing
    error: The branch 'testing' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D testing'.
    

4. 远程分支,git fetch push pull

  1. 更新远程仓库引用
    • 如果git clone之后,自己做了一些修改后commit后,本地就会领先远程分支,这时万一有其他人提交远程分支了,在clone那个节点就出现了分叉
    • 这时可以用git fetch拉去远程更新的分支,变成本地的一个分支,合并后再提交
    git fetch origin
    
  2. 推送
    • 推送到有写入权限的远程仓库
    • git push (remote) (branch)
    $ git push origin serverfix
    
    • 这里有些工作被简化了。 Git 自动将 serverfix 分支名字展开为 refs/heads/serverfix:refs/heads/serverfix,那意味着,“推送本地的 serverfix 分支来更新远程仓库上的 serverfix 分支。”
  3. 跟踪分支
    • 跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
    • 当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master 的 master 分支。
    • 创建跟踪分支
    $ git checkout -b sf origin/serverfix
    Branch sf set up to track remote branch serverfix from origin.
    Switched to a new branch 'sf'
    //现在,本地分支 sf 会自动从 origin/serverfix 拉取。
    
    • 修改正在跟踪的上游分支
    $ git branch -u origin/serverfix
    Branch serverfix set up to track remote branch serverfix from origin.
    
    1. git pull
    • git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个 git merge 命令
    • 由于 git pull 的魔法经常令人困惑所以通常单独显式地使用 fetch 与 merge 命令会更好一些。
    1. 删除远程分支
    $ git push origin --delete serverfix
    To https://github.com/schacon/simplegit
    - [deleted]         serverfix
    
    • 基本上这个命令做的只是从服务器上移除这个指针。 Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的。

5. 变基rebase

  1. 和合并merge功能一样
    • 无论是通过变基,还是通过三方合并,整合的最终结果所指向的快照始终是一样的,只不过提交历史不同罢了。 变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。
  2. 合并merge好还是变基rebase好?
    • 总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作
  3. rebase的使用
    $ git checkout experiment
    $ git rebase master
    First, rewinding head to replay your work on top of it...
    Applying: added staged command
    //先rebase,然后再合并,这里的合并只是移动指针,如果不变基就合并的话,要做的工作更多
    $ git checkout master
    $ git merge experiment
    
  4. 这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的,但它们看上去就像是串行的一样,提交历史是一条直线没有分叉。

四、服务器上的git

  • 可以自己建立git服务器,但现在用好github就行了,以后需要的时候再说

之后

  • 后面的略览了一下,使用基本的git,以上就够了,后面先不看了,有需要再说吧。
Git Pro中文版教程详解与实战 本文还有配套的精品资源,点击获取 简介:Git Pro中文版教程为中文用户提供了一个权威且实用的Git学习资源,源自***/book/zh。本教程旨在帮助用户深入理解和掌握Git的分布式版本控制功能,适合对Git感兴趣或工作中需要使用Git的读者。教程详细介绍了Git的核心概念,如仓库、提交、分支、工作区与暂存区、版本回退、远程操作、合并与解决冲突、标签、状态查询和差异对比... 阅读详情

相关推荐

Git Pro中文版--高清pdf

Git已经成为最流行的分布式版本控制系统,GitHub、优快云 CODE等提供的代码托管服务都是基于Git的,主要介绍了Git使用基础和原理,适合Git爱好者和初学者参考。

详解Git分支(Pro Git)

Git 分支 摘自 Pro git 中文版(开源中国) 3.1 何谓分支3.2 分支的新建与合并3.3 分支的管理3.4 利用分支进行开发的工作流程3.5 远程分支3.6 分支的衍合3.7 小结 几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目

Working_Harder的专栏 1272

PCB线路板的制作工艺流程分享!2021-08-21

Pcb板制作工艺流程:开料-钻孔-沉铜-压膜-曝光-显影-电铜-电锡-退膜-蚀刻-退锡-光学检测-印阻焊油-阻焊曝光、显影-字符-表面处理-成型-电测-终检-抽测-包装。具体如下:1、开料(CUT) 将原始的覆铜板切割成可以用在生产线上制作的板子过程2、钻孔 使PCB板层间产生通孔,以达到连通层间的目的。 3、沉铜 经过钻孔后的线路板在沉铜缸内会发生氧化还原反应,形成铜层对孔进行孔金属化,使原来绝缘的基材表面沉积上铜,达到层间电性相通。 4、压膜 压膜后的PCB板上面压了一层蓝色的干膜, 干膜是一个载体

jdbpcb88的博客 3246

Git 基础——《Pro Git》

在 Git 中任何已提交的东西几乎总是可以恢复的。甚至那些被删除的分支中的提交或使用--amend选项覆盖的提交也可以恢复 (阅读数据恢复了解数据恢复)。然而,任何你未提交的东西丢失后很可能再也找不到了。取消暂存文件使用撤销暂存,等价于。查看最后一次提交使用git last查看最后一次提交记录。

qq_63275583的博客 1760

从零到英雄:Spring Boot 微服务架构全攻略

在数字化转型的时代,微服务架构已成为构建可扩展、高可用系统的首选方案。本文以“从零到英雄”为主题,详细指导读者使用Spring Boot快速构建微服务帝国。从基础环境搭建入手,逐步深入到服务发现、配置管理、负载均衡、断路器、API网关、安全认证、监控与部署等核心模块。通过大量代码示例和详细解释,包括中文注释,帮助初学者和中级开发者掌握Spring Boot的核心概念和技术实践。文章强调实际操作,涵盖RESTful API开发、数据库集成、容器化部署等内容,并讨论常见问题与优化策略。无论你是Java开发者还是

一个被知识诅咒的人 2700

2025.06.25【微生物】|Emu工具安装与使用详解:全长16S扩增子微生物丰度分析

Emu是一款基于贝叶斯方法的微生物多样性分析工具,专为处理高错误率的长读长16S/18S扩增子数据优化。本文详细介绍了Emu的安装与使用方法:1)通过conda创建独立环境并安装Emu;2)提供SILVA等预构建数据库的下载指南,并说明自定义数据库的构建方法;3)演示单样本和多样本分析流程,解读关键输出文件;4)介绍丰度表合并、分类等级汇总等实用功能扩展;5)建议后续分析方向。文章还附有官方GitHub链接和相关文献资源,为微生物群落结构研究提供了一套完整的分析解决方案。

1256

MacBook Pro 安装、配置、升级 Git 详细教程与方法大全

本文详细介绍了在MacBook Pro上安装、配置和升级Git的完整指南。文章首先解释了使用Git的重要性,包括其分布式特性、高效性和丰富的分支管理功能。接着提供了三种安装方法:通过Homebrew(推荐)、官方Installer以及源码编译(高级用户)。安装完成后,文章讲解了初始配置步骤,如设置用户名、邮箱、别名和颜色高亮。还介绍了SSH Key管理方法,用于安全连接到远程仓库。对于升级Git版本,文章提供了Homebrew升级和官方Installer两种方式,并说明了如何解决多版本冲突问题。最后包含了常

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 8733

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 395

pro git 入门教程

2011年实习的时候开始接触git, 就发现了git的强大之处,以及git的迅速风靡全球。所以找了本git 的电子书给大家分享一下。下载地址: http://download.youkuaiyun.com/detail/weixingstudio/3579421 Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。 Windows下的G

Work Hard, Play Harder! 1131

BDD测试用例:Playwright的MCP Server实战

Playwright MCP Server建立了大模型和真实的浏览环境之间的桥梁,可以让大模型操作多款浏览器完成测试任务。

Criss@陈磊 450

js逆向-逆向部分技巧总结

js逆向-逆向部分技巧总结

Deng872347348的博客 2133

Pro Git --(Windows)总结

知识来源知识来源。

qq_48034474的博客 428

ORB-SLAM3编程实践指南

它基于特征点的立体视觉和视觉惯性里程计技术,能够在没有先验知识的情况下,从单目、双目或RGB-D摄像头的输入中实时构建稠密三维地图,并实现相机的定位。通过正确配置环境、准备数据集和运行ORB-SLAM3,您可以实现高效的视觉SLAM系统,并获取相机在三维空间中的位姿。其中,[path_to_vocabulary]是ORB-SLAM3的词汇文件路径,[path_to_settings]是相机参数配置文件路径,[path_to_sequence]是输入图像的路径。运行ORB-SLAM3。

ByteNinja的博客 551

Arduino Pro IDE版本控制集成:Git工作流的最佳实践教程

Arduino Pro IDE作为面向高级用户和开发者的专业集成开发环境,其强大的版本控制集成功能让Git工作流变得更加简单高效。无论您是Arduino项目的新手还是经验丰富的开发者,掌握这些最佳实践都能显著提升您的开发效率。本文将为您详细介绍如何在Arduino Pro IDE中充分利用Git进行版本控制,从基础配置到高级工作流技巧。 ## 为什么选择Arduino Pro IDE进行版本控制

gitblog_01167的博客 847

AUTOSAR进阶图解==>AUTOSAR_SWS_ADCDriver

本文深入解析了AUTOSAR ADC Driver的架构设计和技术实现。主要内容包括:1)ADC Driver在AUTOSAR分层架构中的定位及核心功能;2)详细的模块架构设计,涵盖初始化管理、组转换管理、优先级处理等核心子组件;3)全面的配置模型说明,包括主配置类、通用配置、通道配置等关键数据结构;4)状态机机制和操作序列分析。通过分层设计和标准化接口,ADC Driver实现了硬件抽象和软件解耦,提供了良好的可移植性和可维护性。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 786

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《Pro Git》第二版教程高清PDF下载介绍

《Pro Git》第二版教程高清PDF下载介绍 【下载地址】ProGit第二版教程高清PDF下载介绍 《Pro Git》第二版是Git领域的经典教程,以其权威性和易读性广受好评。本书通过清晰的讲解与丰富的图解,帮助读者深入掌握Git命令与使用技巧。提供的高清PDF版本支持多设备阅读,并配备完整目录与跳转功能,方便快速定位...

gitblog_06769的博客 374

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《Pro Git》Git 教程

https://git-scm.com/book/zh/v2

---------------- 545

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

视频教程-Ant Design Pro实战入门教程-整合版-ReactJS

Ant Design Pro实战入门教程-整合版 《Grails实战教程》系...

weixin_34065726的博客 2875

如何在应用程序中嵌入Git?Pro Git 2nd Edition集成教程

想要为你的应用程序添加版本控制功能?Git作为当今最流行的分布式版本控制系统,提供了多种在应用程序中集成Git的方法。无论你是开发文档编辑器、IDE工具还是协作平台,嵌入Git都能让你的应用获得强大的版本管理能力。本文将基于Pro Git 2nd Edition的权威内容,为你详细解析如何在应用程序中完美嵌入Git功能。🎯 ## Git集成方法概览 根据Pro Git 2nd Edition

gitblog_00625的博客 1050

Pro Git第二版完整指南:从零开始掌握Git版本控制的终极教程 [特殊字符]

想要快速学习Git版本控制并提升开发效率吗?Pro Git第二版是Git官方权威教程,为你提供从基础概念到高级技巧的完整学习路径。作为全球最流行的分布式版本控制系统,Git已经成为现代软件开发不可或缺的工具。本文将带你深入了解Pro Git第二版的核心内容,助你从Git新手成长为版本控制专家! ## 📚 什么是Git版本控制系统? Git是一个开源的**分布式版本控制系统**,由Linus

gitblog_00488的博客 529

搭建Git服务器完整教程:Pro Git 2nd Edition部署指南

想要团队协作开发项目?搭建自己的Git服务器是提升开发效率的关键一步!😊 本教程基于Pro Git 2nd Edition权威指南,带你从零开始快速搭建专业的Git服务器环境。 ## 为什么需要搭建Git服务器? 在Git协作开发中,虽然可以直接推送代码到同事的仓库,但这种方式容易造成混乱。专业的做法是**搭建一个中央Git服务器**作为协作枢纽,确保团队成员随时访问,即使某台电脑离线也不影

gitblog_00919的博客 1020

hello-git课程优惠:如何获得mouredev pro折扣码的终极指南

GitHub 加速计划的 hello-git 课程是面向零基础学习者的 Git 和 GitHub 入门教程,通过系统学习你将掌握版本控制的核心技能。本文将分享获得 mouredev pro 折扣码的独家方法,助你以更优惠的价格深入学习编程开发。 ## 📘 为什么选择 hello-git 课程? hello-git 课程由 GitHub Star 开发者 mouredev 精心打造,已帮助数千

gitblog_01104的博客 717

Pro Git 第二版 简体中文资源下载

Pro Git 第二版 简体中文资源下载 【下载地址】ProGit第二版简体中文资源下载 《Pro Git 第二版 简体中文》是一本全面且深入的Git版本控制系统教程,适合所有层次的学习者。无论你是Git新手还是进阶用户,都能从这本书中获取有价值的知识。第二版在第一版的基础上进行了更新和完善,内容涵盖Git的基本概念、使...

gitblog_06794的博客 653

Git SCM 项目教程

Git SCM 项目教程 1. 项目介绍 Git SCM 项目是一个用于托管 Git 版本控制系统官方网站的代码库。该网站旨在为新用户提供一个了解和下载 Git 的入口,同时也为现有用户提供文档和社区支持。Git 是一个分布式版本控制系统,广泛用于软件开发中,帮助开发者管理和跟踪代码的变化。 2. 项目快速启动 2.1 克隆项目 首先,使用 git clone 命令克隆项目到本地: git clo...

gitblog_00044的博客 543

Sequel Pro 开源项目教程

Sequel Pro 开源项目教程 Sequel Pro 是一个专为 macOS 设计的快速、易用的数据库管理应用,支持 MySQL 和 MariaDB 数据库操作。本教程基于 https://github.com/rainglow/sequel-pro.git 提供的资源,详细介绍其核心结构、启动机制以及配置相关知识。 1. 项目的目录结构及介绍 Sequel Pro 的项目目录层次清晰,主要包...

gitblog_01096的博客 913
上一篇: 48.muduo学习笔记之example_聊天服务器例子
下一篇: nginx+uwsgi启动和关闭
PartnerLv
博客等级 码龄10年 338粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值