1 / 39

Introduction to git

Introduction to git. 清华大学 计 35 温和. git 是一个 分布式 版本控制 软件 什么是 版本 ? 这样有什么不好? 1. 重复冗余 2. 难以管理 …… 所以我们有了 git. git 是一个 分布式 版本控制 软件 什么是分布式? 所谓分布式,就是去中心化 每个人都拥有所有的数据,不用担心服务器挂掉. git 能做什么?. 保存历史记录 数据同步 分支与合并. 在 XLP 中 …. 数据、内容的管理平台 所有 的数字内容都将由 git 进行 管理,通过 git 进行互动 团队 的分工与合作 平台

baby
Download Presentation

Introduction to git

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction to git 清华大学 计35 温和

  2. git是一个分布式版本控制软件 • 什么是版本? • 这样有什么不好? • 1.重复冗余 • 2.难以管理 • …… • 所以我们有了git

  3. git是一个分布式版本控制软件 • 什么是分布式? • 所谓分布式,就是去中心化 • 每个人都拥有所有的数据,不用担心服务器挂掉

  4. git能做什么? • 保存历史记录 • 数据同步 • 分支与合并

  5. 在XLP中… • 数据、内容的管理平台 • 所有的数字内容都将由git进行管理,通过git进行互动 • 团队的分工与合作平台 • 团队使用git进行任务分解,分工合作 • 过程的记录 • 经由git的历史,记录项目中的所有进展记录

  6. git的使用

  7. 基本概念 本地空间 暂存空间 历史空间 远程空间

  8. A.txt Workspace git add A.txt Staging Area 新建一个文件 git commit git checkout -- Repository git reset git push Remote git pull

  9. git add • git add xxx • 其中xxx为你要加入Staging Area的文件名。 • 每当你新建或者编辑了文件之后都要执行add操作

  10. git commit (核心概念) • git commit –m “commit message” • 其中引号括起来的commit message为你对这次commit的描述。 • 如果你仅仅编辑了文件而没有新建,可以使用下述命令跳过前述add的步骤: • git commit –a –m “commit message”

  11. git push • git push origin master • 将本地repository中master分支的commit上传到origin/master • 其中origin为你定义的默认的remote名字,理解成指定的服务器就好 • master是默认的主分支 • 具体意义容后讲解

  12. git pull • git pull origin master • 完全类似于push,只不过把push换成了pull,表示从origin/master更新本地repository的master • pull可能导致conflict,需要手动解决

  13. git reset • git reset HEAD^ • commit的反操作,将repository的状态设置为上一次提交前的状态(抹去最后一次commit的历史) • 注意本地的文件并不会恢复 • HEAD^可以换成任意一次commit的hashvalue • 如果要完全回退到某次提交(包括文件),使用 • git reset –-hard HEAD^ • (HEAD^同样可换成任意一次commit的hash value)

  14. git checkout -- • git checkout -- xxx • 其中xxx为你要撤销更改的文件名 • 这个操作把你上次add之后对这个文件更改全部丢弃(就是将staging area里面的状态还原到workspace)

  15. Workspace 记住这个概念图 可以解决很多问题 git add Staging Area git commit git checkout -- Repository git reset git push Remote git pull

  16. 关于remote • git remote add origin git@166.111.59.15:moreD/git-intro.git • 这句命令就添加了一个对应的远端git服务器 • git的通讯协议有两种(http与ssh): • http://166.111.59.15:8000/moreD/git-intro.git • git@166.111.59.15:moreD/git-intro.git • 第一种直接使用网站用户名密码进行认证 • 第二种使用ssh中的rsa key进行认证

  17. git remote • git remote add origin git@166.111.59.15:moreD/git-intro.git • 添加一个名为origin,地址为git@166.111.59.15:moreD/git-intro.git的服务器 • git remote add backup git@166.111.198.141:moreD/git-intro.git • 添加一个名为backup,地址为git@166.111.198.141:moreD/git-intro.git的分支 • 服务器名随便取

  18. 使用不同remote • git push backup master • 将本地的master推送到backup的master(注意这和origin就是不同的服务器了) • 注意使用不同remote来进行数据备份 • 现场会提供至少两台额外的服务器,

  19. git clone • gitclone git@166.111.59.15:moreD/git-intro.git • 这句命令就将一个网站上的project完整复制到当前目录下,同时建立好了本地与服务器的对应关系,即自动添加了一个remote origin,指向clone的地址。 • 在网站上新建项目或fork项目,然后clone

  20. 什么是fork? • 简而言之,fork就是在服务器网站上将别人的项目复制一份,复制品归自己所有 • fork之后,你就有了一个与别人的完全一样的项目,你拥有完全的控制权 • 但是这个项目不会和它的来源同步

  21. 介绍一下网站 • http://toyhouse.ie.tsinghua.edu.cn:8000/ • 这是一个gitlab网站,可以作为git服务器使用,同时还有很强大的管理功能。 • fork操作在网站上完成

  22. git tag • tag是commit的一个别名 • git tag v1.0 • 对最后一次commit附加一个名为v1.0的标签 • git tag –a v1.1 –m “An update” • 对最后一次commit附加名为v1.1,注释为“An update”的标签 • 在push的时候使用git push --tags将标签也一并上传

  23. git log • 查看历史提交 • git log查看详细情况 • git log --pretty=oneline每行显示一个commit • gitk可以图形化查看 • 使用git log可以看到每次commit的hash value • git tag v0.9 9efc2da7 可以为历史中的commit加标签,其中9efc2da7为commit的hash value的前若干位

  24. 关于branch • branch的使用是git的特点 • branch之间不会相互影响 • 新建/合并/删除/冲突解决

  25. git checkout • git checkout可用于切换branch • git checkout –b xxx • 新建并切换到名为xxx的branch • git checkout master • 切换到名为master的branch

  26. git merge • git merge slave • 假设你现在正处于master branch,那么这个命令将名为slave的branch合并到master • *什么叫合并 • 简而言之,就是把master和slave自从分开以来在slave上的所有master没有的更改应用到master上 • 可能导致conflict,需要使用人类智慧来解决

  27. 冲突解决 • 冲突只会有一种来源,就是merge • 后面会知道pull的冲突也是来源于merge • 解决方法(三步): • 人工比对两边的不同,使用你的智慧手工修改文件来解决冲突 • 改好之后执行git add .将文件加入Staing Area • 最后git commit –m “…”完成merge操作

  28. git branch • git branch是个管理branch的命令 • 我们只说删除 • git branch –d xxx • 如果xxx分支已被合并到其他分支,删除成功 • 如果没有被合并,删除会失败 • git branch –D xxx

  29. git fetch • 讲完了branch,回到刚才讲过的push和pull • 其实push和pull就是merge,只不过是将本地branch merge到服务器,或是将服务器的branch merge到本地 • 对于只想下载、不想merge的情况,可以用git fetch • git fetch origin slave:slave • 将origin/slave分支下载到本地slave分支,注意指定了两边的分支 • 如果已存在就报错,因为fetch不会merge

  30. 再讲git push • 其实刚才那种指定分支的语法push也支持 • git push origin master:slave • 将本地的slave分支推送到origin的master分支(有merge!) • 还有奇怪的语法 • git push origin :slave (注意冒号前的空格~) • 将空分支推送到origin/slave,就是删除origin服务器的slave分支啦

  31. 还有很多。。。 • 今天就不一一讲解了,如有需要请自行参考文档学习

  32. 关于网站的使用 • Fork Project • Issue • Merge Request

  33. 关于网站的使用 • 注意源项目名 • Setting中改项目名 • 带THUXLP_前缀 • 不要选Public Access

  34. 关于网站的使用 • Issue用来提出问题,可以指定被提问的用户

  35. 关于网站的使用 • Merge Request用于请求分支的合并,同样可以指定请求处理的用户(通常应是管理员) • 因为有的branch在网站上会没有修改权限

  36. 关于网站的使用 • 几个提醒: • 1、请clone名为THUXLP_SurvivalKit的项目,里面有很多重要信息 • 2、THUXLP_ToolKit中有许多工具的安装文件,可以直接在项目的网页中下载,但请不要clone,该项目大小近10GB • 3、小组项目请fork名为THUXLP_ProjectTemplate的项目,该项目有规定的目录结构。请遵守项目中README写出的约定放置文件。

  37. 关于网站的使用 • 几个提醒: • 4、THUXLP_Market、THUXLP_Court、THUXLP_IPOffice这三个Project分别是市场、法庭、专利局。之后会有详细介绍。 • 5、THUXLP_GitTutorial为git的教程项目,可作为参考。(本ppt会出现在THUXLP_GitTutorial中) • 6、THUXLP_HelpDesk中可随意使用Issue提问。欢迎提问不欢迎骚扰~

  38. GUI • 其实git也有很多图形界面版本 • 比如soutcetree,tortoise git等 • 它们可以实现前述的所有功能,但是基本概念和前面的命令行操作是一样的 • 如有需要请自行摸索使用

  39. 讲解到此结束 • 下面是演示时间 • 看过的同学可以回忆一下操作

More Related