操作系统:windows 64
主要参考:https://docs.github.com/cn/desktop
http://book.git-scm.com/book/zh/v2
本篇接上篇《第55篇 笔记-Git 基础》,默认已具备git环境;
目录
GitHub Desktop 是一个使用 GUI 而非命令行或网络浏览器与 GitHub 交互的应用程序。 GitHub Desktop 鼓励个人和团队使用最佳实践协作处理 Git 和 GitHub。 您可以使用 GitHub Desktop,通过视觉确认更改从桌面完成大部分 Git 命令。 您可以使用 GitHub Desktop 推送到、从中拉取和克隆远程仓库,以及使用协作工具,如归因提交和创建拉取请求。
GitHub Desktop 是一个开源项目,当前支持 macOS 和 Windows 操作系统。
一、基础操作
1.下载
要安装 GitHub Desktop,请访问 GitHub Desktop 的下载页面。
2.安装
点击下载的文件 “GitHubDesktopSetup.exe” 开始安装:
如果已经有账号,可以直接登录;本文跳过(Skip this step);
此处为本地信息,安装到本界面时,直接从git的配置里读出;Continue;
本次安装没有提示“安装完毕” 步骤,而是直接进入使用界面;
为便于测试,本文选择创建一个新的仓库;
结果,会在选择目录下新建一个目录(即图中的Name),因此不需要提前建好本地目录;
然后就进入主界面了:
3.账号登录
在安装的第一个界面,本文跳过了账号,因此在这里登录;点击菜单 File / Options,进行账号登录;
进入认证界面:此时需要输入密码,该密码即登录 github.com 时的账号密码;
成功登陆后,File / Options 界面会显示登录状态;
4.提交仓库
拷贝一个目录(含go源码文件)到本地仓库目录下,界面自动显示:
通过菜单 File \ Add local repository 可以增加和管理多个本地仓库实例:
可以切换添加进来的仓库,再也不需要cd来cd去了,白色框内是改变提醒,下面是提交修改。所以整个工作流程是有修改直接 commit 就行了。
在界面左下角区域,输入 Summary(required)和 Description 的内容,直接点击按钮 “Commit to main” ,进行提交;
然后点击 “Publish repository” ;
填写:Name 和 Description;该步骤将会在 Github.com 新创建一个名为 [Name] 的仓库,因此无需提前在 GitHub.com 创建仓库);
本文勾选“keep this code private”;
成功以后查看:
5.集成环境设置
点击菜单 File / Options,进行integrations集成环境设置,本文设置为Visual Studio Code;
保存,之后可以在界面直接打开 vscode,对当前仓库进行编辑;
二、分支管理
在进行提交操作时,Git 会保存一个提交对象(commit object)。
知道了 Git 保存数据的方式,我们可以很自然的想到——该提交对象会包含一个指向暂存内容快照的指针。 但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。
首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象, 而由多个分支合并产生的提交对象有多个父对象;
本文从一个新的仓库开始。
1.创建新仓库
将下载的 go-ethereum-1.9.21.tar.gz 文件解压,创建本地仓库;
直接按钮 “Publish repository”;
仅用了以上两个步骤,传输成功:
2.创建分支
当使用 git commit
进行提交操作时,Git 会先计算每一个文件计算校验和每一个子目录的校验和(使用 SHA-1 哈希算法), 然后在 Git 仓库中这些校验和保存为树对象。随后,Git 便会创建一个提交对象, 它除了包含上面提到的那些信息外,还包含指向这个树对象(项目根目录)的指针。 如此一来,Git 就可以在需要的时候重现此次保存的快照。
现在,Git 仓库中有三类对象:多个 blob 对象(保存着文件快照)、一个 树 对象 (记录着目录结构和 blob 对象索引)以及一个 提交 对象(包含着指向前述树对象的指针和所有提交信息)。
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master
(本例即如此)。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master
分支。 master
分支会在每次提交时自动向前移动。
Git 的 master
分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init
命令默认创建它,并且大多数人都懒得去改动它。
Git 是创建新分支很简单,它只是为你创建了一个可以移动的新的指针。 比如,创建一个 testing 分支, 你需要使用 git branch
命令:
$ git branch testing
这会在当前所在的提交对象上创建一个指针。
Git 是怎么知道当前在哪一个分支上呢? 它有一个名为 HEAD
的特殊指针,指向当前所在的本地分支(将 HEAD
想象为当前分支的别名)。
在本例中,你仍然在 master
分支上。 因为 git branch
命令仅仅 创建 一个新分支,并不会自动切换到新分支中去。
要切换到一个已存在的分支,你需要使用 git checkout
命令。
$ git checkout testing
本文在 GitHub Desktop 的菜单 Branch / New branch 创建新分支;
点击 Create branch ,即创建新分支成功,并且会自动切换到新的分支;
相当于命令:
$ git checkout -b testing //创建一个新分支,并切换过去
3.推送分支
本文在没有做任何修改的情况下,对分支 testing 进行提交操作 Publish repository,成功推送到服务端;
在 GitHub Desktop 点击按钮 “ Open in Visual Studio Code ” ,对 geth 程序进行编译,编译后直接关掉 VSCode,返回 GitHub Desktop;
显示增加了一个文件,直接 Commit go testing;并 “Push origin”;推送成功,testing 分支有相应修改:
此时, testing
分支向前移动了,但是 master
分支却没有,它仍然指向之前所指的对象。
4.合并分支
在合并的时候,应该注意“快进(fast-forward)”这个词。 由于你想要合并的分支 testing
所指向的提交 87ab2
是你所在的提交 f30ab
的直接后继, 因此 Git 会直接将指针向前移动。换句话说,当你试图合并两个分支时, 如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候, 只会简单的将指针向前推进(指针右移),因为这种情况下的合并操作没有需要解决的分歧——这就叫做 “快进(fast-forward)”。
$ git checkout master //切换分支
$ git merge testing //快进方式合并分支
在 GitHub Desktop 切换到 master 分支,点击目录 “ Branch \ Merge into current branch ” ,进行合并操作;
显示合并成功,直接 “Push origin” 进行推送;推送成功,就可以到 github.com 查看结果,显示 master 分支已经多了编译结果文件;
5.删除分支
既然修改的内容已经合并进来了,就不再需要 testing
分支了。 现在你可以在任务追踪系统中关闭此项任务,并删除这个分支。
$ git branch -d testing
在 GitHub Desktop 切换到 testing 分支,点击目录 “ Branch \ Delete ” ,进行分支删除操作;
其中远程分支是否删除,可选;
本文操作完成后,testing 分支在本地和远程服务器均被删除;实际操作中,master 分支无法删除,只能通过删除该仓库,进行 master 分支的删除;
注意:如果超过特定限制,GitHub Desktop 将会拒绝推送。
- 推送包含大小超过 100 MB 的大文件。
- 推送总大小超过 2 GB。