[GitHub]第二讲:GitHub客户端
文章转载自http://blog.csdn.net/loadsong/article/details/51591456
Git 是一个分布式的版本控制工具,即使我不联网,也可以在本地进行
git 的版本控制操作。 今天来把前面在 github 上实现的那些版本控制操作在本地重新来一遍。 会有很多新的秘密浮出水面。虽然是本地操作,依然不需要自己安装 git,今天的主角是 Github 公司制作的客户端,我下面用 Mac 版的演示,但是 Windows 客户端,Github
for Windows,的操作也是类似的。
登录
先说说什么是 git 。git 是一套命令行工具,由下面这些“子命令”组成。

虽然最常用的只不过是其中很小的一部分,但是要学会命令行中使用 git 还是有一定难度的,一来是命令行 shell 本身的操作可能很多朋友就不熟悉。另外,即使对熟悉命令行的朋友,直接上手 git 也会因为一下子暴露在很多版本控制的新概念中而感到非常陡峭的学习曲线。所以命令行操作咱们往后放一放。今天一起来用图形化的客户端工具 Github
for Mac,它里面封装了 git,操作上更为美观,固化了一些操作流程,避免了新手一上来就被太多新概念轰炸。
git 的最核心的操作在客户端里都有,满足基本日常使用也就够了。

Github For Mac 客户端的安装跟其他 Mac 下的软件没有区别,很简单,不说了。启动之后要做的第一步就是用 Github.com 上我的账号来登录客户端。之后,如果网络是通的,就可以自动导入各种我在 github.com 上的信息。
添加仓库
往客户端里面添加项目仓库有三种方式。点击上图箭头所指的 + 号,就可以看到了,也就是下面图中的Add,Create,Clone 这三种形式。

可以说这三种形式主要是被添加的仓库来源不同。先说第一种 Add,来源是你本地机器上已经存在的项目,填写它的文件夹位置,然后点击 Create&Add,如果这个项目本身就是一个 git 仓库了,就直接添加进来,如果不是,就把它变成一个 git 仓库(其实也就是在项目内创建一个 .git 文件夹)然后再添加进客户端。
Repository
第二种,create ,就是自己新建项目。填写项目名,这里就叫 GUI 吧,选择项目存放位置,然后点 Create Repository 按钮,仓库就创建好了。这个操作似曾相识吧?跟前面在网站上的创建新仓库是类似的。
第三项,就是从 Github.com 上往本地 clone 。前面我已经用自己的 github 账号登录客户端了,会自动导入 github 上我自己的或者是一些相关的项目进来,选中一个,在本地硬盘上找一个位置存放起来就好了。

要删除一个仓库,就到下图左侧列表的项目名字上,右击,然后点 Remove 就行了。简单说说另外几项,Atom是
github 公司开发的开源免费的代码编辑器,Terminal 是命令行终端,Finder 是文件浏览器。

现在我本地机器上有了项目仓库,下面就可以用任何我喜欢的编辑器来开发项目了。
基本版本控制
来修改一下项目。在 GUI 这个仓库中,创建一个 README 文件,里面随便写点内容。之后,到项目的Changes 一项下面,就可以看到:

首先图中1和2两处可以看到目前项目修改了什么内容。同时可以看到1处是可以勾选的,也就是如果我一次修改了多个文件,可以只把其中的一部分文件勾选上,添加到下一个版本( commit )之中。更为细致的,你可以到右侧的显示修改内容的区域,选择一部分内容添加到下个版本中。默认行号背景是蓝色的,表示内容被选中了,单击行号,这一行的行号背景就会变成绿色(上图2处所示),这样表示取消了选中状态。单击行号可以取消选中。3处要填写版本留言( commit message ) ,先用一行内容说说为啥要做这次修改,下面的大框框里可以写详细的留言,是可选项。最后点击 Commit ( 把新版本做到 master 分支上 )按钮,一个版本就保存好了。master 是默认分支的名字,后面讲分支的时候会细聊。
to master
所以总结起来,从一个 commit 到下一个 commit,也就是从历史上的一个节点到下一个节点,要经历的操作是下面四步:

重复以上四步,再作一个版本出来。这样到客户端的 History 一项下面,就可以看到历史线上已经有两个 commit 了,点开任意一个都可以看到4个w,这个前面已经介绍了。

你可能会问,这里版本号( commit id )怎么是7位呢?其实,commit id 没有例外的都是40位,但是 git 的特点是,真正要用版本号的时候取前几位就行,只要跟其他 commit 区分开就可以。图中给出了前7位,已经是非常安全了。
在 github.com 上也经常会用到缩写的版本号。并且如果打开一个 commit,把地址栏链接中的版本号删除下图红色覆盖的部分,重新加载,也一样可以显示的。

回滚历史
回滚历史操作相当于后悔药。
既然历史版本都已经保存了,那么我要时空穿梭,回到任何一个版本的状态应该也是可以的。比如我刚刚做了一个版本,就发现修改的内容有问题,想要修改一下这个版本。可以到 Changes 选项下,点击页面最底端的undo 标签。

注意,如上图,undo 操作是对 Unsynced 的版本有效,如果版本已经同步到远端,队友已经都看见了你的这个版本,并且可能已经在这个版本的基础上继续开发了,那么直接删除版本会给协作带来麻烦。
当然,对于已经同步到远端仓库的版本,也可以用另外的方式来撤销修改内容。到 History 标签下,打开任何一个 commit ,都可以到小齿轮中选择 Revert 来放弃里面的修改。不过这次不是删除这个版本,而是再新添加一个 commit,里面的修改内容正好和这个 commit 相抵消。之所以不直接删除 commit,是为了避免队友对修改历史产生混淆。
This Commit
也有时候,我一下子觉得最新的5个版本的修改都不想要了,这个怎么来做呢?也简单,点开第6个 commit,然后到小齿轮下点 Roll Back To This Commit,那么代码状态就会“回滚”到这次 commit 的状态了。实现方式也是添加了一个新的 commit,用其中的修改抵消最近5个
commit 的修改内容。如下图。

客户端提供的回滚功能很好用,也非常好理解。但是实际中对于历史回滚,可能还有更为细致的要求,这个未来可以用命令行操作来实现。
连接 Github
一般情况下,我的每一个项目都是两份,一份是本地仓库( local repository ),另一份放到 github.com 上,通常叫远端仓库( remote repository )。这不仅仅能让我感觉到有备份,晚上可以睡好觉了,同时这两个备份也是可以互相同步的,要同步的内容最重要的当然是版本了。git 功能虽然多,但是说白了就是来回折腾 commit ,要不怎么叫版本控制工具呢。
对于从 github 上 clone 下来的我自己的项目,默认的同步通道是通的,因为本地仓库中已经存放了远端仓库的地址。但是,对于自己在本地新建的项目,需要先把它放到 github.com 上。 在客户端界面的右上角,对于从 github.com 上 clone 下来的项目这里是 sync,但是对于
github.com 上没有对应远端仓库的本地仓库,这里就是一个 Publish 按钮。点一下,填写项目名,是的,项目名可以跟本地项目不一样,然后添加项目描述,猛戳Push 按钮,项目就发布到 github.com 上了。如果我的用户名是 happypeter,项目名叫
Repositorycoco 。那在 github.com 上链接也很优美,就是 github.com/happypeter/coco ,现在我可以把链接分享给朋友,邀请他们一起参加项目开发。

注意在标号2的框里面,我可以把项目发布为私有项目,这个功能只对付费用户开放。
同步版本历史
在本地机器上做成一个或者是多个版本,这时候如何把这几个新版本推送( push )到远端仓库上面呢?在客户端中,很简单,就是点一下右上角的 sync 按钮就好了。
也有的时候,我在 github.com 上浏览我项目的内容,突然发现一个拼写错误,也就顺手在 github.com 上点edit 按钮,直接修改做成版本了,这样就等于 github.com 上的远端仓库比我本地多了新版本,这时候我也需要把这个版本拽( pull )到我本地机器上,也是在客户端点一下 sync (
同步 ) 按钮就好了。
稍微梳理一下,本地和远端,也就是我自己的笔记本跟 github 服务器上两个对应仓库的沟通方式就是下面这张图

同步代码的时候,有时候会有代码冲突( conflicts ),需要手动来解决。这个涉及到分支的概念,后面再聊。
总结
更多客户端使用技巧请参考官方帮助 。
[GitHub]第二讲:GitHub客户端的更多相关文章
- Solr第二讲——SolrJ客户端的使用与案例
一.Solrj的使用 1.什么是Solrj solrj是访问Solr服务的java客户端(就像通过jedis操作redis一样),提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过Sol ...
- 我的Python成长之路---GitHub使用之注册GitHub并安装Git客户端
一.注册GitHub账号 进入GitHub官方网站,输入用户名.邮箱地址及密码,点击“Sign up for GitHub”. 选择免费的,不要问我为什么,除非有钱任性选择付费版 验证邮箱地址并激活G ...
- day 112天,爬虫(拉钩网,斗音,GitHub)第二天
提前准备工作.安装准备工作(day3用) 1. 安装scrapy https://www.cnblogs.com/wupeiqi/articles/6229292.html a. 下载twiste ...
- GitHub网页端和客户端操作
参见GitHub上的repository中的moreLove.tata.tata2 moreLove 在网页版GitHub上创建的空项目然后填充的tata 在windows客户端创建的空项目然后填充的 ...
- 学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳
学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳 ...
- 购物商城学习--第二讲(maven工程介绍)
接下来第二讲介绍整体工程如何使用maven搭建的. 使用maven管理工程的好处: jar包的管理: 工程之间的依赖管理: 自动打包 maven常见打包方式:jar.war和pom三种.jar工程,是 ...
- 云空调来自 GitHub 的冷气——GitHub 热点速览 v.21.20
作者:HelloGitHub-小鱼干 万物皆可上云,air-conditioner 是上周火爆小鱼干朋友圈和公众号信息流的云空调项目.第一眼的时候,你会觉得和这个云空调还挺别致的,第二眼,si~~感到 ...
- 如何用Github版本控制非Github库
Git的图形化客户端有很多,不同的人可能习惯用不同的客户端.本人更习惯于Github的客户端,因为上Github比较多,同步代码到Github用官方的客户端是最方便的,所以也就更习惯于使用Github ...
- MySQL实战45讲学习笔记:日志系统(第二讲)
一.重要的日志模块:redo log 1.通过酒店掌柜记账思路刨析redo log工作原理 2.InnoDB 的 redo log 是固定大小的 只要赊账记录在了粉板上或写了账本上,之后即使掌柜忘记了 ...
随机推荐
- 二叉树的基本操作(含Huffman树)
大二时候写的烂代码,翻出来复习复习(o(╯□╰)o). 代码: #include <stdio.h> #include <stdlib.h> #define Max_Size ...
- 面试题2:实现Singleton模式
题目:设计一个类,我们只能生成该类的一个实例.
- unittest测试框架详谈及实操(二)
类级别的setUp()方法与tearDown()方法 在实操(一)的例子中,通过setUp()方法为每个测试方法都创建了一个Chrome实例,并且在每个测试方法执行结束后要关闭实例.是不是觉得有个多余 ...
- 百度ML/DL方向面经
最近败人品败得有些厉害,很多事都处理得不好--感觉有必要做点好事攒一攒. 虽然可能面试经过不是很有代表性,不过参考价值大概还是有的-- 由于当时人在国外,三轮都是电面-- 一面 当地时间早上5点半爬起 ...
- audioplayer.js插件的使用及小bug
之前在项目里用audioplayer.js做的一个页面,改了布局样式,还有插件自身有个bug就是audio添加autoplay属性后有两个音频播放,其中一个无法控制,会一直播放,我查看了官网的demo ...
- BZOJ#1717:[Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组+单调队列)
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的 ...
- python打造一个分析网站SQL注入的脚本
前言: 昨天晚上其实就已经写完代码.只不过向FB投稿了,打算延迟一晚上在写博客 所有才到今天早上写.好了,接下来进入正题. 思路: 1.从网站源码中爬取那些类适于:http://xxx.com/xx. ...
- python笔记三(list、tuple)
一.list list的增删改查 #增, classmates.append("nadech") #在末尾追加一个元素 classmates.insert(1,"agui ...
- Cookie&Session(会话技术)
一.Cookie技术 从打开一个游览器访问某个站点,到关闭这个游览器的整个过程成为一次会话 会话技术分为Cookie和Session Cookie:数据存储在客服端本地,减少对服务端的存储的压力,安全 ...
- Kirill And The Game CodeForces - 842A
CodeForces - 842A 需要将除法改换成乘法进行计算 #include<bits/stdc++.h> using namespace std; int main() { lon ...