400 likes | 1.03k Views
Introduction to git. 清华大学 计 35 温和. git 是一个 分布式 版本控制 软件 什么是 版本 ? 这样有什么不好? 1. 重复冗余 2. 难以管理 …… 所以我们有了 git. git 是一个 分布式 版本控制 软件 什么是分布式? 所谓分布式,就是去中心化 每个人都拥有所有的数据,不用担心服务器挂掉. git 能做什么?. 保存历史记录 数据同步 分支与合并. 在 XLP 中 …. 数据、内容的管理平台 所有 的数字内容都将由 git 进行 管理,通过 git 进行互动 团队 的分工与合作 平台
E N D
Introduction to git 清华大学 计35 温和
git是一个分布式版本控制软件 • 什么是版本? • 这样有什么不好? • 1.重复冗余 • 2.难以管理 • …… • 所以我们有了git
git是一个分布式版本控制软件 • 什么是分布式? • 所谓分布式,就是去中心化 • 每个人都拥有所有的数据,不用担心服务器挂掉
git能做什么? • 保存历史记录 • 数据同步 • 分支与合并
在XLP中… • 数据、内容的管理平台 • 所有的数字内容都将由git进行管理,通过git进行互动 • 团队的分工与合作平台 • 团队使用git进行任务分解,分工合作 • 过程的记录 • 经由git的历史,记录项目中的所有进展记录
基本概念 本地空间 暂存空间 历史空间 远程空间
A.txt Workspace git add A.txt Staging Area 新建一个文件 git commit git checkout -- Repository git reset git push Remote git pull
git add • git add xxx • 其中xxx为你要加入Staging Area的文件名。 • 每当你新建或者编辑了文件之后都要执行add操作
git commit (核心概念) • git commit –m “commit message” • 其中引号括起来的commit message为你对这次commit的描述。 • 如果你仅仅编辑了文件而没有新建,可以使用下述命令跳过前述add的步骤: • git commit –a –m “commit message”
git push • git push origin master • 将本地repository中master分支的commit上传到origin/master • 其中origin为你定义的默认的remote名字,理解成指定的服务器就好 • master是默认的主分支 • 具体意义容后讲解
git pull • git pull origin master • 完全类似于push,只不过把push换成了pull,表示从origin/master更新本地repository的master • pull可能导致conflict,需要手动解决
git reset • git reset HEAD^ • commit的反操作,将repository的状态设置为上一次提交前的状态(抹去最后一次commit的历史) • 注意本地的文件并不会恢复 • HEAD^可以换成任意一次commit的hashvalue • 如果要完全回退到某次提交(包括文件),使用 • git reset –-hard HEAD^ • (HEAD^同样可换成任意一次commit的hash value)
git checkout -- • git checkout -- xxx • 其中xxx为你要撤销更改的文件名 • 这个操作把你上次add之后对这个文件更改全部丢弃(就是将staging area里面的状态还原到workspace)
Workspace 记住这个概念图 可以解决很多问题 git add Staging Area git commit git checkout -- Repository git reset git push Remote git pull
关于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进行认证
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的分支 • 服务器名随便取
使用不同remote • git push backup master • 将本地的master推送到backup的master(注意这和origin就是不同的服务器了) • 注意使用不同remote来进行数据备份 • 现场会提供至少两台额外的服务器,
git clone • gitclone git@166.111.59.15:moreD/git-intro.git • 这句命令就将一个网站上的project完整复制到当前目录下,同时建立好了本地与服务器的对应关系,即自动添加了一个remote origin,指向clone的地址。 • 在网站上新建项目或fork项目,然后clone
什么是fork? • 简而言之,fork就是在服务器网站上将别人的项目复制一份,复制品归自己所有 • fork之后,你就有了一个与别人的完全一样的项目,你拥有完全的控制权 • 但是这个项目不会和它的来源同步
介绍一下网站 • http://toyhouse.ie.tsinghua.edu.cn:8000/ • 这是一个gitlab网站,可以作为git服务器使用,同时还有很强大的管理功能。 • fork操作在网站上完成
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将标签也一并上传
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的前若干位
关于branch • branch的使用是git的特点 • branch之间不会相互影响 • 新建/合并/删除/冲突解决
git checkout • git checkout可用于切换branch • git checkout –b xxx • 新建并切换到名为xxx的branch • git checkout master • 切换到名为master的branch
git merge • git merge slave • 假设你现在正处于master branch,那么这个命令将名为slave的branch合并到master • *什么叫合并 • 简而言之,就是把master和slave自从分开以来在slave上的所有master没有的更改应用到master上 • 可能导致conflict,需要使用人类智慧来解决
冲突解决 • 冲突只会有一种来源,就是merge • 后面会知道pull的冲突也是来源于merge • 解决方法(三步): • 人工比对两边的不同,使用你的智慧手工修改文件来解决冲突 • 改好之后执行git add .将文件加入Staing Area • 最后git commit –m “…”完成merge操作
git branch • git branch是个管理branch的命令 • 我们只说删除 • git branch –d xxx • 如果xxx分支已被合并到其他分支,删除成功 • 如果没有被合并,删除会失败 • git branch –D xxx
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
再讲git push • 其实刚才那种指定分支的语法push也支持 • git push origin master:slave • 将本地的slave分支推送到origin的master分支(有merge!) • 还有奇怪的语法 • git push origin :slave (注意冒号前的空格~) • 将空分支推送到origin/slave,就是删除origin服务器的slave分支啦
还有很多。。。 • 今天就不一一讲解了,如有需要请自行参考文档学习
关于网站的使用 • Fork Project • Issue • Merge Request
关于网站的使用 • 注意源项目名 • Setting中改项目名 • 带THUXLP_前缀 • 不要选Public Access
关于网站的使用 • Issue用来提出问题,可以指定被提问的用户
关于网站的使用 • Merge Request用于请求分支的合并,同样可以指定请求处理的用户(通常应是管理员) • 因为有的branch在网站上会没有修改权限
关于网站的使用 • 几个提醒: • 1、请clone名为THUXLP_SurvivalKit的项目,里面有很多重要信息 • 2、THUXLP_ToolKit中有许多工具的安装文件,可以直接在项目的网页中下载,但请不要clone,该项目大小近10GB • 3、小组项目请fork名为THUXLP_ProjectTemplate的项目,该项目有规定的目录结构。请遵守项目中README写出的约定放置文件。
关于网站的使用 • 几个提醒: • 4、THUXLP_Market、THUXLP_Court、THUXLP_IPOffice这三个Project分别是市场、法庭、专利局。之后会有详细介绍。 • 5、THUXLP_GitTutorial为git的教程项目,可作为参考。(本ppt会出现在THUXLP_GitTutorial中) • 6、THUXLP_HelpDesk中可随意使用Issue提问。欢迎提问不欢迎骚扰~
GUI • 其实git也有很多图形界面版本 • 比如soutcetree,tortoise git等 • 它们可以实现前述的所有功能,但是基本概念和前面的命令行操作是一样的 • 如有需要请自行摸索使用
讲解到此结束 • 下面是演示时间 • 看过的同学可以回忆一下操作