题记
昨天还在知乎上看到一个问题最近十年最让人眼前一亮的产品是什么?,其中有一个回答表示是Github,我深以为然。但很快,同样是在昨天,为了把自己的代码搬到Github上,费劲折腾到了半夜2点。。。
好吧,是我太笨了。折腾了n个小时的问题一定需要记录一下,以免再重蹈覆辙,那么就详细记录一下在Mac上使用Git与Github的姿势。
由于Git本身是一种分布式代码管理工具,不需要中心服务器,所以可以只在本地进行Gitlab的管理,同时也可以共享到Github,与其他人一起分享编辑源代码。故本文包括了基础介绍、创建本地的Gitlab、关联Github三部分内容。
Git与Github
作为Linus继Linux后最伟大的发明和最近5年最伟大的技术网站之一,Git与Github原本不用多费笔墨了。不过对于很多使用SVN的用户,着实还有很多人没有听说过。
简而言之,Git是一种类似SVN的版本的管理工具,但是比SVN先进很多,而Github是最著名的应用Git进行代码托管的网站。
(以下内容摘自维基百科)
Git
Git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。Git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。Git最为出色的是它的合并追踪(merge tracing)能力。
Git和其他版本控制系统(如CVS)有不少的差别,Git本身关心文件的整体性是否有改变,但多数的CVS或Subversion系统则在乎文件内容的差异。因此Git更像一个文件系统,直接在本机上取得数据,不必连接到主机端获取数据。
Github
GitHub 是一个共享虚拟主机服务,用于存放使用Git版本控制的软件代码和内容项目。
GitHub同时提供付费账户和为开源项目提供的免费账户。根据在2009年的Git用户调查,GitHub是最流行的Git访问站点。除了允许个人和组织创建和访问代码库以外,它也提供了一些方便社会化软件开发的功能,包括允许用户跟踪其他用户、组织、软件库的动态,对软件代码的改动和 bug 提出评论等。GitHub也提供了图表功能,用于显示开发者们怎样在代码库上工作以及软件的开发活跃程度。
相关
下面是一些不错的关于Git与Github的资料
- GotGitHub 最详尽Github指南,系统学习必备。
- Git教程 快速上手 快速指南
- Github Help Github官方step by step指南
- Git/Github使用方法小记
创建本地的Gitlab
安装Git
在shell中安装Git。使用Homebrew直接安装Git即可,命令为: $ brew install git
将自己的程序加入Git进行管理
- 进入到自己程序的根目录。
- 初始化Git目录。使用命令:
$ git init
进行初始化。 设置自己的git信息
$ git config --global user.name "yourname"
$ git config --global user.email "youremail""
- 编写.gitignore文件。
touch .gitignore
.gitignore文件的作用是,设置不需要提交的文件。如IDE的配置文件,编译后的文件等,都需要加入到.gitignore文件中管理以确保不提交。详细的配置可自行查询,或者使用我的。 向git仓库中添加源文件。
$ git add .
$ git commit -m "Initial commit"
- 这样应该就完成了向本地Gitlab的第一次提交。重启Xcode后,Source Control下的选项应该都可用了。
关联Github
由于我之前在本地配置过一次Github,昨天换了新账号后再使用,一直各种出错,查询了各种官方文档,折腾了很久才最终搞定,所以这部分写的详尽一些。
与Github关联,有两种方式,SSH方式与HTTP方式。SSH使用证书进行管理,配置好后,每次提交无需再输入用户名密码,本文主要讲解SSH方式的配置。
这一步的操作前,需要先完成上一步的创建本地的Gitlab。
注册Github并创建自己的repository
在官方网站注册Github账号。
注册完成后,点击右上角的 + ,选择New repository创建自己的repository。
创建完成后,进入创建的repository,记住自己的Github id与repository id。
生成并关联本地的SSH密钥
需要在本地生成RSA密钥,并与Github网站进行配对。
这一步比较关键,主要参考的是官方指南。
- 查看是否已有SSH key。执行命令:
$ ls -al ~/.ssh
,如有,则备份删除。如无,则继续执行。 - 生成密钥。执行命令:
$ ssh-keygen -t rsa -C "your_email@your_email.com"
,注意替换。 - 会提示输入保存文件的名字,以及密码。文件名字可不选直接回车,系统会默认生成名为id_rsa的相关文件。
将生成的密钥添加到ssh-agent,使用如下两个命令:
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
执行命令:
$ ls -al ~/.ssh
,可以看到有id_rsa和id_rsa.pub两个文件。- 打开id_rsa.pub文件,并复制下全部内容(注意不要多复制空格)。也可以使用这个命令进行复制:
$ pbcopy < ~/.ssh/id_rsa.pub
- 登录Github网站,登录后,进入Setting—SSH keys—Add SSH Key,将复制的内容添加至此。即可完成SSH key的添加。
- 测试一下。输入命令:
$ ssh -T git@github.com
,如果出现如下提示,则说明成功了。Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
提交代码至Github
最后一步,终于可以将代码提交到Github了。
添加你的Git地址。在终端中执行如下命令,注意替换your-github-id与your-repository-id
$ git remote add origin git@github.com:your-github-id/your-repository-id.git
上面的origin是为远程的Github repository在本地定义的用于关联的别名。添加完成后,可以在Xcode的Source Control—your project name—Configure your project name—Remotes看到已经添加的Remote repository。
- 提交至Github的master分支。执行如下命令:
$ git push origin master
上一步提交时如果失败,提示冲突,则先将远程的内容先pull下来后再重新push。很多教程没有提到这一点,我就是在这里耽误了很久。
$ git pull origin master
$ git push origin master
这样,我们就完成了至Github的提交。进入网站中查看自己的repository,应该就可以看到自己的源代码了。
日后的提交
可以通过命令行提交:
$ git add *
$ git commit -m "write comment here"
$ git push origin master
也可以通过Xcode的Source Control中的Pull与Push命令同步或提交。
本文由金同尧原创,首发于JinTongYao’s blog,转载请注明出处。