Git教程

Size: px
Start display at page:

Download "Git教程"

Transcription

1 Git 教程 Git 教程 By 廖雪峰 史上最浅显易懂的 Git 教程! 为什么要编写这个教程? 因为我在学习 Git 的过程中, 买过书, 也在 网上 Google 了 一堆 Git 相关的 文章和教程, 但令 人失望的是, 这些教程不是难得令 人发指, 就是简单得 一笔带过, 或者, 只 支离破碎地介绍 Git 的某 几个命令, 还有直接从 Git 手册粘贴帮助 文档的, 总之, 初学者很难找到 一个由浅 入深, 学完后能 立刻上 手的 Git 教程 既然号称史上最浅显易懂的 Git 教程, 那这个教程有什么让你怦然 心动的特点呢? 首先, 本教程绝对 面向初学者, 没有接触过版本控制概念的读者也可以轻松 入 门, 不必担 心起步难度 ; 其次, 本教程实 用性超强, 边学边练, 一点也不觉得枯燥 而且, 你所学的 Git 命令是 充分且必要 的, 掌握了这些东 西, 你就可以通过 Git 轻松地完成你的 工作 文字 + 图 片还看不明 白? 有视频!!! 本教程只会让你成为 Git 用户, 不会让你成为 Git 专家 很多 Git 命令只有那些专家才明 白 ( 事实上我也不明 白, 因为我不是 Git 专家 ), 但我保证这些命令可能你 一辈 子都不会 用到 既然 Git 是 一个 工具, 就没必要把时间浪费在那些 高级 但 几乎永远不会 用到的命令上 一旦你真的 非 用不可了, 到时候再 自 行 Google 或者请教专家也未迟 如果你是 一个开发 人员, 想 用上这个世界上 目前最先进的分布式版本控制系统, 那么, 赶快开始学习吧! 关于作者 廖雪峰, 十年软件开发经验, 业余产品经理, 精通 Java/Python/Ruby/Visual Basic/ Objective C 等, 对开源框架有深 入研究, 著有 Spring 2.0 核 心技术与最佳实践 一书, 多个业余开源项 目托管在 GitHub, 欢迎微博交流 :@ 廖雪峰

2 Git 简介! 5 Git 的诞 生! 7 集中式 vs 分布式! 8 安装 Git! 10 在 Linux 上安装 Git! 11 在 Mac OS X 上安装 Git! 12 在 Windows 上安装 Git! 13 创建版本库! 14 把 文件添加到版本库! 14 小结! 16 时光机穿梭! 17 小结! 18 版本回退! 19 小结! 22 工作区和暂存区! 24 小结! 27 管理修改! 28 小结! 29 撤销修改! 30 小结! 32 删除 文件! 33 远程仓库! 35 小结! 37 添加远程库! 38 小结! 40 从远程库克隆! 41 小结! 42

3 分 支管理! 43 创建与合并分 支! 44 小结! 47 解决冲突! 49 小结! 51 分 支管理策略! 53 分 支策略! 54 小结! 54 Bug 分 支! 55 小结! 57 Feature 分 支! 58 小结! 59 多 人协作! 60 小结! 63 标签管理! 64 创建标签! 65 小结! 67 操作标签! 68 小结! 68 使 用GitHub! 69 小结! 69 自定义 Git! 70 忽略特殊 文件! 71 小结! 72 配置别名! 73 小结! 74 搭建 Git 服务器! 75

4 期末总结! 77

5 Git 简介 Git 是什么? Git 是 目前世界上最先进的分布式版本控制系统 ( 没有之 一 ) Git 有什么特点? 简单来说就是 : 高端 大 气上档次! 那什么是版本控制系统? 如果你 用 Microsoft Word 写过 长篇 大论, 那你 一定有这样的经历 : 想删除 一个段落, 又怕将来想恢复找不回来怎么办? 有办法, 先把当前 文件 另存为 一个新的 Word 文件, 再接着改, 改到 一定程度, 再 另存为 一个新 文件, 这样 一直改下去, 最后你的 Word 文档变成了这样 : 过了 一周, 你想找回被删除的 文字, 但是已经记不清删除前保存在哪个 文件 里了, 只好 一个 一个 文件去找, 真 麻烦 看着 一堆乱七 八糟的 文件, 想保留最新的 一个, 然后把其他的删掉, 又怕哪天会 用上, 还不敢删, 真郁闷 更要命的是, 有些部分需要你的财务同事帮助填写, 于是你把 文件 Copy 到 U 盘 里给她 ( 也可能通过 发送 一份给她 ), 然后, 你继续修改 Word 文件 一天后, 同事再把 Word 文件传给你, 此时, 你必须想想, 发给她之后到你收到她的 文件期间, 你作了哪些改动, 得把你的改动和她的部分合并, 真困难 于是你想, 如果有 一个软件, 不但能 自动帮我记录每次 文件的改动, 还可以让同事协作编辑, 这样就不 用 自 己管理 一堆类似的 文件了, 也不需要把 文件传来传去 如果想查看某次改动, 只需要在软件 里瞄 一眼就可以, 岂不是很 方便? 这个软件 用起来就应该像这个样 子, 能记录每次 文件的改动 :

6 版本 用户 说明 日期 1 张三 删除了软件服务条款 5 7/12 10:38 2 张三 增加了 License 人数限制 7/12 18:09 3 李四 财务部门调整了合同金额 7/13 9:51 4 张三 延长了免费升级周期 7/14 15:17 这样, 你就结束了 手动管理多个 版本 的史前时代, 进 入到版本控制的 20 世纪

7 Git 的诞 生 很多 人都知道,Linus 在 1991 年创建了开源的 Linux, 从此,Linux 系统不断发展, 已经成为最 大的服务器系统软件了 Linus 虽然创建了 Linux, 但 Linux 的壮 大是靠全世界热 心的志愿者参与的, 这么多 人在世界各地为 Linux 编写代码, 那 Linux 的代码是如何管理的呢? 事实是, 在 2002 年以前, 世界各地的志愿者把源代码 文件通过 diff 的 方式发给 Linus, 然后由 Linus 本 人通过 手 工 方式合并代码! 你也许会想, 为什么 Linus 不把 Linux 代码放到版本控制系统 里呢? 不是有 CVS SVN 这些免费的版本控制系统吗? 因为 Linus 坚定地反对 CVS 和 SVN, 这些集中式的版本控制系统不但速度慢, 而且必须联 网才能使 用 有 一些商 用的版本控制系统, 虽然 比 CVS SVN 好 用, 但那是付费的, 和 Linux 的开源精神不符 不过, 到了 2002 年,Linux 系统已经发展了 十年了, 代码库之 大让 Linus 很难继续通过 手 工 方式管理了, 社区的弟兄们也对这种 方式表达了强烈不满, 于是 Linus 选择了 一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于 人道主义精神, 授权 Linux 社区免费使 用这个版本控制系统 安定团结的 大好局 面在 2005 年就被打破了, 原因是 Linux 社区 牛 人聚集, 不免沾染了 一些梁 山好汉的江湖习 气 开发 Samba 的 Andrew 试图破解 BitKeeper 的协议 ( 这么干的其实也不只他 一个 ), 被 BitMover 公司发现了 ( 监控 工作做得不错!), 于是 BitMover 公司怒了, 要收回 Linux 社区的免费使 用权 Linus 可以向 BitMover 公司道个歉, 保证以后严格管教弟兄们, 嗯, 这是不可能的 实际情况是这样的 : Linus 花了两周时间 自 己 用 C 写了 一个分布式版本控制系统, 这就是 Git! 一个月之内,Linux 系统的源码已经由 Git 管理了! 牛是怎么定义的呢? 大家可以体会 一下 Git 迅速成为最流 行的分布式版本控制系统, 尤其是 2008 年,GitHub 网站上线了, 它为开源项 目免费提供 Git 存储, 无数开源项 目开始迁移 至 GitHub, 包括 jquery,php,ruby 等等 历史就是这么偶然, 如果不是当年 BitMover 公司威胁 Linux 社区, 可能现在我们就没有免费 而超级好 用的 Git 了

8 集中式 vs 分布式 Linus 一直痛恨的 CVS 及 SVN 都是集中式的版本控制系统, 而 Git 是分布式版本控制系统, 集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统, 版本库是集中存放在中央服务器的, 而干活的时候, 用的都是 自 己的电脑, 所以要先从中央服务器取得最新的版本, 然后开始干活, 干完活了, 再把 自 己的活推送给中央服务器 中央服务器就好 比是 一个图书馆, 你要改 一本书, 必须先从图书馆借出来, 然后回到家 自 己改, 改完了, 再放回图书馆 集中式版本控制系统最 大的 毛病就是必须联 网才能 工作, 如果在局域 网内还好, 带宽够 大, 速度够快, 可如果在互联 网上, 遇到 网速慢的话, 可能提交 一个 10M 的 文件就需要 5 分钟, 这还不得把 人给憋死啊 那分布式版本控制系统与集中式版本控制系统有何不同呢? 首先, 分布式版本控制系统根本没有 中央服务器, 每个 人的电脑上都是 一个完整的版本库, 这样, 你 工作的时候, 就不需要联 网了, 因为版本库就在你 自 己的电脑上 既然每个 人电脑上都有 一个完整的版本库, 那多个 人如何协作呢? 比 方说你在 自 己电脑上改了 文件 A, 你的同事也在他的电脑上改了 文件 A, 这时, 你们俩之间只需把各 自的修改推送给对 方, 就可以互相看到对 方的修改了 和集中式版本控制系统相 比, 分布式版本控制系统的安全性要 高很多, 因为每个 人电脑 里都有完整的版本库, 某 一个 人的电脑坏掉了不要紧, 随便从其他 人那 里复制 一个就可以了 而集中式版本控制系统的中央服务器要是出了问题, 所有 人都没法干活了 在实际使 用分布式版本控制系统的时候, 其实很少在两 人之间的电脑上推送版本库的修改, 因为可能你们俩不在 一个局域 网内, 两台电脑互相访问不了, 也可能今天你的同事病了, 他的电脑压根没有开机 因此, 分布式版本控制系统通常也有 一台充当 中央服务器 的电脑, 但这个服务器的作 用仅仅是 用来 方便 交换 大家的修改, 没有它 大家也 一样干活, 只是交换修改不 方便 而已

9 当然,Git 的优势不单是不必联 网这么简单, 后 面我们还会看到 Git 极其强 大的分 支管理, 把 SVN 等远远抛在了后 面 CVS 作为最早的开源 而且免费的集中式版本控制系统, 直到现在还有不少 人在 用 由于 CVS 自 身设计的问题, 会造成提交 文件不完整, 版本库莫名其妙损坏的情况 同样是开源 而且免费的 SVN 修正了 CVS 的 一些稳定性问题, 是 目前 用得最多的集中式版本库控制系统 除了免费的外, 还有收费的集中式版本控制系统, 比如 IBM 的 ClearCase( 以前是 Rational 公司的, 被 IBM 收购了 ), 特点是安装 比 Windows 还 大, 运 行 比蜗 牛还慢, 能 用 ClearCase 的 一般是世界 500 强, 他们有个共同的特点是财 大 气粗, 或者 人傻钱多 微软 自 己也有 一个集中式版本控制系统叫 VSS, 集成在 Visual Studio 中 由于其反 人类的设计, 连微软 自 己都不好意思 用了 分布式版本控制系统除了 Git 以及促使 Git 诞 生的 BitKeeper 外, 还有类似 Git 的 Mercurial 和 Bazaar 等 这些分布式版本控制系统各有特点, 但最快 最简单也最流 行的依然是 Git!

10 安装 Git 最早 Git 是在 Linux 上开发的, 很 长 一段时间内,Git 也只能在 Linux 和 Unix 系统上跑 不过, 慢慢地有 人把它移植到了 Windows 上 现在,Git 可以在 Linux Unix Mac 和 Windows 这 几 大平台上正常运 行了 要使 用 Git, 第 一步当然是安装 Git 了 根据你当前使 用的平台来阅读下 面的 文字 :

11 在 Linux 上安装 Git 首先, 你可以试着输 入 git, 看看系统有没有安装 Git: $ git The program 'git' is currently not installed. You can install it by typing: $ sudo apt-get install git 像上 面的命令, 有很多 Linux 会友好地告诉你 Git 没有安装, 还会告诉你如何安装 Git 如果你碰巧 用 Debian 或 Ubuntu Linux, 通过 一条 sudo apt-get install git 就可以直接完成 Git 的安装, 非常简单 老 一点的 Debian 或 Ubuntu Linux, 要把命令改为 sudo apt-get install git-core, 因为以前有个软件也叫 GIT(GNU Interactive Tools), 结果 Git 就只能叫 git-core 了 由于 Git 名 气实在太 大, 后来就把 GNU Interactive Tools 改成 gnuit,git-core 正式改为 git 如果是其他 Linux 版本, 可以直接通过源码安装 先从 Git 官 网下载源码, 然后解压, 依次输 入 :./config,make,sudo make install 这 几个命令安装就好了

12 在 Mac OS X 上安装 Git 如果你正在使 用 Mac 做开发, 有两种安装 Git 的 方法 一是安装 homebrew, 然后通过 homebrew 安装 Git, 具体 方法请参考 homebrew 的 文档 : 第 二种 方法更简单, 也是推荐的 方法, 就是直接从 AppStore 安装 Xcode,Xcode 集成了 Git, 不过默认没有安装, 你需要运 行 Xcode, 选择菜单 Xcode -> Preferences, 在弹出窗 口中找到 Downloads, 选择 Command Line Tools, 点 Install 就可以完成安装了 Xcode 是 Apple 官 方 IDE, 功能 非常强 大, 是开发 Mac 和 ios App 的必选装备, 而且是免费的!

13 在 Windows 上安装 Git 实话实说,Windows 是最烂的开发平台, 如果不是开发 Windows 游戏或者在 IE 里调试 页 面, 一般不推荐 用 Windows 不过, 既然已经上了微软的贼船, 也是有办法安装 Git 的 Windows 下要使 用很多 Linux/Unix 的 工具时, 需要 Cygwin 这样的模拟环境,Git 也 一样 Cygwin 的安装和配置都 比较复杂, 就不建议你折腾了 不过, 有 高 人已经把模拟环境和 Git 都打包好了, 名叫 msysgit, 只需要下载 一个单独的 exe 安装程序, 其他什么也不 用装, 绝对好 用 msysgit 是 Windows 版的 Git, 从 下载, 然后按默认选项安装即可 安装完成后, 在开始菜单 里找到 Git -> Git Bash, 蹦出 一个类似命令 行窗 口的东 西, 就说明 Git 安装成功! 安装完成后, 还需要最后 一步设置, 在命令 行输 入 : $ git config --global user.name "Your Name" $ git config --global user. " @example.com" 因为 Git 是分布式版本控制系统, 所以, 每个机器都必须 自报家 门 : 你的名字和 地址 你也许会担 心, 如果有 人故意冒充别 人怎么办? 这个不必担 心, 首先我们相信 大家都是善良 无知的群众, 其次, 真的有冒充的也是有办法可查的 注意 git config 命令的 --global 参数, 用了这个参数, 表 示你这台机器上所有的 Git 仓库都会使 用这个配置, 当然也可以对某个仓库指定不同的 用户名和 地址

14 创建版本库 什么是版本库呢? 版本库 又名仓库, 英 文名 repository, 你可以简单理解成 一个 目录, 这个 目录 里 面的所有 文件都可以被 Git 管理起来, 每个 文件的修改 删除,Git 都能跟踪, 以便任何时刻都可以追踪历史, 或者在将来某个时刻可以 还原 所以, 创建 一个版本库 非常简单, 首先, 选择 一个合适的地 方, 创建 一个空 目录 : $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit pwd 命令 用于显 示当前 目录 在我的 Mac 上, 这个仓库位于 /Users/michael/learngit 如果你使 用 Windows 系统, 为了避免遇到各种莫名其妙的问题, 请确保 目录名 ( 包括 父 目录 ) 不包含中 文 第 二步, 通过 git init 命令把这个 目录变成 Git 可以管理的仓库 : $ git init Initialized empty Git repository in /Users/michael/learngit/.git/ 瞬间 Git 就把仓库建好了, 而且告诉你是 一个空的仓库 (empty Git repository), 细 心的读者可以发现当前 目录下多了 一个.git 的 目录, 这个 目录是 Git 来跟踪管理版本库的, 没事千万不要 手动修改这个 目录 里 面的 文件, 不然改乱了, 就把 Git 仓库给破坏了 也不 一定必须在空 目录下创建 Git 仓库, 选择 一个已经有东 西的 目录也是可以的 不过, 不建议你使 用 自 己正在开发的公司项 目来学习 Git, 否则造成的 一切后果概不负责 把 文件添加到版本库 首先这 里再明确 一下, 所有的版本控制系统, 其实只能跟踪 文本 文件的改动, 比如 TXT 文件, 网 页, 所有的程序代码等等,Git 也不例外 版本控制系统可以告诉你每次的改动, 比如在第 5 行加了 一个单词 Linux, 在第 8 行删了 一个单词 Windows 而图 片 视频这些 二进制 文件, 虽然也能由版本控制系统管理, 但没法跟踪 文件的变化, 只能把 二进制 文件每次改动串起来, 也就是只知道图 片从 100KB 改成了 120KB, 但到底改了啥, 版本控制系统不知道, 也没法知道 不幸的是,Microsoft 的 Word 格式是 二进制格式, 因此, 版本控制系统是没法跟踪 Word 文件的改动的, 前 面我们举的例 子只是为了演 示, 如果要真正使 用版本控制系统, 就要以纯 文本 方式编写 文件 因为 文本是有编码的, 比如中 文有常 用的 GBK 编码, 日 文有 Shift_JIS 编码, 如果没有历史遗留问题, 强烈建议使 用标准的 UTF-8 编码, 所有语 言使 用同 一种编码, 既没有冲突, 又被所有平台所 支持 使用 Windows 的童鞋要特别注意 : 千万不要使 用 Windows 自带的记事本编辑任何 文本 文件 原因是 Microsoft 开发记事本的团队使 用了 一个 非常弱智的 行为来保存 UTF-8 编码的 文件, 他们 自作聪明地在每个 文件开头添加了 0xefbbbf( 十六进制 ) 的字符, 你会遇到很多不可思议的问题, 比如, 网 页第 一 行可能会显 示 一个?, 明明正确的程序 一编译就报语法错误, 等等, 都是由记事本的弱智 行为带来的 建议你下载 Notepad++ 代替记事本, 不但功能强 大, 而且免费! 记得把 Notepad++ 的默认编码设置为 UTF-8 without BOM 即可 :

15 言归正传, 现在我们编写 一个 readme.txt 文件, 内容如下 : Git is a version control system. Git is free software. 一定要放到 learngit 目录下 ( 子 目录也 行 ), 因为这是 一个 Git 仓库, 放到其他地 方 Git 再厉害也找不到这个 文件 和把 大象放到冰箱需要 3 步相 比, 把 一个 文件放到 Git 仓库只需要两步 第 一步, 用命令 git add 告诉 Git, 把 文件添加到仓库 : $ git add readme.txt 执 行上 面的命令, 没有任何显 示, 这就对了,Unix 的哲学是 没有消息就是好消息, 说明添加成功 第 二步, 用命令 git commit 告诉 Git, 把 文件提交到仓库 : $ git commit -m "wrote a readme file" [master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode readme.txt 简单解释 一下 git commit 命令,-m 后 面输 入的是本次提交的说明, 可以输 入任意内容, 当然最好是有意义的, 这样你就能从历史记录 里 方便地找到改动记录 嫌 麻烦不想输 入 -m "xxx" 行不 行? 确实有办法可以这么干, 但是强烈不建议你这么干, 因为输 入说明对 自 己对别 人阅读都很重要 实在不想输 入说明的童鞋请 自 行 Google, 我不告诉你这个参数 git commit 命令执 行成功后会告诉你,1 个 文件被改动 ( 我们新添加的 readme.txt 文件 ), 插 入了两 行内容 (readme.txt 有两 行内容 )

16 为什么 Git 添加 文件需要 add,commit 一共两步呢? 因为 commit 可以 一次提交很多 文件, 所以你可以多次 add 不同的 文件, 比如 : $ git add file1.txt $ git add file2.txt $ git add file3.txt $ git commit -m "add 3 files." 小结 现在总结 一下今天学的两点内容 : 初始化 一个 Git 仓库, 使 用 git init 命令 添加 文件到 Git 仓库, 分两步 : 第 一步, 使 用命令 git add, 注意, 可反复多次使 用, 添加多个 文件 ; 第 二步, 使 用命令 git commit, 完成 Git 教程 By 廖雪峰

17 时光机穿梭 我们已经成功地添加并提交了 一个 readme.txt 文件, 现在, 是时候继续 工作了, 于是, 我们继续修改 readme.txt 文件, 改成如下内容 : Git is a distributed version control system. Git is free software. 现在, 运 行 git status 命令看看结果 : $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # no changes added to commit (use "git add" and/or "git commit -a") git status 命令可以让我们时刻掌握仓库当前的状态, 上 面的命令告诉我们,readme.txt 被修改过了, 但还没有准备提交的修改 虽然 Git 告诉我们 readme.txt 被修改了, 但如果能看看具体修改了什么内容, 自然是很好的 比如你休假两周从国外回来, 第 一天上班时, 已经记不清上次怎么修改的 readme.txt, 所以, 需要 用 git diff 这个命令看看 : $ git diff readme.txt diff --git a/readme.txt b/readme.txt index 46d49bf..9247db a/readme.txt ,2 -Git is a version control system. +Git is a distributed version control system. Git is free software. git diff 顾名思义就是查看 difference, 显 示的格式正是 Unix 通 用的 diff 格式, 可以从上 面的命令输出看到, 我们在第 一 行添加了 一个 distributed 单词 知道了对 readme.txt 作了什么修改后, 再把它提交到仓库就放 心多了, 提交修改和提交新 文件是 一样的两步, 第 一步是 git add: $ git add readme.txt 同样没有任何输出 在执 行第 二步 git commit 之前, 我们再运 行 git status 看看当前仓库的状态 : $ git status # On branch master

18 # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: readme.txt # git status 告诉我们, 将要被提交的修改包括 readme.txt, 下 一步, 就可以放 心地提交了 : $ git commit -m "add distributed" [master ea34578] add distributed 1 file changed, 1 insertion(+), 1 deletion(-) 提交后, 我们再 用 git status 命令看看仓库的当前状态 : $ git status # On branch master nothing to commit (working directory clean) Git 告诉我们当前没有需要提交的修改, 而且, 工作 目录是干净 (working directory clean) 的 小结 Git 教程 By 廖雪峰 要随时掌握 工作区的状态, 使 用 git status 命令 如果 git status 告诉你有 文件被修改过, 用 git diff 可以查看修改内容

19 版本回退 现在, 你已经学会了修改 文件, 然后把修改提交到 Git 版本库, 现在, 再练习 一次, 修改 readme.txt 文件如下 : Git is a distributed version control system. Git is free software distributed under the GPL. 然后尝试提交 : $ git add readme.txt $ git commit -m "append GPL" [master ] append GPL 1 file changed, 1 insertion(+), 1 deletion(-) 像这样, 你不断对 文件进 行修改, 然后不断提交修改到版本库 里, 就好 比玩 RPG 游戏时, 每通过 一关就会 自动把游戏状态存盘, 如果某 一关没过去, 你还可以选择读取前 一关的状态 有些时候, 在打 Boss 之前, 你会 手动存盘, 以便万 一打 Boss 失败了, 可以从最近的地 方重新开始 Git 也是 一样, 每当你觉得 文件修改到 一定程度的时候, 就可以 保存 一个快照, 这个快照在 Git 中被称为 commit 一旦你把 文件改乱了, 或者误删了 文件, 还可以从最近的 一个 commit 恢复, 然后继续 工作, 而不是把 几个月的 工作成果全部丢失 现在, 我们回顾 一下 readme.txt 文件 一共有 几个版本被提交到 Git 仓库 里了 : 版本 1:wrote a readme file Git is a version control system. Git is free software. 版本 2:add distributed Git is a distributed version control system. Git is free software. 版本 3:append GPL Git is a distributed version control system. Git is free software distributed under the GPL. 当然了, 在实际 工作中, 我们脑 子 里怎么可能记得 一个 几千 行的 文件每次都改了什么内容, 不然要版本控制系统干什么 版本控制系统肯定有某个命令可以告诉我们历史记录, 在 Git 中, 我们 用 git log 命令查看 : $ git log commit fb26d f8f31179f24e0882e1e0 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 15:11: append GPL commit ea34578d5496d7dd233c827ed32a8cd576c5ee85 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 14:53:

20 add distributed commit cb926e7ea50ad11b8f9e909c bf Author: Michael Liao Date: Mon Aug 19 17:51: wrote a readme file git log 命令显 示从最近到最远的提交 日志, 我们可以看到 3 次提交, 最近的 一次是 append GPL, 上 一次是 add distributed, 最早的 一次是 wrote a readme file 如果嫌输出信息太多, 看得眼花缭乱的, 可以试试加上 --pretty=oneline 参数 : $ git log --pretty=oneline fb26d f8f31179f24e0882e1e0 append GPL ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed cb926e7ea50ad11b8f9e909c bf wrote a readme file 需要友情提 示的是, 你看到的 一 大串类似 e1e0 的是 commit id( 版本号 ), 和 SVN 不 一样,Git 的 commit id 不是 1,2,3 递增的数字, 而是 一个 SHA1 计算出来的 一个 非常 大的数字, 用 十六进制表 示, 而且你看到的 commit id 和我的肯定不 一样, 以你 自 己的为准 为什么 commit id 需要 用这么 一 大串数字表 示呢? 因为 Git 是分布式的版本控制系统, 后 面我们还要研究多 人在同 一个版本库 里 工作, 如果 大家都 用 1,2,3 作为版本号, 那肯定就冲突了 每提交 一个新版本, 实际上 Git 就会把它们 自动串成 一条时间线 如果使 用可视化 工具查看 Git 历史, 就可以更清楚地看到提交历史的时间线 : 好了, 现在我们启动时光穿梭机, 准备把 readme.txt 回退到上 一个版本, 也就是 add distributed 的那个版本, 怎么做呢? 首先,Git 必须知道当前版本是哪个版本, 在 Git 中, 用 HEAD 表 示当前版本, 也就是最新的提交 e1e0 ( 注意我的提交 ID 和你的肯定不 一样 ), 上 一个版本就是 HEAD^, 上上 一个版本就是 HEAD^^, 当然往上 100 个版本写 100 个 ^ 比较容易数不过来, 所以写成 HEAD~100 现在, 我们要把当前版本 append GPL 回退到上 一个版本 add distributed, 就可以使 用 git reset 命令 : $ git reset --hard HEAD^

21 HEAD is now at ea34578 add distributed --hard 参数有啥意义? 这个后 面再讲, 现在你先放 心使 用 看看 readme.txt 的内容是不是版本 add distributed : $ cat readme.txt Git is a distributed version control system. Git is free software. 果然 还可以继续回退到上 一个版本 wrote a readme file, 不过且慢, 然我们 用 git log 再看看现在版本库的状态 : $ git log commit ea34578d5496d7dd233c827ed32a8cd576c5ee85 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 14:53: add distributed commit cb926e7ea50ad11b8f9e909c bf Author: Michael Liao <askxuefeng@gmail.com> Date: Mon Aug 19 17:51: wrote a readme file 最新的那个版本 append GPL 已经看不到了! 好 比你从 21 世纪坐时光穿梭机来到了 19 世纪, 想再回去已经回不去了, 肿么办? 办法其实还是有的, 只要上 面的命令 行窗 口还没有被关掉, 你就可以顺着往上找啊找啊, 找到那个 append GPL 的 commit id 是 , 于是就可以指定回到未来的某个版本 : $ git reset --hard HEAD is now at append GPL 版本号没必要写全, 前 几位就可以了,Git 会 自动去找 当然也不能只写前 一两位, 因为 Git 可能会找到多个版本号, 就 无法确定是哪 一个了 再 小 心翼翼地看看 readme.txt 的内容 : $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. 果然, 我胡汉 山 又回来了 Git 教程 By 廖雪峰 Git 的版本回退速度 非常快, 因为 Git 在内部有个指向当前版本的 HEAD 指针, 当你回退版本的时候,Git 仅仅是把 HEAD 从指向 append GPL :

22 改为指向 add distributed : 然后顺便把 工作区的 文件更新了 所以你让 HEAD 指向哪个版本号, 你就把当前版本定位在哪 现在, 你回退到了某个版本, 关掉了电脑, 第 二天早上就后悔了, 想恢复到新版本怎么办? 找不到新版本的 commit id 怎么办? 在 Git 中, 总是有后悔药可以吃的 当你 用 $ git reset --hard HEAD^ 回退到 add distributed 版本时, 再想恢复到 append GPL, 就必须找到 append GPL 的 commit id Git 提供了 一个命令 git reflog 用来记录你的每 一次命令 : $ git reflog ea34578 HEAD@{0}: reset: moving to HEAD^ HEAD@{1}: commit: append GPL ea34578 HEAD@{2}: commit: add distributed cb926e7 HEAD@{3}: commit (initial): wrote a readme file 终于舒了 口 气, 第 二 行显 示 append GPL 的 commit id 是 , 现在, 你 又可以乘坐时光机回到未来了 小结 现在总结 一下 : HEAD 指向的版本就是当前版本, 因此,Git 允许我们在版本的历史之间穿梭, 使 用命令 git reset --hard commit_id

23 穿梭前, 用 git log 可以查看提交历史, 以便确定要回退到哪个版本 要重返未来, 用 git reflog 查看命令历史, 以便确定要回到未来的哪个版本

24 工作区和暂存区 Git 和其他版本控制系统如 SVN 的 一个不同之处就是有暂存区的概念 先来看名词解释 工作区 (Working Directory): 就是你在电脑 里能看到的 目录, 比如我的 learngit 文件夹就是 一个 工作区 : 版本库 (Repository): 工作区有 一个隐藏 目录.git, 这个不算 工作区, 而是 Git 的版本库 Git 的版本库 里存了很多东 西, 其中最重要的就是称为 stage( 或者叫 index) 的暂存区, 还有 Git 为我们 自动创建的第 一个分 支 master, 以及指向 master 的 一个指针叫 HEAD

25 分 支和 HEAD 的概念我们以后再讲 前 面讲了我们把 文件往 Git 版本库 里添加的时候, 是分两步执 行的 : 第 一步是 用 git add 把 文件添加进去, 实际上就是把 文件修改添加到暂存区 ; 第 二步是 用 git commit 提交更改, 实际上就是把暂存区的所有内容提交到当前分 支 因为我们创建 Git 版本库时,Git 自动为我们创建了唯 一 一个 master 分 支, 所以, 现在, commit 就是往 master 分 支上提交更改 你可以简单理解为, 需要提交的 文件修改通通放到暂存区, 然后, 一次性提交暂存区的所有修改 俗话说, 实践出真知 现在, 我们再练习 一遍, 先对 readme.txt 做个修改, 比如加上 一 行内容 : Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. 然后, 在 工作区新增 一个 LICENSE 文本 文件 ( 内容随便写 ) 先 用 git status 查看 一下状态 : $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # # Untracked files: # (use "git add <file>..." to include in what will be committed)

26 # # LICENSE no changes added to commit (use "git add" and/or "git commit -a") Git 非常清楚地告诉我们,readme.txt 被修改了, 而 LICENSE 还从来没有被添加过, 所以它的状态是 Untracked 现在, 使 用两次命令 git add, 把 readme.txt 和 LICENSE 都添加后, 用 git status 再查看 一下 : $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: LICENSE # modified: readme.txt # 现在, 暂存区的状态就变成这样了 : Git 教程 By 廖雪峰 所以,git add 命令实际上就是把要提交的所有修改放到暂存区 (Stage), 然后, 执 行 git commit 就可以 一次性把暂存区的所有修改提交到分 支 $ git commit -m "understand how stage works" [master 27c9860] understand how stage works 2 files changed, 675 insertions(+) create mode LICENSE 一旦提交后, 如果你 又没有对 工作区做任何修改, 那么 工作区就是 干净 的 : $ git status # On branch master nothing to commit (working directory clean)

27 现在版本库变成了这样, 暂存区就没有任何内容了 : 小结 暂存区是 Git 非常重要的概念, 弄明 白了暂存区, 就弄明 白了 Git 的很多操作到底干了什么 没弄明 白暂存区是怎么回事的童鞋, 请向上滚动 页 面, 再看 一次

28 管理修改 现在, 假定你已经完全掌握了暂存区的概念 下 面, 我们要讨论的就是, 为什么 Git 比其他版本控制系统设计得优秀, 因为 Git 跟踪并管理的是修改, 而 非 文件 你会问, 什么是修改? 比如你新增了 一 行, 这就是 一个修改, 删除了 一 行, 也是 一个修改, 更改了某些字符, 也是 一个修改, 删了 一些 又加了 一些, 也是 一个修改, 甚 至创建 一个新 文件, 也算 一个修改 为什么说 Git 管理的是修改, 而不是 文件呢? 我们还是做实验 第 一步, 对 readme.txt 做 一个修改, 比如加 一 行内容 : $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes. 然后, 添加 : $ git add readme.txt $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: readme.txt # 然后, 再修改 readme.txt: $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. 提交 : $ git commit -m "git tracks changes" [master d4f25b6] git tracks changes 1 file changed, 1 insertion(+) 提交后, 再看看状态 : $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt

29 # no changes added to commit (use "git add" and/or "git commit -a") 咦, 怎么第 二次的修改没有被提交? 别激动, 我们回顾 一下操作过程 : 第 一次修改 -> git add -> 第 二次修改 -> git commit 你看, 我们前 面讲了,Git 管理的是修改, 当你 用 git add 命令后, 在 工作区的第 一次修改被放 入暂存区, 准备提交, 但是, 在 工作区的第 二次修改并没有放 入暂存区, 所以, git commit 只负责把暂存区的修改提交了, 也就是第 一次的修改被提交了, 第 二次的修改不会被提交 提交后, 用 git diff HEAD -- readme.txt 命令可以查看 工作区和版本库 里 面最新版本的区别 : $ git diff HEAD -- readme.txt diff --git a/readme.txt b/readme.txt index 76d770f..a9c a/readme.txt ,4 Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. -Git tracks changes. +Git tracks changes of files. 可 见, 第 二次修改确实没有被提交 那怎么提交第 二次修改呢? 你可以继续 add 再 commit, 也可以别着急提交第 一次修改, 先 add 第 二次修改, 再 commit, 就相当于把两次修改合并后 一块提交了 : 第 一次修改 -> add -> 第 二次修改 -> add -> commit 好, 现在, 把第 二次修改提交了, 然后开始 小结 小结 Git 教程 By 廖雪峰 现在, 你 又理解了 Git 是如何跟踪修改的, 每次修改, 如果不 add 到暂存区, 那就不会加 入到 commit 中

30 撤销修改 自然, 你是不会犯错的 不过现在是凌晨两点, 你正在赶 一份 工作报告, 你在 readme.txt 中添加了 一 行 : $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. My stupid boss still prefers SVN. 在你准备提交前, 一杯咖啡起了作 用, 你猛然发现了 stupid boss 可能会让你丢掉这个月的奖 金! 既然错误发现得很及时, 就可以很容易地纠正它 你可以删掉最后 一 行, 手动把 文件恢复到上 一个版本的状态 如果 用 git status 查看 一下 : $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # no changes added to commit (use "git add" and/or "git commit -a") 你可以发现,Git 会告诉你,git checkout -- file 可以丢弃 工作区的修改 : $ git checkout -- readme.txt 命令 git checkout -- readme.txt 意思就是, 把 readme.txt 文件在 工作区的修改全部撤销, 这 里有两种情况 : 一种是 readme.txt 自修改后还没有被放到暂存区, 现在, 撤销修改就回到和版本库 一模 一样的状态 ; 一种是 readme.txt 已经添加到暂存区后, 又作了修改, 现在, 撤销修改就回到添加到暂存区后的状态 总之, 就是让这个 文件回到最近 一次 git commit 或 git add 时的状态 现在, 看看 readme.txt 的 文件内容 : $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. 文件内容果然复原了

31 git checkout -- file 命令中的 -- 很重要, 没有 --, 就变成了 创建 一个新分 支 的命令, 我们在后 面的分 支管理中会再次遇到 git checkout 命令 现在假定是凌晨 3 点, 你不但写了 一些胡话, 还 git add 到暂存区了 : $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. My stupid boss still prefers SVN. $ git add readme.txt 庆幸的是, 在 commit 之前, 你发现了这个问题 用 git status 查看 一下, 修改只是添加到了暂存区, 还没有提交 : $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: readme.txt # Git 同样告诉我们, 用命令 git reset HEAD file 可以把暂存区的修改撤销掉 (unstage), 重新放回 工作区 : $ git reset HEAD readme.txt Unstaged changes after reset: M readme.txt git reset 命令既可以回退版本, 也可以把暂存区的修改回退到 工作区 当我们 用 HEAD 时, 表 示最新的版本 再 用 git status 查看 一下, 现在暂存区是干净的, 工作区有修改 : $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # no changes added to commit (use "git add" and/or "git commit -a") 还记得如何丢弃 工作区的修改吗? $ git checkout -- readme.txt Git 教程 By 廖雪峰

32 $ git status # On branch master nothing to commit (working directory clean) 整个世界终于清静了! 现在, 假设你不但改错了东 西, 还从暂存区提交到了版本库, 怎么办呢? 还记得版本回退 一节吗? 可以回退到上 一个版本 不过, 这是有条件的, 就是你还没有把 自 己的本地版本库推送到远程 还记得 Git 是分布式版本控制系统吗? 我们后 面会讲到远程版本库, 一旦你把 stupid boss 提交推送到远程版本库, 你就真的惨了 小结 又到了 小结时间 Git 教程 By 廖雪峰 场景 1: 当你改乱了 工作区某个 文件的内容, 想直接丢弃 工作区的修改时, 用命令 git checkout -- file 场景 2: 当你不但改乱了 工作区某个 文件的内容, 还添加到了暂存区时, 想丢弃修改, 分两步, 第 一步 用命令 git reset HEAD file, 就回到了场景 1, 第 二步按场景 1 操作 场景 3: 已经提交了不合适的修改到版本库时, 想要撤销本次提交, 参考版本回退 一节, 不过前提是没有推送到远程库

33 删除 文件 在 Git 中, 删除也是 一个修改操作, 我们实战 一下, 先添加 一个新 文件 test.txt 到 Git 并且提交 : $ git add test.txt $ git commit -m "add test.txt" [master 94cdc44] add test.txt 1 file changed, 1 insertion(+) create mode test.txt 一般情况下, 你通常直接在 文件管理器中把没 用的 文件删了, 或者 用 rm 命令删了 : $ rm test.txt 这个时候,Git 知道你删除了 文件, 因此, 工作区和版本库就不 一致了,git status 命令会 立刻告诉你哪些 文件被删除了 : $ git status # On branch master # Changes not staged for commit: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: test.txt # no changes added to commit (use "git add" and/or "git commit -a") 现在你有两个选择, 一是确实要从版本库中删除该 文件, 那就 用命令 git rm 删掉, 并且 commit: $ git rm test.txt rm 'test.txt' $ git commit -m "remove test.txt" [master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode test.txt 现在, 文件就从版本库中被删除了 另 一种情况是删错了, 因为版本库 里还有呢, 所以可以很轻松地把误删的 文件恢复到最新版本 : $ git checkout -- test.txt git checkout 其实是 用版本库 里的版本替换 工作区的版本, 无论 工作区是修改还是删除, 都可以 一键还原 小结

34 命令 git rm 用于删除 一个 文件 如果 一个 文件已经被提交到版本库, 那么你永远不 用担 心误删, 但是要 小 心, 你只能恢复 文件到最新版本, 你会丢失最近 一次提交后你修改的内容

35 远程仓库 到 目前为 止, 我们已经掌握了如何在 Git 仓库 里对 一个 文件进 行时光穿梭, 你再也不 用担 心 文件备份或者丢失的问题了 可是有 用过集中式版本控制系统 SVN 的童鞋会站出来说, 这些功能在 SVN 里早就有了, 没看出 Git 有什么特别的地 方 没错, 如果只是在 一个仓库 里管理 文件历史,Git 和 SVN 真没啥区别 为了保证你现在所学的 Git 物超所值, 将来绝对不会后悔, 同时为了打击已经不幸学了 SVN 的童鞋, 本章开始介绍 Git 的杀 手级功能之 一 ( 注意是之 一, 也就是后 面还有之 二, 之三 ): 远程仓库 Git 是分布式版本控制系统, 同 一个 Git 仓库, 可以分布到不同的机器上 怎么分布呢? 最早, 肯定只有 一台机器有 一个原始版本库, 此后, 别的机器可以 克隆 这个原始版本库, 而且每台机器的版本库其实都是 一样的, 并没有主次之分 你肯定会想, 至少需要两台机器才能玩远程库不是? 但是我只有 一台电脑, 怎么玩? 其实 一台电脑上也是可以克隆多个版本库的, 只要不在同 一个 目录下 不过, 现实 生活中是不会有 人这么傻的在 一台电脑上搞 几个远程库玩, 因为 一台电脑上搞 几个远程库完全没有意义, 而且硬盘挂了会导致所有库都挂掉, 所以我也不告诉你在 一台电脑上怎么克隆多个仓库 实际情况往往是这样, 找 一台电脑充当服务器的 角 色, 每天 24 小时开机, 其他每个 人都从这个 服务器 仓库克隆 一份到 自 己的电脑上, 并且各 自把各 自的提交推送到服务器仓库 里, 也从服务器仓库中拉取别 人的提交 完全可以 自 己搭建 一台运 行 Git 的服务器, 不过现阶段, 为了学 Git 先搭个服务器绝对是 小题 大作 好在这个世界上有个叫 GitHub 的神奇的 网站, 从名字就可以看出, 这个 网站就是提供 Git 仓库托管服务的, 所以, 只要注册 一个 GitHub 账号, 就可以免费获得 Git 远程仓库 在继续阅读后续内容前, 请 自 行注册 GitHub 账号 由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过 SSH 加密的, 所以, 需要 一点设置 : 第 1 步 : 创建 SSH Key 在 用户主 目录下, 看看有没有.ssh 目录, 如果有, 再看看这个 目录下有没有 id_rsa 和 id_rsa.pub 这两个 文件, 如果已经有了, 可直接跳到下 一步 如果没有, 打开 Shell(Windows 下打开 Git Bash), 创建 SSH Key: $ ssh-keygen -t rsa -C "your @example.com" 你需要把邮件地址换成你 自 己的邮件地址, 然后 一路回 车, 使 用默认值即可, 由于这个 Key 也不是 用于军事 目的, 所以也 无需设置密码 如果 一切顺利的话, 可以在 用户主 目录 里找到.ssh 目录, 里 面有 id_rsa 和 id_rsa.pub 两个 文件, 这两个就是 SSH Key 的秘钥对,id_rsa 是私钥, 不能泄露出去,id_rsa.pub 是公钥, 可以放 心地告诉任何 人 第 2 步 : 登陆 GitHub, 打开 Account settings, SSH Keys 页 面 : 然后, 点 Add SSH Key, 填上任意 Title, 在 Key 文本框 里粘贴 id_rsa.pub 文件的内容 :

36 点 Add Key, 你就应该看到已经添加的 Key: 为什么 GitHub 需要 SSH Key 呢? 因为 GitHub 需要识别出你推送的提交确实是你推送的, 而不是别 人冒充的, 而 Git 支持 SSH 协议, 所以,GitHub 只要知道了你的公钥, 就可以确认只有你 自 己才能推送 当然,GitHub 允许你添加多个 Key 假定你有若干电脑, 你 一会 儿在公司提交, 一会 儿在家 里提交, 只要把每台电脑的 Key 都添加到 GitHub, 就可以在每台电脑上往 GitHub 推送了 最后友情提 示, 在 GitHub 上免费托管的 Git 仓库, 任何 人都可以看到喔 ( 但只有你 自 己才能改 ) 所以, 不要把敏感信息放进去 如果你不想让别 人看到 Git 库, 有两个办法, 一个是交点保护费, 让 GitHub 把公开的仓库变成私有的, 这样别 人就看不 见了 ( 不可读更不可写 ) 另 一个办法是 自 己动 手, 搭 一个 Git

37 服务器, 因为是你 自 己的 Git 服务器, 所以别 人也是看不 见的 这个 方法我们后 面会讲到的, 相当简单, 公司内部开发必备 确保你拥有 一个 GitHub 账号后, 我们就即将开始远程仓库的学习 小结 Git 教程 By 廖雪峰 有了远程仓库, 妈妈再也不 用担 心我的硬盘了 Git 点读机

38 添加远程库 现在的情景是, 你已经在本地创建了 一个 Git 仓库后, 又想在 GitHub 创建 一个 Git 仓库, 并且让这两个仓库进 行远程同步, 这样,GitHub 上的仓库既可以作为备份, 又可以让其他 人通过该仓库来协作, 真是 一举多得 首先, 登陆 GitHub, 然后, 在右上 角找到 Create a new repo 按钮, 创建 一个新的仓库 : 在 Repository name 填 入 learngit, 其他保持默认设置, 点击 Create repository 按钮, 就成功地创建了 一个新的 Git 仓库 :

39 目前, 在 GitHub 上的这个 learngit 仓库还是空的,GitHub 告诉我们, 可以从这个仓库克隆出新的仓库, 也可以把 一个已有的本地仓库与之关联, 然后, 把本地仓库的内容推送到 GitHub 仓库 现在, 我们根据 GitHub 的提 示, 在本地的 learngit 仓库下运 行命令 : $ git remote add origin git@github.com:michaelliao/learngit.git 请千万注意, 把上 面的 michaelliao 替换成你 自 己的 GitHub 账户名, 否则, 你在本地关联的就是我的远程库, 关联没有问题, 但是你以后推送是推不上去的, 因为你的 SSH Key 公钥不在我的账户列表中 添加后, 远程库的名字就是 origin, 这是 Git 默认的叫法, 也可以改成别的, 但是 origin 这个名字 一看就知道是远程库 下 一步, 就可以把本地库的所有内容推送到远程库上 : $ git push -u origin master Counting objects: 19, done. Delta compression using up to 4 threads. Compressing objects: 100% (19/19), done. Writing objects: 100% (19/19), KiB, done. Total 23 (delta 6), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git * [new branch] master -> master Branch master set up to track remote branch master from origin. 把本地库的内容推送到远程, 用 git push 命令, 实际上是把当前分 支 master 推送到远程

40 由于远程库是空的, 我们第 一次推送 master 分 支时, 加上了 -u 参数,Git 不但会把本地的 master 分 支内容推送的远程新的 master 分 支, 还会把本地的 master 分 支和远程的 master 分 支关联起来, 在以后的推送或者拉取时就可以简化命令 推送成功后, 可以 立刻在 GitHub 页 面中看到远程库的内容已经和本地 一模 一样 : 从现在起, 只要本地作了提交, 就可以通过命令 : $ git push origin master 把本地 master 分 支的最新修改推送 至 GitHub, 现在, 你就拥有了真正的分布式版本库! 小结 要关联 一个远程库, 使 用命令 git remote add origin git@server-name:path/repo-name.git; 关联后, 使 用命令 git push -u origin master 第 一次推送 master 分 支的所有内容 ; 此后, 每次本地提交后, 只要有必要, 就可以使 用命令 git push origin master 推送最新修改 ; 分布式版本系统的最 大好处之 一是在本地 工作完全不需要考虑远程库的存在, 也就是有没有联 网都可以正常 工作, 而 SVN 在没有联 网的时候是拒绝干活的! 当有 网络的时候, 再把本地提交推送 一下就完成了同步, 真是太 方便了!

41 从远程库克隆 上次我们讲了先有本地库, 后有远程库的时候, 如何关联远程库 现在, 假设我们从零开发, 那么最好的 方式是先创建远程库, 然后, 从远程库克隆 首先, 登陆 GitHub, 创建 一个新的仓库, 名字叫 gitskills: 我们勾选 Initialize this repository with a README, 这样 GitHub 会 自动为我们创建 一个 README.md 文件 创建完毕后, 可以看到 README.md 文件 :

42 现在, 远程库已经准备好了, 下 一步是 用命令 git clone 克隆 一个本地库 : $ git clone git@github.com:michaelliao/gitskills.git Cloning into 'gitskills'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. $ cd gitskills $ ls README.md 注意把 Git 库的地址换成你 自 己的, 然后进 入 gitskills 目录看看, 已经有 README.md 文件了 如果有多个 人协作开发, 那么每个 人各 自从远程克隆 一份就可以了 你也许还注意到,GitHub 给出的地址不 止 一个, 还可以 用 michaelliao/gitskills.git 这样的地址 实际上,Git 支持多种协议, 默认的 git:// 使 用 ssh, 但也可以使 用 https 等其他协议 使 用 https 除了速度慢以外, 还有个最 大的 麻烦是每次推送都必须输 入 口令, 但是在某些只开放 http 端 口的公司内部就 无法使 用 ssh 协议 而只能 用 https 小结 要克隆 一个仓库, 首先必须知道仓库的地址, 然后使 用 git clone 命令克隆 Git 支持多种协议, 包括 https, 但通过 ssh 支持的原 生 git 协议速度最快

43 分 支管理 分 支就是科幻电影 里 面的平 行宇宙, 当你正在电脑前努 力学习 Git 的时候, 另 一个你正在另 一个平 行宇宙 里努 力学习 SVN 如果两个平 行宇宙互不干扰, 那对现在的你也没啥影响 不过, 在某个时间点, 两个平 行宇宙合并了, 结果, 你既学会了 Git 又学会了 SVN! 分 支在实际中有什么 用呢? 假设你准备开发 一个新功能, 但是需要两周才能完成, 第 一周你写了 50% 的代码, 如果 立刻提交, 由于代码还没写完, 不完整的代码库会导致别 人不能干活了 如果等代码全部写完再 一次提交, 又存在丢失每天进度的巨 大 风险 现在有了分 支, 就不 用怕了 你创建了 一个属于你 自 己的分 支, 别 人看不到, 还继续在原来的分 支上正常 工作, 而你在 自 己的分 支上干活, 想提交就提交, 直到开发完毕后, 再 一次性合并到原来的分 支上, 这样, 既安全, 又不影响别 人 工作 其他版本控制系统如 SVN 等都有分 支管理, 但是 用过之后你会发现, 这些版本控制系统创建和切换分 支 比蜗 牛还慢, 简直让 人 无法忍受, 结果分 支功能成了摆设, 大家都不去 用 但 Git 的分 支是与众不同的, 无论创建 切换和删除分 支,Git 在 1 秒钟之内就能完成! 无论你的版本库是 1 个 文件还是 1 万个 文件

44 创建与合并分 支 在版本回退 里, 你已经知道, 每次提交,Git 都把它们串成 一条时间线, 这条时间线就是 一个分 支 截 止到 目前, 只有 一条时间线, 在 Git 里, 这个分 支叫主分 支, 即 master 分 支 HEAD 严格来说不是指向提交, 而是指向 master,master 才是指向提交的, 所以,HEAD 指向的就是当前分 支 一开始的时候,master 分 支是 一条线,Git 用 master 指向最新的提交, 再 用 HEAD 指向 master, 就能确定当前分 支, 以及当前分 支的提交点 : 每次提交,master 分 支都会向前移动 一步, 这样, 随着你不断提交,master 分 支的线也越来越 长 当我们创建新的分 支, 例如 dev 时,Git 新建了 一个指针叫 dev, 指向 master 相同的提交, 再把 HEAD 指向 dev, 就表 示当前分 支在 dev 上 : 你看,Git 创建 一个分 支很快, 因为除了增加 一个 dev 指针, 改改 HEAD 的指向, 工作区的 文件都没有任何变化! 不过, 从现在开始, 对 工作区的修改和提交就是针对 dev 分 支了, 比如新提交 一次后,dev 指针往前移动 一步, 而 master 指针不变 :

45 假如我们在 dev 上的 工作完成了, 就可以把 dev 合并到 master 上 Git 怎么合并呢? 最简单的 方法, 就是直接把 master 指向 dev 的当前提交, 就完成了合并 : 所以 Git 合并分 支也很快! 就改改指针, 工作区内容也不变! 合并完分 支后, 甚 至可以删除 dev 分 支 删除 dev 分 支就是把 dev 指针给删掉, 删掉后, 我们就剩下了 一条 master 分 支 :

46 真是太神奇了, 你看得出来有些提交是通过分 支完成的吗? 下 面开始实战 首先, 我们创建 dev 分 支, 然后切换到 dev 分 支 : $ git checkout -b dev Switched to a new branch 'dev' git checkout 命令加上 -b 参数表 示创建并切换, 相当于以下两条命令 : $ git branch dev $ git checkout dev Switched to branch 'dev' 然后, 用 git branch 命令查看当前分 支 : $ git branch * dev master git branch 命令会列出所有分 支, 当前分 支前 面会标 一个 * 号 然后, 我们就可以在 dev 分 支上正常提交, 比如对 readme.txt 做个修改, 加上 一 行 : Creating a new branch is quick. 然后提交 : $ git add readme.txt $ git commit -m "branch test" [dev fec145a] branch test 1 file changed, 1 insertion(+) 现在,dev 分 支的 工作完成, 我们就可以切换回 master 分 支 : $ git checkout master Switched to branch 'master' 切换回 master 分 支后, 再查看 一个 readme.txt 文件, 刚才添加的内容不 见了! 因为那个提交是在 dev 分 支上, 而 master 分 支此刻的提交点并没有变 :

47 现在, 我们把 dev 分 支的 工作成果合并到 master 分 支上 : $ git merge dev Updating d17efd8..fec145a Fast-forward readme.txt file changed, 1 insertion(+) git merge 命令 用于合并指定分 支到当前分 支 合并后, 再查看 readme.txt 的内容, 就可以看到, 和 dev 分 支的最新提交是完全 一样的 注意到上 面的 Fast-forward 信息,Git 告诉我们, 这次合并是 快进模式, 也就是直接把 master 指向 dev 的当前提交, 所以合并速度 非常快 当然, 也不是每次合并都能 Fast-forward, 我们后 面会将其他 方式的合并 合并完成后, 就可以放 心地删除 dev 分 支了 : $ git branch -d dev Deleted branch dev (was fec145a). 删除后, 查看 branch, 就只剩下 master 分 支了 : $ git branch * master 因为创建 合并和删除分 支 非常快, 所以 Git 鼓励你使 用分 支完成某个任务, 合并后再删掉分 支, 这和直接在 master 分 支上 工作效果是 一样的, 但过程更安全 小结 Git 鼓励 大量使 用分 支 : 查看分 支 :git branch 创建分 支 :git branch name 切换分 支 :git checkout name

48 创建 + 切换分 支 :git checkout -b name 合并某分 支到当前分 支 :git merge name 删除分 支 :git branch -d name Git 教程 By 廖雪峰

49 解决冲突 人 生不如意之事 十之 八九, 合并分 支往往也不是 一帆 风顺的 准备新的 feature1 分 支, 继续我们的新分 支开发 : $ git checkout -b feature1 Switched to a new branch 'feature1' 修改 readme.txt 最后 一 行, 改为 : Creating a new branch is quick AND simple. 在 feature1 分 支上提交 : $ git add readme.txt $ git commit -m "AND simple" [feature1 75a857c] AND simple 1 file changed, 1 insertion(+), 1 deletion(-) 切换到 master 分 支 : $ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 1 commit. Git 还会 自动提 示我们当前 master 分 支 比远程的 master 分 支要超前 1 个提交 在 master 分 支上把 readme.txt 文件的最后 一 行改为 : Creating a new branch is quick & simple. 提交 : $ git add readme.txt $ git commit -m "& simple" [master 400b400] & simple 1 file changed, 1 insertion(+), 1 deletion(-) 现在,master 分 支和 feature1 分 支各 自都分别有新的提交, 变成了这样 :

50 这种情况下,Git 无法执 行 快速合并, 只能试图把各 自的修改合并起来, 但这种合并就可能会有冲突, 我们试试看 : $ git merge feature1 Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result. 果然冲突了!Git 告诉我们,readme.txt 文件存在冲突, 必须 手动解决冲突后再提交 git status 也可以告诉我们冲突的 文件 : $ git status # On branch master # Your branch is ahead of 'origin/master' by 2 commits. # # Unmerged paths: # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: readme.txt # no changes added to commit (use "git add" and/or "git commit -a") 我们可以直接查看 readme.txt 的内容 : Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. <<<<<<< HEAD Creating a new branch is quick & simple. ======= Creating a new branch is quick AND simple.

51 >>>>>>> feature1 Git 用 <<<<<<<,=======,>>>>>>> 标记出不同分 支的内容, 我们修改如下后保存 : Creating a new branch is quick and simple. 再提交 : $ git add readme.txt $ git commit -m "conflict fixed" [master 59bc1cb] conflict fixed 现在,master 分 支和 feature1 分 支变成了下图所 示 : 用带参数的 git log 也可以看到分 支的合并情况 : $ git log --graph --pretty=oneline --abbrev-commit * 59bc1cb conflict fixed \ * 75a857c AND simple * 400b400 & simple / * fec145a branch test... 现在, 删除 feature1 分 支 : $ git branch -d feature1 Deleted branch feature1 (was 75a857c). 工作完成 小结 当 Git 无法 自动合并分 支时, 就必须 首先解决冲突 解决冲突后, 再提交, 合并完成

52 用 git log --graph 命令可以看到分 支合并图 Git 教程 By 廖雪峰

53 分 支管理策略 通常, 合并分 支时, 如果可能,Git 会 用 Fast forward 模式, 但这种模式下, 删除分 支后, 会丢掉分 支信息 如果要强制禁 用 Fast forward 模式,Git 就会在 merge 时 生成 一个新的 commit, 这样, 从分 支历史上就可以看出分 支信息 下 面我们实战 一下 --no-ff 方式的 merge: 首先, 仍然创建并切换 dev 分 支 : $ git checkout -b dev Switched to a new branch 'dev' 修改 readme.txt 文件, 并提交 一个新的 commit: $ git add readme.txt $ git commit -m "add merge" [dev ] add merge 1 file changed, 1 insertion(+) 现在, 我们切换回 master: $ git checkout master Switched to branch 'master' 准备合并 dev 分 支, 请注意 --no-ff 参数, 表 示禁 用 Fast forward : $ git merge --no-ff -m "merge with no-ff" dev Merge made by the 'recursive' strategy. readme.txt file changed, 1 insertion(+) 因为本次合并要创建 一个新的 commit, 所以加上 -m 参数, 把 commit 描述写进去 合并后, 我们 用 git log 看看分 支历史 : $ git log --graph --pretty=oneline --abbrev-commit * 7825a50 merge with no-ff \ * add merge / * 59bc1cb conflict fixed... 可以看到, 不使 用 Fast forward 模式,merge 后就像这样 :

54 分 支策略 在实际开发中, 我们应该按照 几个基本原则进 行分 支管理 : 首先,master 分 支应该是 非常稳定的, 也就是仅 用来发布新版本, 平时不能在上 面干活 ; 那在哪干活呢? 干活都在 dev 分 支上, 也就是说,dev 分 支是不稳定的, 到某个时候, 比如 1.0 版本发布时, 再把 dev 分 支合并到 master 上, 在 master 分 支发布 1.0 版本 ; 你和你的 小伙伴们每个 人都在 dev 分 支上干活, 每个 人都有 自 己的分 支, 时不时地往 dev 分 支上合并就可以了 所以, 团队合作的分 支看起来就像这样 : 小结 Git 分 支 十分强 大, 在团队开发中应该充分应 用 合并分 支时, 加上 --no-ff 参数就可以 用普通模式合并, 合并后的历史有分 支, 能看出来曾经做过合并, 而 fast forward 合并就看不出来曾经做过合并

55 Bug 分 支 软件开发中,bug 就像家常便饭 一样 有了 bug 就需要修复, 在 Git 中, 由于分 支是如此的强 大, 所以, 每个 bug 都可以通过 一个新的临时分 支来修复, 修复后, 合并分 支, 然后将临时分 支删除 当你接到 一个修复 一个代号 101 的 bug 的任务时, 很 自然地, 你想创建 一个分 支 issue -101 来修复它, 但是, 等等, 当前正在 dev 上进 行的 工作还没有提交 : $ git status # On branch dev # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: hello.py # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # 并不是你不想提交, 而是 工作只进 行到 一半, 还没法提交, 预计完成还需 1 天时间 但是, 必须在两个 小时内修复该 bug, 怎么办? 幸好,Git 还提供了 一个 stash 功能, 可以把当前 工作现场 储藏 起来, 等以后恢复现场后继续 工作 : $ git stash Saved working directory and index state WIP on dev: add merge HEAD is now at add merge 现在, 用 git status 查看 工作区, 就是干净的 ( 除 非有没有被 Git 管理的 文件 ), 因此可以放 心地创建分 支来修复 bug 首先确定要在哪个分 支上修复 bug, 假定需要在 master 分 支上修复, 就从 master 创建临时分 支 : $ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 6 commits. $ git checkout -b issue-101 Switched to a new branch 'issue-101' 现在修复 bug, 需要把 Git is free software... 改为 Git is a free software..., 然后提交 : $ git add readme.txt $ git commit -m "fix bug 101" [issue-101 cc17032] fix bug 101

56 1 file changed, 1 insertion(+), 1 deletion(-) 修复完成后, 切换到 master 分 支, 并完成合并, 最后删除 issue-101 分 支 : $ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 2 commits. $ git merge --no-ff -m "merged bug fix 101" issue-101 Merge made by the 'recursive' strategy. readme.txt file changed, 1 insertion(+), 1 deletion(-) $ git branch -d issue-101 Deleted branch issue-101 (was cc17032). 太棒了, 原计划两个 小时的 bug 修复只花了 5 分钟! 现在, 是时候接着回到 dev 分 支干活了! $ git checkout dev Switched to branch 'dev' $ git status # On branch dev nothing to commit (working directory clean) 工作区是干净的, 刚才的 工作现场存到哪去了? 用 git stash list 命令看看 : $ git stash list stash@{0}: WIP on dev: add merge 工作现场还在,Git 把 stash 内容存在某个地 方了, 但是需要恢复 一下, 有两个办法 : 一是 用 git stash apply 恢复, 但是恢复后,stash 内容并不删除, 你需要 用 git stash drop 来删除 ; 另 一种 方式是 用 git stash pop, 恢复的同时把 stash 内容也删了 : $ git stash pop # On branch dev # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: hello.py # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40) 再 用 git stash list 查看, 就看不到任何 stash 内容了 :

57 $ git stash list 你可以多次 stash, 恢复的时候, 先 用 git stash list 查看, 然后恢复指定的 stash, 用命令 : $ git stash apply stash@{0} 小结 修复 bug 时, 我们会通过创建新的 bug 分 支进 行修复, 然后合并, 最后删除 ; 当 手头 工作没有完成时, 先把 工作现场 git stash 一下, 然后去修复 bug, 修复后, 再 git stash pop, 回到 工作现场

58 Feature 分 支 软件开发中, 总有 无穷 无尽的新的功能要不断添加进来 添加 一个新功能时, 你肯定不希望因为 一些实验性质的代码, 把主分 支搞乱了, 所以, 每添加 一个新功能, 最好新建 一个 feature 分 支, 在上 面开发, 完成后, 合并, 最后, 删除该 feature 分 支 现在, 你终于接到了 一个新任务 : 开发代号为 Vulcan 的新功能, 该功能计划 用于下 一代星际 飞船 于是准备开发 : $ git checkout -b feature-vulcan Switched to a new branch 'feature-vulcan' 5 分钟后, 开发完毕 : $ git status # On branch feature-vulcan # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: vulcan.py # $ git add vulcan.py $ git commit -m "add feature vulcan" [feature-vulcan 756d4af] add feature vulcan 1 file changed, 2 insertions(+) create mode vulcan.py 切回 dev, 准备合并 : $ git checkout dev 一切顺利的话,feature 分 支和 bug 分 支是类似的, 合并, 然后删除 但是, 就在此时, 接到上级命令, 因经费不 足, 新功能必须取消! 虽然 白干了, 但是这个分 支还是必须就地销毁 : $ git branch -d feature-vulcan error: The branch 'feature-vulcan' is not fully merged. If you are sure you want to delete it, run 'git branch -D featurevulcan'. 销毁失败 Git 友情提醒,feature-vulcan 分 支还没有被合并, 如果删除, 将丢失掉修改, 如果要强 行删除, 需要使 用命令 git branch -D feature-vulcan 现在我们强 行删除 : $ git branch -D feature-vulcan

59 Deleted branch feature-vulcan (was 756d4af). 终于删除成功! 小结开发 一个新 feature, 最好新建 一个分 支 ; 如果要丢弃 一个没有被合并过的分 支, 可以通过 git branch -D name 强 行删除

60 多 人协作 当你从远程仓库克隆时, 实际上 Git 自动把本地的 master 分 支和远程的 master 分 支对应起来了, 并且, 远程仓库的默认名称是 origin 要查看远程库的信息, 用 git remote: $ git remote origin 或者, 用 git remote -v 显 示更详细的信息 : $ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push) 上 面显 示了可以抓取和推送的 origin 的地址 如果没有推送权限, 就看不到 push 的地址 推送分支 推送分 支, 就是把该分 支上的所有本地提交推送到远程库 推送时, 要指定本地分 支, 这样,Git 就会把该分 支推送到远程库对应的远程分 支上 : $ git push origin master 如果要推送其他分 支, 比如 dev, 就改成 : $ git push origin dev 但是, 并不是 一定要把本地分 支往远程推送, 那么, 哪些分 支需要推送, 哪些不需要呢? master 分 支是主分 支, 因此要时刻与远程同步 ; dev 分 支是开发分 支, 团队所有成员都需要在上 面 工作, 所以也需要与远程同步 ; bug 分 支只 用于在本地修复 bug, 就没必要推到远程了, 除 非 老板要看看你每周到底修复了 几个 bug; feature 分 支是否推到远程, 取决于你是否和你的 小伙伴合作在上 面开发 总之, 就是在 Git 中, 分 支完全可以在本地 自 己藏着玩, 是否推送, 视你的 心情 而定! 抓取分支 多 人协作时, 大家都会往 master 和 dev 分 支上推送各 自的修改 现在, 模拟 一个你的 小伙伴, 可以在另 一台电脑 ( 注意要把 SSH Key 添加到 GitHub) 或者同 一台电脑的另 一个 目录下克隆 : $ git clone git@github.com:michaelliao/learngit.git Cloning into 'learngit'... remote: Counting objects: 46, done. remote: Compressing objects: 100% (26/26), done. remote: Total 46 (delta 16), reused 45 (delta 15)

61 Receiving objects: 100% (46/46), KiB 6 KiB/s, done. Resolving deltas: 100% (16/16), done. 当你的 小伙伴从远程库 clone 时, 默认情况下, 你的 小伙伴只能看到本地的 master 分 支 不信可以 用 git branch 命令看看 : $ git branch * master 现在, 你的 小伙伴要在 dev 分 支上开发, 就必须创建远程 origin 的 dev 分 支到本地, 于是他 用这个命令创建本地 dev 分 支 : $ git checkout -b dev origin/dev 现在, 他就可以在 dev 上继续修改, 然后, 时不时地把 dev 分 支 push 到远程 : $ git commit -m "add /usr/bin/env" [dev 291bea8] add /usr/bin/env 1 file changed, 1 insertion(+) $ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 349 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git fc bea8 dev -> dev 你的 小伙伴已经向 origin/dev 分 支推送了他的提交, 而碰巧你也对同样的 文件作了修改, 并试图推送 : $ git add hello.py $ git commit -m "add coding: utf-8" [dev bd6ae48] add coding: utf-8 1 file changed, 1 insertion(+) $ git push origin dev To git@github.com:michaelliao/learngit.git! [rejected] dev -> dev (non-fast-forward) error: failed to push some refs to 'git@github.com:michaelliao/ learngit.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. 推送失败, 因为你的 小伙伴的最新提交和你试图推送的提交有冲突, 解决办法也很简单, Git 已经提 示我们, 先 用 git pull 把最新的提交从 origin/dev 抓下来, 然后, 在本地合并, 解决冲突, 再推送 : $ git pull Git 教程 By 廖雪峰

62 remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 3 (delta 0) Unpacking objects: 100% (3/3), done. From github.com:michaelliao/learngit fc bea8 dev -> origin/dev There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream dev origin/<branch> git pull 也失败了, 原因是没有指定本地 dev 分 支与远程 origin/dev 分 支的链接, 根据提 示, 设置 dev 和 origin/dev 的链接 : $ git branch --set-upstream dev origin/dev Branch dev set up to track remote branch dev from origin. 再 pull: $ git pull Auto-merging hello.py CONFLICT (content): Merge conflict in hello.py Automatic merge failed; fix conflicts and then commit the result. 这回 git pull 成功, 但是合并有冲突, 需要 手动解决, 解决的 方法和分 支管理中的解决冲突完全 一样 解决后, 提交, 再 push: $ git commit -m "merge & fix hello.py" [dev adca45d] merge & fix hello.py $ git push origin dev Counting objects: 10, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (6/6), 747 bytes, done. Total 6 (delta 0), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git 291bea8..adca45d dev -> dev 因此, 多 人协作的 工作模式通常是这样 : Git 教程 By 廖雪峰 1. 首先, 可以试图 用 git push origin branch-name 推送 自 己的修改 ; 2. 如果推送失败, 则因为远程分 支 比你的本地更新, 需要先 用 git pull 试图合并 ; 3. 如果合并有冲突, 则解决冲突, 并在本地提交 ; 4. 没有冲突或者解决掉冲突后, 再 用 git push origin branch-name 推送就能成功!

63 如果 git pull 提 示 no tracking information, 则说明本地分 支和远程分 支的链接关系没有创建, 用命令 git branch --set-upstream branch-name origin/branch-name 这就是多 人协作的 工作模式, 一旦熟悉了, 就 非常简单 小结 查看远程库信息, 使 用 git remote -v; Git 教程 By 廖雪峰 本地新建的分 支如果不推送到远程, 对其他 人就是不可 见的 ; 从本地推送分 支, 使 用 git push origin branch-name, 如果推送失败, 先 用 git pull 抓取远程的新提交 ; 在本地创建和远程分 支对应的分 支, 使 用 git checkout -b branch-name origin/branchname, 本地和远程分 支的名称最好 一致 ; 建 立本地分 支和远程分 支的关联, 使 用 git branch --set-upstream branch-name origin/branch-name; 从远程抓取分 支, 使 用 git pull, 如果有冲突, 要先处理冲突

64 标签管理 发布 一个版本时, 我们通常先在版本库中打 一个标签, 这样, 就唯 一确定了打标签时刻的版本 将来 无论什么时候, 取某个标签的版本, 就是把那个打标签的时刻的历史版本取出来 所以, 标签也是版本库的 一个快照 Git 的标签虽然是版本库的快照, 但其实它就是指向某个 commit 的指针 ( 跟分 支很像对不对? 但是分 支可以移动, 标签不能移动 ), 所以, 创建和删除标签都是瞬间完成的

65 创建标签 在 Git 中打标签 非常简单, 首先, 切换到需要打标签的分 支上 : $ git branch * dev master $ git checkout master Switched to branch 'master' 然后, 敲命令 git tag name 就可以打 一个新标签 : $ git tag v1.0 可以 用命令 git tag 查看所有标签 : $ git tag v1.0 默认标签是打在最新提交的 commit 上的 有时候, 如果忘了打标签, 比如, 现在已经是周五了, 但应该在周 一打的标签没有打, 怎么办? 方法是找到历史提交的 commit id, 然后打上就可以了 : $ git log --pretty=oneline --abbrev-commit 6a5819e merged bug fix 101 cc17032 fix bug a50 merge with no-ff add merge 59bc1cb conflict fixed 400b400 & simple 75a857c AND simple fec145a branch test d17efd8 remove test.txt... 比 方说要对 add merge 这次提交打标签, 它对应的 commit id 是 , 敲 入命令 : $ git tag v 再 用命令 git tag 查看标签 : $ git tag v0.9 v1.0 注意, 标签不是按时间顺序列出, 而是按字 母排序的 可以 用 git show tagname 查看标签信息 : $ git show v0.9 commit ab447b6bb37e4e2a2f276a20fed2ab4 Author: Michael Liao <askxuefeng@gmail.com>

66 Date: Thu Aug 22 11:22: add merge 可以看到, v0.9 确实打在 add merge 这次提交上 还可以创建带有说明的标签, 用 -a 指定标签名,-m 指定说明 文字 : $ git tag -a v0.1 -m "version 0.1 released" 用命令 git show tagname 可以看到说明 文字 : $ git show v0.1 tag v0.1 Tagger: Michael Liao <askxuefeng@gmail.com> Date: Mon Aug 26 07:28: version 0.1 released commit fb26d f8f31179f24e0882e1e0 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 15:11: append GPL 还可以通过 -s 用私钥签名 一个标签 : $ git tag -s v0.2 -m "signed version 0.2 released" fec145a 签名采 用 PGP 签名, 因此, 必须 首先安装 gpg(gnupg), 如果没有找到 gpg, 或者没有 gpg 密钥对, 就会报错 : gpg: signing failed: secret key not available error: gpg failed to sign the data error: unable to sign the tag 如果报错, 请参考 GnuPG 帮助 文档配置 Key 用命令 git show tagname 可以看到 PGP 签名信息 : $ git show v0.2 tag v0.2 Tagger: Michael Liao <askxuefeng@gmail.com> Date: Mon Aug 26 07:28: signed version 0.2 released -----BEGIN PGP SIGNATURE----- Version: GnuPG v (Darwin) iqecbaabagagbqjsgpmhaaojepuxhydahbpt4qqiakehfr3bo END PGP SIGNATURE-----

67 commit fec145accd63cdc9ed95a2f557ea0658a2a6537f Author: Michael Liao Date: Thu Aug 22 10:37: branch test 用 PGP 签名的标签是不可伪造的, 因为可以验证 PGP 签名 验证签名的 方法 比较复杂, 这 里就不介绍了 小结 命令 git tag name 用于新建 一个标签, 默认为 HEAD, 也可以指定 一个 commit id; -a tagname -m "blablabla..." 可以指定标签信息 ; -s tagname -m "blablabla..." 可以 用 PGP 签名标签 ; 命令 git tag 可以查看所有标签 ;

68 操作标签 如果标签打错了, 也可以删除 : $ git tag -d v0.1 Deleted tag 'v0.1' (was e078af9) 因为创建的标签都只存储在本地, 不会 自动推送到远程 所以, 打错的标签可以在本地安全删除 如果要推送某个标签到远程, 使 用命令 git push origin tagname: $ git push origin v1.0 Total 0 (delta 0), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git * [new tag] v1.0 -> v1.0 或者, 一次性推送全部尚未推送到远程的本地标签 : $ git push origin --tags Counting objects: 1, done. Writing objects: 100% (1/1), 554 bytes, done. Total 1 (delta 0), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git * [new tag] v0.2 -> v0.2 * [new tag] v0.9 -> v0.9 如果标签已经推送到远程, 要删除远程标签就 麻烦 一点, 先从本地删除 : $ git tag -d v0.9 Deleted tag 'v0.9' (was ) 然后, 从远程删除 删除命令也是 push, 但是格式如下 : $ git push origin :refs/tags/v0.9 To git@github.com:michaelliao/learngit.git - [deleted] v0.9 要看看是否真的从远程库删除了标签, 可以登陆 GitHub 查看 小结 命令 git push origin tagname 可以推送 一个本地标签 ; 命令 git push origin --tags 可以推送全部未推送过的本地标签 ; 命令 git tag -d tagname 可以删除 一个本地标签 ; 命令 git push origin :refs/tags/tagname 可以删除 一个远程标签

69 使 用 GitHub 我们 一直 用 GitHub 作为免费的远程仓库, 如果是个 人的开源项 目, 放到 GitHub 上是完全没有问题的 其实 GitHub 还是 一个开源协作社区, 通过 GitHub, 既可以让别 人参与你的开源项 目, 也可以参与别 人的开源项 目 在 GitHub 出现以前, 开源项 目开源容易, 但让 广 大 人民群众参与进来 比较困难, 因为要参与, 就要提交代码, 而给每个想提交代码的群众都开 一个账号那是不现实的, 因此, 群众也仅限于报个 bug, 即使能改掉 bug, 也只能把 diff 文件 用邮件发过去, 很不 方便 但是在 GitHub 上, 利 用 Git 极其强 大的克隆和分 支功能, 人们群众真正可以第 一次 自由参与各种开源项 目了 如何参与 一个开源项 目呢? 比如 人 气极 高的 bootstrap 项 目, 这是 一个 非常强 大的 CSS 框架, 你可以访问它的项 目主 页 点 Fork 就在 自 己的账号下克隆了 一个 bootstrap 仓库, 然后, 从 自 己的账号下 clone: git clone 一定要从 自 己的账号下 clone 仓库, 这样你才能推送修改 如果从 bootstrap 的作者的仓库地址 克隆, 因为没有权限, 你将不能推送修改 Bootstrap 的官 方仓库 twbs/bootstrap 你在 GitHub 上克隆的仓库 my/bootstrap, 以及你 自 己克隆到本地电脑的仓库, 他们的关系就像下图显 示的那样 : 如果你想修复 bootstrap 的 一个 bug, 或者新增 一个功能, 立刻就可以开始干活, 干完后, 往 自 己的仓库推送 如果你希望 bootstrap 的官 方库能接受你的修改, 你就可以在 GitHub 上发起 一个 pull request 当然, 对 方是否接受你的 pull request 就不 一定了 如果你没能 力修改 bootstrap, 但 又想要试 一把 pull request, 那就 Fork 一下我的仓库 : 创建 一个 your-github-id.txt 的 文本 文件, 写点 自 己学习 Git 的 心得, 然后推送 一个 pull request 给我, 我会视 心情 而定是否接受 小结 在 GitHub 上, 可以任意 Fork 开源仓库 ; 自 己拥有 Fork 后的仓库的读写权限 ; 可以推送 pull request 给官 方仓库来贡献代码

70 自定义 Git 在安装 Git 一节中, 我们已经配置了 user.name 和 user. , 实际上,Git 还有很多可配置项 比如, 让 Git 显 示颜 色, 会让命令输出看起来更醒 目 : $ git config --global color.ui true 这样,Git 会适当地显 示不同的颜 色, 比如 git status 命令 : 文件名就会标上颜 色 我们在后 面还会介绍如何更好地配置 Git, 以便让你的 工作更 高效

71 忽略特殊 文件 有些时候, 你必须把某些 文件放到 Git 工作 目录中, 但 又不能提交它们, 比如保存了数据库密码的配置 文件啦, 等等, 每次 git status 都会显 示 Untracked files..., 有强迫症的童鞋 心 里肯定不爽 好在 Git 考虑到了 大家的感受, 这个问题解决起来也很简单, 在 Git 工作区的根 目录下创建 一个特殊的.gitignore 文件, 然后把要忽略的 文件名填进去,Git 就会 自动忽略这些 文件 不需要从头写.gitignore 文件,GitHub 已经为我们准备了各种配置 文件, 只需要组合 一下就可以使 用了 所有配置 文件可以直接在线浏览 : 忽略 文件的原则是 : 1. 忽略操作系统 自动 生成的 文件, 比如缩略图等 ; 2. 忽略编译 生成的中间 文件 可执 行 文件等, 也就是如果 一个 文件是通过另 一个 文件 自动 生成的, 那 自动 生成的 文件就没必要放进版本库, 比如 Java 编译产 生的.class 文件 ; 3. 忽略你 自 己的带有敏感信息的配置 文件, 比如存放 口令的配置 文件 举个例 子 : 假设你在 Windows 下进 行 Python 开发,Windows 会 自动在有图 片的 目录下 生成隐藏的缩略图 文件, 如果有 自定义 目录, 目录下就会有 Desktop.ini 文件, 因此你需要忽略 Windows 自动 生成的垃圾 文件 : # Windows: Thumbs.db ehthumbs.db Desktop.ini 然后, 继续忽略 Python 编译产 生的.pyc.pyo dist 等 文件或 目录 : # Python: *.py[cod] *.so *.egg *.egg-info dist build 加上你 自 己定义的 文件, 最终得到 一个完整的.gitignore 文件, 内容如下 : # Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build

72 # My configurations: db.ini deploy_key_rsa 最后 一步就是把.gitignore 也提交到 Git, 就完成了! 当然检验.gitignore 的标准是 git status 命令是不是说 working directory clean 使 用 Windows 的童鞋注意了, 如果你在资源管理器 里新建 一个.gitignore 文件, 它会 非常弱智地提 示你必须输 入 文件名, 但是在 文本编辑器 里 保存 或者 另存为 就可以把 文件保存为.gitignore 了 小结 1. 忽略某些 文件时, 需要编写.gitignore 2..gitignore 文件本 身要放到版本库 里, 并且可以对.gitignore 做版本管理!

73 配置别名 有没有经常敲错命令? 比如 git status?status 这个单词真 心不好记 如果敲 git st 就表 示 git status 那就简单多了, 当然这种偷懒的办法我们是极 力赞成的 我们只需要敲 一 行命令, 告诉 Git, 以后 st 就表 示 status: $ git config --global alias.st status 好了, 现在敲 git st 看看效果 当然还有别的命令可以简写, 很多 人都 用 co 表 示 checkout,ci 表 示 commit,br 表 示 branch: $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch 以后提交就可以简写成 : $ git ci -m "bala bala bala..." --global 参数是全局参数, 也就是这些命令在这台电脑的所有 Git 仓库下都有 用 在撤销修改 一节中, 我们知道, 命令 git reset HEAD file 可以把暂存区的修改撤销掉 (unstage), 重新放回 工作区 既然是 一个 unstage 操作, 就可以配置 一个 unstage 别名 : $ git config --global alias.unstage 'reset HEAD' 当你敲 入命令 : $ git unstage test.py 实际上 Git 执 行的是 : $ git reset HEAD test.py 配置 一个 git last, 让其显 示最后 一次提交信息 : $ git config --global alias.last 'log -1' 这样, 用 git last 就能显 示最近 一次的提交 : $ git last commit adca45d317e6d8a4b23f9811c3d7b7f0f180bfe2 Merge: bd6ae48 291bea8 Author: Michael Liao <askxuefeng@gmail.com> Date: Thu Aug 22 22:49: merge & fix hello.py

74 甚 至还有 人丧 心病狂地把 lg 配置成了 : $ git config --global alias.lg "log --color --graph -- pretty=format:'%cred%h%creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%creset' --abbrev-commit" 来看看 git lg 的效果 : Git 教程 By 廖雪峰 为什么不早点告诉我? 别激动, 咱不是为了多记 几个英 文单词嘛! 小结 给 Git 配置好别名, 就可以输 入命令时偷个懒 我们 鼓励偷懒

What is Version Control? What is Git?

What is Version Control? What is Git? Git Littlebtc (Hsiao-Ting Yu) Scott Chacon Pro Git CC-BY-NC-SA-3.0 What is Version Control? What is Git? Local rcs Server Checkout Commit Subversion SVN Server Server git, Mecurial (hg), bazaar (bzr)

More information

Git 原理简介 Git 是一种分布式版本控制系统 每个克隆的仓库都包含有整个仓库的所有数据 任何修改先提交在本地, 再推送到服务器 创建和切换分支 合并修改相当方便而且快速 本文档中第一次出现的术语将以蓝色斜体标出 术语的含义是单一的 明确的 不可替代的 1

Git 原理简介 Git 是一种分布式版本控制系统 每个克隆的仓库都包含有整个仓库的所有数据 任何修改先提交在本地, 再推送到服务器 创建和切换分支 合并修改相当方便而且快速 本文档中第一次出现的术语将以蓝色斜体标出 术语的含义是单一的 明确的 不可替代的 1 Git 原理简介 Git 是一种分布式版本控制系统 每个克隆的仓库都包含有整个仓库的所有数据 任何修改先提交在本地, 再推送到服务器 创建和切换分支 合并修改相当方便而且快速 本文档中第一次出现的术语将以蓝色斜体标出 术语的含义是单一的 明确的 不可替代的 1 Git 仓库结构举例 git@my.server:bob/my.git master A B C 2 Git 仓库结构 相对本地已克隆的仓库而言,

More information

Git 教程

Git 教程 前言 Git 是一个开源的分布式版本控制系统, 用以有效 高速的处理从很小到非常大的项目版本管理 本教程是史上最 浅显易懂的 Git 教程, 能够帮助读者迅速掌握并上手操作 Git 命令 适用人群 本教程绝对面向初学者, 没有接触过版本控制概念的读者也可以轻松入门, 不必担心起步难度 ; 本教程实用性超 强, 边学边练, 一点也不觉得枯燥 而且, 你所学的 Git 命令是 充分且必要 的, 掌握了这些东西,

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

李 琼 评扎迪 史密斯的 白牙 要是他 指艾伯特 加勒比海移民 真的回去 了 那么他将要面临的失败是明摆在那儿的 因为当地并没有发生什么变化 这就是移民的悲剧 他们比他们离弃的故乡变化得更 快 于是他们永远也不可能因回到家乡而感 到幸福 可是 他们在移居的国家也不幸福 因为这不是家乡 瞿世镜

李 琼 评扎迪 史密斯的 白牙 要是他 指艾伯特 加勒比海移民 真的回去 了 那么他将要面临的失败是明摆在那儿的 因为当地并没有发生什么变化 这就是移民的悲剧 他们比他们离弃的故乡变化得更 快 于是他们永远也不可能因回到家乡而感 到幸福 可是 他们在移居的国家也不幸福 因为这不是家乡 瞿世镜 略论英国移民族群认同的发展和走向 李 琼 李 琼 评扎迪 史密斯的 白牙 要是他 指艾伯特 加勒比海移民 真的回去 了 那么他将要面临的失败是明摆在那儿的 因为当地并没有发生什么变化 这就是移民的悲剧 他们比他们离弃的故乡变化得更 快 于是他们永远也不可能因回到家乡而感 到幸福 可是 他们在移居的国家也不幸福 因为这不是家乡 瞿世镜 年 外国文学 第 期 这些天来 我觉得来到这个国家 就像是和魔鬼签了协议

More information

1.ai

1.ai HDMI camera ARTRAY CO,. LTD Introduction Thank you for purchasing the ARTCAM HDMI camera series. This manual shows the direction how to use the viewer software. Please refer other instructions or contact

More information

目 录 Linux Mint 简介... 3 Linux Mint 安装... 6 Linux Mint 桌面初识... 18 软件管理...30 小技巧...40 总结...42

目 录 Linux Mint 简介... 3 Linux Mint 安装... 6 Linux Mint 桌面初识... 18 软件管理...30 小技巧...40 总结...42 官方用户手册 Linux Mint 9 Isadora 主版本 翻译 jluliuchao 皮蛋侠 第 1 页/共 42 页 目 录 Linux Mint 简介... 3 Linux Mint 安装... 6 Linux Mint 桌面初识... 18 软件管理...30 小技巧...40 总结...42 Linux Mint 简介 Linux Mint 是一种计算机操作系统 它被设计运行于现今大部分硬件系统

More information

A9RF716.tmp

A9RF716.tmp 1 PART I 1 2 3 4 5 6 7 8 Docker Docker Image Container Repository Docker le Docker Docker 8 1 Docker Linux 2 Docker Docker 3 5 Docker 6 Docker volume 7 8 Docker le Docker le 1 C H A P T E R 1 CPU Data

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Linux 操 作 系 统 基 础 介 绍 课 程 目 标 及 要 求 了 解 Linux 操 作 系 统 的 登 入 方 式 掌 握 常 用 命 令 的 基 本 用 法 能 够 熟 练 在 各 个 目 录 转 换 Outline 1. Linux 操 作 系 统 简 介 2. Linux 操 作 系 统 的 登 录 3. Linux 操 作 系 统 的 目 录 结 构 4. 常 用 命 令 5.

More information

Pro Git

Pro Git Pro Git Table of Contents Pro Git.......................................................................................... 1 Scott Chacon 序..............................................................................

More information

Microsoft Word zw

Microsoft Word zw 第 1 章 Android 概述 学习目标 : Android Android Android Studio Android Android APK 1.1 1. 智能手机的定义 Smartphone 2. 智能手机的发展 1973 4 3 PC IBM 1994 IBM Simon PDA PDA Zaurus OS 1996 Nokia 9000 Communicator Nokia 9000

More information

Eclipse C C++, or

Eclipse C C++,  or Eclipse C C++, Emailctchen@pl.csie.ntut.edu.tw or s1669021@ntut.edu.tw, s2598003@ntut.edu.tw http://pl.csie.ntut.edu.tw/~ctchen, http://www.ntut.edu.tw/~s2598003/ 2004/9/10 (0.02 ) Eclipse http://www.eclipse.org

More information

Ø Ø Microsoft Project Ø Zou Zhige VLSI 2

Ø Ø Microsoft Project Ø Zou Zhige VLSI 2 Ø Ø Microsoft Project Ø Zou Zhige VLSI 2 Ø Ø Ø Zou Zhige VLSI 3 Ø Ø Zou Zhige VLSI 4 Ø CVS remote access edit flag Ø CVS, Zou Zhige VLSI 5 Ø Zou Zhige VLSI 6 l l l Zou Zhige VLSI 7 Ø ( ) CVS : ( ) ( start)

More information

IP505SM_manual_cn.doc

IP505SM_manual_cn.doc IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP

More information

ebook70-5

ebook70-5 5 / 5.1 L i n u x L i n u x X L i n u x 5.1.1 touch t o u c h t o u c h G N U t o u c h # touch newfile # ls -l newfile - r w - r - - r - - 1 bball users 0 Jan 5 12 : 40 n e w f i l e t o u c h 0 # > newfile2

More information

Microsoft Word - template.doc

Microsoft Word - template.doc HGC efax Service User Guide I. Getting Started Page 1 II. Fax Forward Page 2 4 III. Web Viewing Page 5 7 IV. General Management Page 8 12 V. Help Desk Page 13 VI. Logout Page 13 Page 0 I. Getting Started

More information

ebook8-30

ebook8-30 3 0 C C C C C C++ C + + C++ GNU C/C++ GNU egcs UNIX shell s h e l l g a w k P e r l U N I X I / O UNIX shell awk P e r l U N I X C C C C C C U N I X 30.1 C C U N I X 70 C C U N I X U N I X U N I X C Dennis

More information

WinMDI 28

WinMDI 28 WinMDI WinMDI 2 Region Gate Marker Quadrant Excel FACScan IBM-PC MO WinMDI WinMDI IBM-PC Dr. Joseph Trotter the Scripps Research Institute WinMDI HP PC WinMDI WinMDI PC MS WORD, PowerPoint, Excel, LOTUS

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

Windows XP

Windows XP Windows XP What is Windows XP Windows is an Operating System An Operating System is the program that controls the hardware of your computer, and gives you an interface that allows you and other programs

More information

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南 Symantec Sygate Enterprise Protection 防 护 代 理 安 装 使 用 指 南 5.1 版 版 权 信 息 Copyright 2005 Symantec Corporation. 2005 年 Symantec Corporation 版 权 所 有 All rights reserved. 保 留 所 有 权 利 Symantec Symantec 徽 标 Sygate

More information

ebook140-9

ebook140-9 9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I

More information

ebook70-11

ebook70-11 11 L i n u x p i n e M e s s e n g e r P P P I S 11.1 s e n d m a i l U N I X O p e n L i n u x U N I X O p e n L i n u x O p e n L i n u x s e n d m a i l O p e n L i n u x ( 11-1 ) 11-1 O p e n L i n

More information

AL-M200 Series

AL-M200 Series NPD4754-00 TC ( ) Windows 7 1. [Start ( )] [Control Panel ()] [Network and Internet ( )] 2. [Network and Sharing Center ( )] 3. [Change adapter settings ( )] 4. 3 Windows XP 1. [Start ( )] [Control Panel

More information

Serial ATA ( Silicon Image SiI3114)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 5 (4) S A T A... 8 (5) S A T A... 10

Serial ATA ( Silicon Image SiI3114)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 5 (4) S A T A... 8 (5) S A T A... 10 Serial ATA ( Silicon Image SiI3114)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 5 (4) S A T A... 8 (5) S A T A... 10 Ác Åé å Serial ATA ( Silicon Image SiI3114) S A T A (1) SATA (2)

More information

AL-MX200 Series

AL-MX200 Series PostScript Level3 Compatible NPD4760-00 TC Seiko Epson Corporation Seiko Epson Corporation ( ) Seiko Epson Corporation Seiko Epson Corporation Epson Seiko Epson Corporation Apple Bonjour ColorSync Macintosh

More information

CANVIO_AEROCAST_CS_EN.indd

CANVIO_AEROCAST_CS_EN.indd 简 体 中 文...2 English...4 SC5151-A0 简 体 中 文 步 骤 2: 了 解 您 的 CANVIO AeroCast CANVIO AeroCast 无 线 移 动 硬 盘 快 速 入 门 指 南 欢 迎 并 感 谢 您 选 择 TOSHIBA 产 品 有 关 您 的 TOSHIBA 产 品 的 详 情, 请 参 阅 包 含 更 多 信 息 的 用 户 手 册 () 安

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

國 立 政 治 大 學 教 育 學 系 2016 新 生 入 學 手 冊 目 錄 表 11 國 立 政 治 大 學 教 育 學 系 博 士 班 資 格 考 試 抵 免 申 請 表... 46 論 文 題 目 申 報 暨 指 導 教 授... 47 表 12 國 立 政 治 大 學 碩 博 士 班 論

國 立 政 治 大 學 教 育 學 系 2016 新 生 入 學 手 冊 目 錄 表 11 國 立 政 治 大 學 教 育 學 系 博 士 班 資 格 考 試 抵 免 申 請 表... 46 論 文 題 目 申 報 暨 指 導 教 授... 47 表 12 國 立 政 治 大 學 碩 博 士 班 論 國 立 政 治 大 學 教 育 學 系 2016 新 生 入 學 手 冊 目 錄 一 教 育 學 系 簡 介... 1 ( 一 ) 成 立 時 間... 1 ( 二 ) 教 育 目 標 與 發 展 方 向... 1 ( 三 ) 授 課 師 資... 2 ( 四 ) 行 政 人 員... 3 ( 五 ) 核 心 能 力 與 課 程 規 劃... 3 ( 六 ) 空 間 環 境... 12 ( 七 )

More information

epub 61-2

epub 61-2 2 Web Dreamweaver UltraDev Dreamweaver 3 We b We b We Dreamweaver UltraDev We b Dreamweaver UltraDev We b We b 2.1 Web We b We b D r e a m w e a v e r J a v a S c r i p t We b We b 2.1.1 Web We b C C +

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al RMAN sql> sqlplus / as sysdba 查看数据库版本 sql> select * from v$version; 查看数据库名称 sql> show parameter db_name; 一 使用 RMAN 时, 需要将数据库设置成归档模式 sql> conn / as sysdba; sql> show user 查看数据库是否为归档模式 sql> archive log list

More information

软件概述

软件概述 Cobra DocGuard BEIJING E-SAFENET SCIENCE & TECHNOLOGY CO.,LTD. 2003 3 20 35 1002 010-82332490 http://www.esafenet.com Cobra DocGuard White Book 1 1....4 1.1...4 1.2 CDG...4 1.3 CDG...4 1.4 CDG...5 1.5

More information

2005 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A. Sun Sun Berkeley BSD UNIX X/Open Company, Ltd. / Sun Sun Microsystems Su

2005 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A. Sun Sun Berkeley BSD UNIX X/Open Company, Ltd. / Sun Sun Microsystems Su Java Desktop System Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA 95054 U.S.A. : 819 0675 10 2005 2 2005 Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, CA 95054 U.S.A. Sun Sun Berkeley

More information

IDEO_HCD_0716

IDEO_HCD_0716 IDEO HCD Toolkit Tencent CDC ...? Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC

More information

Guide to Install SATA Hard Disks

Guide to Install SATA Hard Disks SATA RAID 1. SATA. 2 1.1 SATA. 2 1.2 SATA 2 2. RAID (RAID 0 / RAID 1 / JBOD).. 4 2.1 RAID. 4 2.2 RAID 5 2.3 RAID 0 6 2.4 RAID 1.. 10 2.5 JBOD.. 16 3. Windows 2000 / Windows XP 20 1. SATA 1.1 SATA Serial

More information

K7VT2_QIG_v3

K7VT2_QIG_v3 ............ 1 2 3 4 5 [R] : Enter Raid setup utility 6 Press[A]keytocreateRAID RAID Type: JBOD RAID 0 RAID 1: 2 7 RAID 0 Auto Create Manual Create: 2 RAID 0 Block Size: 16K 32K

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

Some experiences in working with Madagascar: installa7on & development Tengfei Wang, Peng Zou Tongji university

Some experiences in working with Madagascar: installa7on & development Tengfei Wang, Peng Zou Tongji university Some experiences in working with Madagascar: installa7on & development Tengfei Wang, Peng Zou Tongji university Map data @ Google Reproducible research in Madagascar How to conduct a successful installation

More information

像 客 样 使 命令行 徐 东

像 客 样 使 命令行 徐 东 像 客 样 使 命令行 徐 东 1 1.1................................ 1 1.2................................. 3 1.3............................. 4 1.3.1 Linux............................ 5 1.3.2 macos............................

More information

PTS7_Manual.PDF

PTS7_Manual.PDF User Manual Soliton Technologies CO., LTD www.soliton.com.tw - PCI V2.2. - PCI 32-bit / 33MHz * 2 - Zero Skew CLK Signal Generator. - (each Slot). -. - PCI. - Hot-Swap - DOS, Windows 98/2000/XP, Linux

More information

Microsoft Word - SupplyIT manual 3_cn_david.doc

Microsoft Word - SupplyIT manual 3_cn_david.doc MR PRICE Supply IT Lynette Rajiah 1 3 2 4 3 5 4 7 4.1 8 4.2 8 4.3 8 5 9 6 10 6.1 16 6.2 17 6.3 18 7 21 7.1 24 7.2 25 7.3 26 7.4 27 7.5 28 7.6 29 7.7 30 7.8 31 7.9 32 7.10 32 7.11 33 7.12 34 1 7.13 35 7.14

More information

lect03.ppt

lect03.ppt Linux 操 作 系 统 Linux 基 础 主 要 内 容 q 使 用 Linux q Linux 的 两 种 登 录 方 式 q 字 符 操 作 环 境 和 X Windows 系 统 q Linux 图 形 界 面 基 本 操 作 q Linux 命 令 的 使 用 方 式 q Linux 一 些 常 用 命 令 1 2 一 些 基 本 术 语 u 命 令 (Command) 给 计 算 机

More information

一 Grass 是 什 么 1 简 介 GRASS (Geographic Resources Analysis Support System, 地 理 资 源 分 析 支 持 系 统 ) 是 最 负 盛 名 的 开 源 地 理 信 息 系 统 (GIS) 以 下 是 它 的 一 些 特 点 : 1

一 Grass 是 什 么 1 简 介 GRASS (Geographic Resources Analysis Support System, 地 理 资 源 分 析 支 持 系 统 ) 是 最 负 盛 名 的 开 源 地 理 信 息 系 统 (GIS) 以 下 是 它 的 一 些 特 点 : 1 GRASS 中 文 教 程 作 者 : 广 东 省 东 莞 市 长 安 中 学 文 合 平 E_mail: wenheping@gmail.com 2007 年 9 月 1 一 Grass 是 什 么 1 简 介 GRASS (Geographic Resources Analysis Support System, 地 理 资 源 分 析 支 持 系 统 ) 是 最 负 盛 名 的 开 源 地 理

More information

Linux Ubuntu Part Linux Ubuntu Linux UNIX...19 Linux...19 Linux Linux...21 Linux GNU FSF Open So urce.

Linux Ubuntu Part Linux Ubuntu Linux UNIX...19 Linux...19 Linux Linux...21 Linux GNU FSF Open So urce. Linux Ubuntu 10.04 Part 1 17 1 Linux Ubuntu... 18 1-1 Linux... 19 UNIX...19 Linux...19 Linux...20...20 Linux...21 Linux...21 1-2 GNU FSF Open So urce...22 GNU...22 GPL...23...24 1-3 GNU/Linux V.S. Linux...25

More information

ebook140-8

ebook140-8 8 Microsoft VPN Windows NT 4 V P N Windows 98 Client 7 Vintage Air V P N 7 Wi n d o w s NT V P N 7 VPN ( ) 7 Novell NetWare VPN 8.1 PPTP NT4 VPN Q 154091 M i c r o s o f t Windows NT RAS [ ] Windows NT4

More information

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG --------------------------------------------TABLE OF CONTENTS------------------------------------------

More information

Olav Lundström MicroSCADA Pro Marketing & Sales 2005 ABB - 1-1MRS755673

Olav Lundström MicroSCADA Pro Marketing & Sales 2005 ABB - 1-1MRS755673 Olav Lundström MicroSCADA Pro Marketing & Sales 2005 ABB - 1 - Contents MicroSCADA Pro Portal Marketing and sales Ordering MicroSCADA Pro Partners Club 2005 ABB - 2 - MicroSCADA Pro - Portal Imagine that

More information

Xcode 4.6 Dmg File. arts related Airway array tiene saison Site mentored

Xcode 4.6 Dmg File. arts related Airway array tiene saison Site mentored Xcode 4.6 Dmg File ->->->-> http://shurll.com/9xx2x 1 / 5 2 / 5 6,,,months,,,ago,,,... xcode4.6,,,-,,,how,,,download,,,xcode,,,dmg,,,file?,,,-,,,stack,,,overflow,,,xcode4. 6,,,-,,,how,,,download,,,xcode,,,dmg,,,file?,,,-,,,Stack,,,Overflow,,,xcode6_beta2.dmg

More information

ebook35-2

ebook35-2 2 2.1 Linux login Login: < > Password: < > Linux r o o t l o g o u t 2.2 Linux X Window Linux Linux Bourne ( b s h ) C ( c s h ) Korn ( k s h ) Bourne Steven Bourne UNIX Bourne bash Bourne C Bill Joy Bourne

More information

ch_code_infoaccess

ch_code_infoaccess 地 產 代 理 監 管 局 公 開 資 料 守 則 2014 年 5 月 目 錄 引 言 第 1 部 段 數 適 用 範 圍 1.1-1.2 監 管 局 部 門 1.1 紀 律 研 訊 1.2 提 供 資 料 1.3-1.6 按 慣 例 公 布 或 供 查 閱 的 資 料 1.3-1.4 應 要 求 提 供 的 資 料 1.5 法 定 義 務 及 限 制 1.6 程 序 1.7-1.19 公 開 資

More information

iGENUS爱琴思邮件系统技术白皮书

iGENUS爱琴思邮件系统技术白皮书 igenus 爱 琴 思 邮 件 系 统 技 术 白 皮 书 Http://www.iGENUS.cn 版 权 信 息 igenus 爱 琴 思 邮 件 系 统 版 权 所 有 2009 爱 琴 思 科 技 ( 成 都 ) 有 限 公 司 igenus information technologies Inc.,Chengdu 文 档 保 证 声 明 本 文 档 以 提 供 信 息 为 目 的, 所

More information

LSC操作说明

LSC操作说明 1 C H R I S T A L P H A 1-4 LSC 型 Part. No. 102041 A L P H A 2-4 LSC 型 Part. No. 10204 冷 冻 干 燥 机 操 作 说 明 新 研 制 的 LSC-8 控 制 器, 具 备 图 形 显 示 功 能, 能 以 数 据 表 形 式 显 示 参 数, 并 可 选 配 控 制 软 件 LSC-8 1/4 VGA 大 屏 幕

More information

untitled

untitled MySQL DBMS under Win32 Editor: Jung Yi Lin, Database Lab, CS, NCTU, 2005/09/16 MySQL 料 理 MySQL 兩 Commercial License 利 GPL MySQL http://www.mysql.com Developer Zone http://www.mysql.com Download 連 連 MySQL

More information

* 4 6 R P r p . 1 2 3 4 7 89bk 6 5 1 2 3 4 5 6 7 8 9 0 bk r bl bm bn^ bo bl br bq bpbo bn bm [ ] [ ] [ ] bp 8 2 4 6 bq p [ ] [SET] br clckbt bs bs bt ck cl. 1 2 1 2+- 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

修改版-操作手册.doc

修改版-操作手册.doc 职 称 信 息 系 统 升 级 指 南 须 使 用 IE9 及 其 以 上 版 本 浏 览 器 或 谷 歌 浏 览 器 登 录 www.njrs.gov.cn 南 京 市 职 称 ( 职 业 资 格 ) 工 作 领 导 小 组 办 公 室 2016 年 5 月 目 录 一 申 报 人 员 操 作 指 南...1 1.1 职 称 初 定 申 报...1 1.1.1 职 称 初 定 基 础 信 息 填

More information

本文由筱驀釹贡献

本文由筱驀釹贡献 本 文 由 筱 驀 釹 贡 献 ppt 文 档 可 能 在 WAP 端 浏 览 体 验 不 佳 建 议 您 优 先 选 择 TXT, 或 下 载 源 文 件 到 本 机 查 看 Linux 操 作 系 统 Linux 操 作 系 统 第 一 部 分 介 绍 与 安 装 Linux 的 由 来 : Linux 的 由 来 : 的 由 来 Linus Torvalds 1.Linux 的 版 本 1.Linux

More information

PowerPoint Presentation

PowerPoint Presentation 立 97 年度 SNMG 練 DNS & BIND enc1215@gmail.com DNS BIND Resolver Named 理 Named 更 DNS DNS Reference 2 DNS DNS 料 domain ip DNS server DNS server 理 DNS server DNS DNS 狀. root name server 理 3 DNS 狀 DNS (2). com

More information

Android 手 机 程 序 设 计 入 门 应 用 到 精 通 内 存 1GB 硬 盘 剩 余 空 间 3GB 如 果 你 的 计 算 机 是 在 3 年 内 购 买 的 新 型 计 算 机, 应 该 能 够 符 合 以 上 的 条 件 如 果 你 的 计 算 机 是 比 较 旧 的 机 型,

Android 手 机 程 序 设 计 入 门 应 用 到 精 通 内 存 1GB 硬 盘 剩 余 空 间 3GB 如 果 你 的 计 算 机 是 在 3 年 内 购 买 的 新 型 计 算 机, 应 该 能 够 符 合 以 上 的 条 件 如 果 你 的 计 算 机 是 比 较 旧 的 机 型, UNIT 4 4 安 装 Android 程 序 开 发 工 具 在 开 始 学 习 编 写 Android 应 用 程 序 之 前, 我 们 必 须 先 搭 建 一 个 Android 应 用 程 序 的 开 发 环 境 建 立 Android 应 用 程 序 开 发 环 境 需 要 安 装 一 些 工 具 软 件, 而 学 习 Android 应 用 程 序 设 置 的 一 大 好 处 是 这

More information

IBM Rational ClearQuest Client for Eclipse 1/ IBM Rational ClearQuest Client for Ecl

IBM Rational ClearQuest Client for Eclipse   1/ IBM Rational ClearQuest Client for Ecl 1/39 Balaji Krish,, IBM Nam LeIBM 2005 4 15 IBM Rational ClearQuest ClearQuest Eclipse Rational ClearQuest / Eclipse Clien Rational ClearQuest Rational ClearQuest Windows Web Rational ClearQuest Client

More information

Logitech Wireless Combo MK45 English

Logitech Wireless Combo MK45 English Logitech Wireless Combo MK45 Setup Guide Logitech Wireless Combo MK45 English................................................................................... 7..........................................

More information

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Terminal Mode No User User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Mon1 Cam-- Mon- Cam-- Prohibited M04 Mon1 Cam03 Mon1 Cam03

More information

1 IT IT IT IT Virtual Machine, VM VM VM VM Operating Systems, OS IT

1 IT IT IT IT Virtual Machine, VM VM VM VM Operating Systems, OS IT 1 IT IT IT IT Virtual Machine, VM VM VM VM Operating Systems, OS IT Chapter 1 了解虛擬化技術種類 硬體 / 平台 / 伺服器虛擬化 VM VM VM CPU Hypervisor VMM Virtual Machine Manager VM Host OS VM VM Guest OS Host OS CPU VM Hyper-V

More information

19板书

19板书 第 十九课 Instructor: Yoyo 对话 一 咱们来 术馆还没 开 门呢 á á ǎ, ě ù ǎ á é ǒ ā é 来 来晚 á ǎ ǐ á ǎ ǎ 参观 个 ǒ ī ā í ì à ā ā í è à ǔ 你真 欢 国画 ǐ ē ǐ ā ō ó à 啊 欢 鸿画 马 ì ǒ ē á ǐ ā ú ē ó à ǎ 跟你 样 很 欢 国画 ǒ ē ǐ í à ě ě ǐ ā ō ó à 从

More information

K301Q-D VRT中英文说明书141009

K301Q-D VRT中英文说明书141009 THE INSTALLING INSTRUCTION FOR CONCEALED TANK Important instuction:.. Please confirm the structure and shape before installing the toilet bowl. Meanwhile measure the exact size H between outfall and infall

More information

els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8

els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8 els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8 Yamaha ELS-0/0C..8 LCD ELS-0/0C v. typeu LCD ELS-0/0C typeu / -6 / [SEARCH] / - ZH ELS-0/0C.8 els0xu_zh_nf_v8.book Page Wednesday, June,

More information

ebook62-1

ebook62-1 1 Red Hat Linux R e d Hat Linux L i n u x X Wi n d o w Red Hat L i n u x 1.1 Red Hat Linux Red Hat 16 M 120 M 3. 5 Intel 386 C D - R O M C D - R O M We b / 1.1.1 L i n u x L i n u 4 Primary Partition Extended

More information

Sophos Central 快速安裝手冊

Sophos Central 快速安裝手冊 Sophos Central 快速安裝手冊 1 1. Sophos Central...5 2....9 3....13 3.1. Enduser Protection...13 3.2. Intercept X...21 3.3....28 3.4....36 3.5....45 3.5.1...45 3.5.2...50 3.5.3...54 3.5.4...57 3.5.5...60 3.6...63

More information

I

I 机 电 一 级 注 册 建 造 师 继 续 教 育 培 训 广 东 培 训 点 网 上 报 名 操 作 使 用 手 册 (2013 年 1 月, 第 一 版 ) 第 一 章 个 人 注 册 与 个 人 信 息 管 理 1. 个 人 注 册 ( 请 每 人 只 申 请 一 个 注 册 号, 如 果 单 位 批 量 报 班 单 位 帮 申 请 注 册, 不 需 个 人 再 注 册 ) 首 次 报 班,

More information

CHN_p000A_Cover.ai

CHN_p000A_Cover.ai NextoDI Co., Ltd. www.nextodi.com 列表........................................................................ 1 3 4 4 6 7 8 9 10 12 14 16 20 01 02 03 04 1 2 3 5 6 4 XCopy Ready B Menu Menu Off Off 05 06

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

未命名 -1

未命名 -1 BV8188M 使 用 说 明 INSTRUCTIONS 使 用 之 前 请 仔 细 阅 读 此 手 册 Please read before using this manual 深 圳 市 碧 维 视 科 技 有 限 公 司 2013 年 碧 维 视 印 刷, 版 权 所 有, 翻 版 必 究, 本 手 册 内 所 有 图 文, 未 经 授 权, 严 谨 与 任 何 方 式 之 全 面 或 部 分

More information

Microsoft Word 放网上

Microsoft Word 放网上 第 13 章 GitHub 托管项目 GitHub 为当前最流行的开源项目托管平台, 数以万计优秀的开源项目被托管在 GitHub 上面 随着越来越多的应用程序转移到云上,Github 已经成为管理软件开发以及发现已有代码的首选方法 对于普通开发人员来讲, 在 GitHub 上托管的项目已经成为了他的一张个人名片 许多优秀的互联网公司在招聘开发人员时都希望对方能够提供个人的 GitHub 地址 当然,GitHub

More information

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知 第 卷 第 期 年 月 开 放 教 育 研 究 何 秋 琳 张 立 春 华 南 师 范 大 学 未 来 教 育 研 究 中 心 广 东 广 州 随 着 图 像 化 技 术 和 电 子 媒 体 的 发 展 视 觉 学 习 也 逐 步 发 展 为 学 习 科 学 的 一 个 研 究 分 支 得 到 研 究 人 员 和 教 育 工 作 者 的 广 泛 关 注 基 于 此 作 者 试 图 对 视 觉 学 习

More information

xforce keygen microsoft office 2013

xforce keygen microsoft office 2013 Xforce Keygen Microsoft Office 2013 ->->->-> http://shurll.com/78610 1 / 5 2 / 5 Generally, Autodesk,,Vault,,Office,,2016,,555H1,,Autodesk,,Vault,,Professional,,2016,,569H1,,Autode sk,,vault,,workgroup,,2016,,559h1,,autodesk,,vehicle,,tracking,,2016,,955h1,,autodesk,,vred...

More information

ch08.PDF

ch08.PDF 8-1 CCNA 8.1 CLI 8.1.1 8-2 8-3 8.1.21600 2500 1600 2500 / IOS 8-4 8.2 8.2.1 A 5 IP CLI 1600 2500 8-5 8.1.2-15 Windows 9598NT 2000 HyperTerminal Hilgraeve Microsoft Cisco HyperTerminal Private Edition (PE)

More information

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP #

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP # iptables 默认安全规则脚本 一 #nat 路由器 ( 一 ) 允许路由 # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT ( 二 ) DNAT 与端口转发 1 启用 DNAT 转发 # iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 dprot 422 -j DNAT to-destination

More information

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( )

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( ) RAID RAID 0 RAID 1 RAID 5 RAID 10 2 2 3 4 * (-1)* (/2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( ) ( ) ( ) Windows USB 1 SATA A. SATASATAIntel SATA (SATA3

More information

untitled

untitled MeetingPlaza Version6.1 License Package NTT IT 2012 11 20 I 1... 4 1-1 Web...4 1-2 MeetingPlaza...4 1-3...4 1-4...5 2... 6 2-1...6 2-2...7 3... 9 3-1...10 3-2...13 3-3...16 3-3-1... 17 3-3-2... 18 3-3-3...

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0 SDChain-Matrix 节点搭建指南 目录 1 环境要求... 3 2 软件下载... 4 3 安装部署... 4 3.1 部署可执行程序目录... 4 3.2 部署配置文件目录... 4 3.3 部署数据库文件目录... 4 3.4 部署日志文件目录... 4 3.5 部署依赖库文件目录... 4 4 配置参数... 5 5 启动运行... 7 5.1 普通模式启动... 7 5.2 加载启动模式...

More information

1 SQL Server 2005 SQL Server Microsoft Windows Server 2003NTFS NTFS SQL Server 2000 Randy Dyess DBA SQL Server SQL Server DBA SQL Server SQL Se

1 SQL Server 2005 SQL Server Microsoft Windows Server 2003NTFS NTFS SQL Server 2000 Randy Dyess DBA SQL Server SQL Server DBA SQL Server SQL Se 1 SQL Server 2005 DBA Microsoft SQL Server SQL ServerSQL Server SQL Server SQL Server SQL Server SQL Server 2005 SQL Server 2005 SQL Server 2005 o o o SQL Server 2005 1 SQL Server 2005... 3 2 SQL Server

More information

运动员治疗用药豁免申报审批办法

运动员治疗用药豁免申报审批办法 运 动 员 治 疗 用 药 豁 免 管 理 办 法 第 一 条 为 了 保 护 运 动 员 的 身 心 健 康, 保 证 运 动 员 的 伤 病 得 到 及 时 安 全 的 治 疗, 保 障 运 动 员 公 平 参 与 体 育 运 动 的 权 利, 根 据 国 务 院 反 兴 奋 剂 条 例, 参 照 世 界 反 兴 奋 剂 条 例 和 治 疗 用 药 豁 免 国 际 标 准 的 有 关 条 款,

More information

GoFlex Home UG Book.book

GoFlex Home UG Book.book FreeAgent GoFlex Home 用 户 指 南 FreeAgent GoFlex Home 用 户 指 南 2011 Seagate Technology LLC. 保 留 所 有 权 利 Seagate Seagate Technology Wave 徽 标 及 FreeAgent 是 Seagate Technology LLC 或 其 某 个 子 公 司 的 商 标 或 注 册 商

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

作 業 系 統 簡 介 光 有 電 腦 硬 體, 會 不 容 易 使 用 必 須 要 有 適 當 的 程 式, 才 方 便 操 作 硬 體 衍 生 作 業 系 統 需 求 : 提 供 方 便 使 用 者 執 行 程 式 平 台 有 效 使 用 各 種 電 腦 硬 體 資 源 Jingo C. Lia

作 業 系 統 簡 介 光 有 電 腦 硬 體, 會 不 容 易 使 用 必 須 要 有 適 當 的 程 式, 才 方 便 操 作 硬 體 衍 生 作 業 系 統 需 求 : 提 供 方 便 使 用 者 執 行 程 式 平 台 有 效 使 用 各 種 電 腦 硬 體 資 源 Jingo C. Lia 第 三 章 作 業 系 統 概 論 Reporter : Jingo C. Liao 廖 正 宏 E-mail : jingo@mail.tku.edu.tw 章 節 列 表 1. 什 麼 是 作 業 系 統 2. 作 業 系 統 的 主 要 功 能 3. 作 業 系 統 的 核 心 程 式 4. 作 業 系 統 的 演 進 歷 史 5. 常 見 流 行 的 作 業 系 統 Jingo C. Liao

More information

2-2 2.1 Mac OS X 相 信 不 少 用 過 Windows 作 業 系 統 的 朋 友 會 將 硬 碟 分 割 成 C D 兩 個 或 者 更 多 槽, 所 有 的 文 件 隨 便 往 D 槽 丟, 應 用 程 式 也 是 隨 便 安 裝 到 不 知 名 的 地 方, 等 到 需 要

2-2 2.1 Mac OS X 相 信 不 少 用 過 Windows 作 業 系 統 的 朋 友 會 將 硬 碟 分 割 成 C D 兩 個 或 者 更 多 槽, 所 有 的 文 件 隨 便 往 D 槽 丟, 應 用 程 式 也 是 隨 便 安 裝 到 不 知 名 的 地 方, 等 到 需 要 2 Mac OS X 的 檔 案 與 硬 碟 在 這 個 章 節 裡 面, 我 們 要 開 始 學 習 在 Mac OS X 上 面 管 理 各 種 檔 案 和 硬 碟 從 認 識 各 個 資 料 夾 以 及 各 種 檔 案 類 型 出 發, 一 直 到 管 理 電 腦 上 的 硬 碟 以 及 安 裝 Windows, 基 本 的 概 念 有 了 之 後, 就 可 以 向 電 腦 恐 懼 症 說 再

More information

Microsoft PowerPoint - Emerson 365 External Manual_CN.pptx

Microsoft PowerPoint - Emerson 365 External Manual_CN.pptx 艾 默 生 365 社 区 使 用 手 册 http:// www.emersonexchange365.com/china 提 纲 艾 默 生 365 社 区 网 站 介 绍 如 何 注 册 成 为 会 员 如 何 加 入 中 国 交 流 平 台 365 中 国 社 区 结 构 及 主 要 功 能 介 绍 小 贴 士 艾 默 生 365 社 区 介 绍 艾 默 生 365 是 一 个 全 球 范

More information

Chapter 2

Chapter 2 2 (Setup) ETAP PowerStation ETAP ETAP PowerStation PowerStation PowerPlot ODBC SQL Server Oracle SQL Server Oracle Windows SQL Server Oracle PowerStation PowerStation PowerStation PowerStation ETAP PowerStation

More information

Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE "Project Properties" IDE makefile 1.

Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE Project Properties IDE makefile 1. Oracle Solaris Studio 12.2 IDE 2010 9 2 8 9 10 11 13 20 26 28 30 32 33 Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE "Project Properties" IDE makefile 1. "File" > "New

More information

Microsoft Word - PS2_linux_guide_cn.doc

Microsoft Word - PS2_linux_guide_cn.doc Linux For $ONY PlayStatioin2 Unofficall General Guide Language: Simplified Chinese First Write By Beter Hans v0.1 Mail: hansb@citiz.net Version: 0.1 本 人 是 菜 鸟 + 小 白 欢 迎 指 正 错 误 之 处, 如 果 您 有 其 他 使 用 心 得

More information

Untitiled

Untitiled 目 立人1 2011 录 目 录 专家视点 权利与责任 班主任批评权的有效运用 齐学红 3 德育园地 立 沿着鲁迅爷爷的足迹 主题队活动案例 郑海娟 4 播下一颗美丽的种子 沿着鲁迅爷爷的足迹 中队活动反思 郑海娟 5 赠人玫瑰 手有余香 关于培养小学生服务意识的一些尝试和思考 孙 勤 6 人 教海纵横 2011 年第 1 期 总第 9 期 主办单位 绍兴市鲁迅小学教育集团 顾 问 编委会主任 编

More information

Microsoft PowerPoint - lect01.ppt

Microsoft PowerPoint - lect01.ppt Linux 操 作 系 统 潘 建 瑜 华 东 师 范 大 学 数 学 系 jypan@math.ecnu.edu.cn Linux 操 作 系 统 教 材 : 以 课 堂 讲 义 为 主 上 课 时 间 : 周 五 5 6 7 第 三 教 学 楼 231 上 机 时 间 : 周 五 5 6 7 数 学 楼 200B 机 房 ( 暂 定 于 第 3 7 10 13 16 18 周 ) 课 程 主 页

More information

ebook 185-6

ebook 185-6 6 Red Hat Linux DB2 Universal Database 6.1 D B 2 Red Hat D B 2 Control Center D B 2 D B 2 D B 2 6.1 DB2 Universal Database [DB2]6.1 D B 2 O LT P O L A P D B 2 I B M P C We e k D B 2 D B 2 L i n u x Windows

More information

通 用 申 请 填 写 流 程 简 图 首 次 登 陆 已 注 册 用 户 登 录 ( 最 终 提 交 前 可 无 限 次 登 录 修 改 ) 注 册 账 户 College Search 中 添 加 New York University Common App 填 写 ( 包 含 两 篇 写 作

通 用 申 请 填 写 流 程 简 图 首 次 登 陆 已 注 册 用 户 登 录 ( 最 终 提 交 前 可 无 限 次 登 录 修 改 ) 注 册 账 户 College Search 中 添 加 New York University Common App 填 写 ( 包 含 两 篇 写 作 上 海 纽 约 大 学 2017 年 秋 季 入 学 Common Application( 通 用 申 请 ) 填 写 指 导 教 程 上 海 纽 约 大 学 是 中 国 教 育 部 正 式 批 准 设 立 的 第 一 所 中 美 合 作 大 学, 也 是 纽 约 大 学 全 球 教 育 体 系 (Global Network University) 的 组 成 部 分, 与 纽 约 校 园 阿

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

ebook70-13

ebook70-13 1 3 I S P O p e n L i n u x Point to Point Protocol P P P I S P L i n u x 10 L i n u x World Wide We b 13.1 We b f t p ( ) f t p (File Transfer Protocol F T P ) F T P g e t p u t 13. 1. 1 F T P f t p n

More information

Linux 操作系统课程社区创作

Linux 操作系统课程社区创作 学 号 14284060xx 等 第 苏 州 大 学 实 验 报 告 Linux 操 作 系 统 课 程 社 区 创 作 院 ( 系 ) 名 称 : 电 子 信 息 学 院 专 业 名 称 : 14 通 信 工 程 ( 嵌 入 式 培 养 ) 学 生 姓 名 : 某 某 某 课 程 名 称 : Linux 操 作 系 统 2015-2016 学 年 第 一 学 期 1 摘 要 这 是 摘 要 主 要

More information