git使用详解

原文链接:http://www.jianshu.com/p/eb76480b478d

引言

首先我们先来回顾一下之前的三节我们都学了些什么:
第一节:Git的引入以及关于Git的一些概念,让我们对Git有了一个基本的认识;
第二节:Git的本地操作指令详解,熟悉了一波Git本地操作的指令;
第三节:Git的分支操作,包括分支的创建,切换,处理冲突,合并;
假如学完前面三节,大家后面又自己撸了几次指令,相信应该就有信手拈来的感觉了!
第一节中我们说Git由:工作空间,暂存区,本地仓库和远程仓库这四个部分组成,
前三个部分我们都有涉猎,所以本节讲解的是远程仓库部分的内容!
其实远程仓库也没你想象的那么复杂,可以理解成只是把本地仓库丢到了某个
服务器上,然后别人把你的仓库clone(克隆)或者说拷贝下来而已!又或者说是
多人协作时,各个人本地仓库更改整合的一个媒介而已!

说回这个远程仓库,你可以自己搞台服务器,然后自己搭建,也可以将项目托管
到代码托管网站,比如GithubGitCafeGit@OSCGitLabcoding.net等。
选哪个其实都差不多,都是用来托管代码的而已,下面简单介绍下这几个吧:

  • Github:是最大的代码托管网站,大部分的开发者都喜欢使用这个,但是开源项
    目不收费,而私有项目是要交"保护费"的,而且Github服务器毕竟在国外,国内访
    问可能会有些缓慢!
  • GitCafe:同样私有仓库收保护费,开源仓库免费,但是相比起github有点坑,而且
    是不时会挂掉,不是很推荐...
  • Git@OSC:开源中国社区的,仓库免费,不过协作功能还没有完全体现。
  • GitLab:开源的版本管理系统,可以安装Gitlab CE源码,自己搭服务器;也可以使
    用GitLab EE企业版,GitLab可以配合着其他IM工作使用,比如我司用的瀑布IM,当有人
    推送更新的时候收到推送信息等!
  • coding.net:国内体验最接近Github的产品,有免费版和开发版,高级版,内容可
    自行到官网查看。

好的,最后我们还是选择GitHub作为我们的远程仓库,原因就不多说了。


1.Github账号注册与创建新仓库

注册Github账号

  • 打开注册链接:https://github.com/join
  • 依次填写注册相关信息:用户呢称,邮箱,密码,填写完毕后点击Create an account
  • 打开注册邮箱,打开收到的验证邮件,点击完成账号验证
  • 点击右上角的"Sign in"输入你刚注册的注册邮箱和密码,登陆Github。

创建新仓库

  • 点击右上角,创建一个新仓库

  • 接着依次填写:Repository name(仓库名称),Description(描述信息,可写可不写),
    选择Public仓库,勾选Initialize this repository with a README,自动创建一个README.md
    文件,点击Create repository创建一个仓库。

2.把本地仓库推送到新仓库

这里我们在Android Studio创建一个新的项目,然后来到项目所在的位置,右键git bash
键入:git init将这个项目变成带有git仓库的项目,这里我们拷贝下Github那里我们这个
仓库的地址:


,然后键入下述指令:

git remote add origin https://github.com/coder-pig/SimpleTea.git


指定完远程主机后,我们可以直接键入git remote来查看,或者加上-v:


接着我们键入下述命令把我们的仓库push到github上,这里的-u参数作为第一次提交使用,
作用是把本地master分支和远程master分支关联起来(设置默认远程主机),后续提交不需要这
个参数!

git push -u origin master

这时候打开我们的GitHub就可以看到我们的项目已经成功push上来了!

这里我们是通过git remote来设置远程仓库地址的,假如你想修改远程仓库地址,
比如你把仓库托管换成了Git@OSC,你需要修改远程地址,可以键入:

git remote set-url origin xxxx

来修改远程地址,你也可以先删除origin然后再添加:

git remote rm origin
git remote add origin https://github.com/coder-pig/SimpleTea.git

还可以直接修改.git文件夹里的config文件,直接替换圈住位置:


另外,这个origin不是什么固定的东西,这个只是我们后面那个仓库地址的一个别名!!!
你可以写成其他的东西,比如我的项目既托管在Github又托管在Git@OSC,我可这样设置:

git remote add github https://github.com/coder-pig/SimpleTea.git
git remote add osc [email protected]:coder-pig/SimpleTea.git

这一点要弄清楚!!!


3.为项目添加SSH Key免去提交输入账号密码的麻烦

不知道细心的你有没有发现,仓库地址除了Https外,还有一个SSH,这里我们简单介绍下
两者的区别,第一点:使用Https url可以任意克隆Github上的项目;而是用SSH url
克隆的话,你必须是项目的拥有者或管理员,而且还要添加SSH Key,否则会无法克隆。
还有一点是,Https每次push都需要输入用户名和密码,而使用SSH则不需要输入用户名
如果配置SSH Key时设置了密码,则需要输入密码,否则直接git push就可以了!

另外,SSH,Secure shell(安全外壳协议),专为远程登陆会话与其他网络服务提供安全性
的协议, 而SSH传输的数据是可以经过压缩的,可以加快传输的速度,出于安全性与速度,
我们优先考虑使用SSH协议,而SSH的安全验证规则又分为基于密码基于密钥两种!
我们这里用的是基于第二种的,即在本地创建一对密钥,公钥(id_rsa.pub)私钥(id_rsa),
然后把公钥的内容贴到Github账号的ssh keys中,这样就建立了本地和远程的认证关系,
当我们再push到远程仓库,会将你本地的公共密钥与服务器的进行匹配,如果一致验证通过
直接推送更新!

下面我们来建立ssh key,首先来到电脑的根目录下,这里假定我们没创建过SSH key:


执行完ssh-keygen那个指令后,后面依次要你输入文件名,直接回车会生成两个默认的
秘钥文件,接着提示输入密码,直接回车,如果这里你输入密码了的话,那么push的时
候你还是需要输入密码,接着又输多一次密码,同样回车,然后出现最下面的这串东西
就说明ssh key已经创建成功了!

我们接着可以用编辑器打开id_rsa.pub文件或者键入:

clip <id_rsa.pub

复制文件内容,然后打开Github,点击你的头像,选择:Settings,然后点击左侧SSH Keys,
然后New SSH Key


然后Github会给你发来一个提示创建了一个新ssh key的邮件,无视就好,接下来我们可以
键入:ssh -T [email protected],后面的是你的注册邮箱,然后如果你上面设置过
密码则需要输入密码,否则直接输入yes然后一直按回车就好!,最后出现Hi xxx那句话
就说明ssh key配置成功了!


内容参考:https://help.github.com/articles/generating-an-ssh-key/


4..gitignore文件的编写

我们在Push项目的时候,可能会有一些无关的东西,不需要传到远程仓库,我们可
以在项目目录下新增一个.gitignore文件,然后写上不想提交的目录,支持通配符,
比如笔者常用的android studio中的.gitignore的文件内容:

*.DS_Store


# Gradle files
build/
.gradle/
*/build/


# IDEA
*.iml
.idea/.name
.idea/encodings.xml
.idea/inspectionProfiles/Project_Default.xml
.idea/inspectionProfiles/profiles_settings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/vcs.xml
.idea/workspace.xml
.idea/libraries


# Built application files
*.apk
*.ap_


# Files for the Dalvik VM
*.dex


# Java class files
*.class


# Generated files
antLauncher/bin
antLauncher/gen


# Local configuration file (sdk path, etc)
local.properties


# Log Files
*.log

你可以根据自己的需求来编写,另外提供一个github上的一个.gitignore的模板的库,
要什么项目的可以来这里直接找:https://github.com/github/gitignore。


5.同步远程服务器更新(fetch VS pull)

现在我们知道可以remote设置远程仓库地址,push推送更新到远程服务器,clone克隆远程
仓库,接着就到本地仓库同步远程仓库了,关于获取远程服务器更新的方式有两种,他们
分别是fetchpull,尽管都可以获取远程服务器更新,但是两者却又是不一样的。
首先说下fetch吧,仅仅只是从远处服务器获取到最新版本到本地,假如你不去合并(merge)
的话,本地工作空间是不会发生变化的!这里我们在Github上创建一个README.md文件


而是用pull确是一步到位的,或者说:pull = fetch + merge!这里我们
先改下Github上README.md的内容!


好的,区别很显而易见,实际使用中,使用git fetch显得更安全一点,至少在merge
之前我们可以查看更新情况,再决定是否进行合并;而笔者实际开发中用pull
用得较多,主要是懒,哈哈,至于用哪个,见仁见智吧!


6.Github客户端介绍

其实,安装好Git后,就一有一个Git Gui的东东了,就可以直接用有用户界面的
Git来做版本管理的工作了,而Github客户端则是Github给我们提供的一个专门用来
管理Github项目的一个工具而已。比如,假如你装了Github客户端,在Clone项目
的时候,你只需点击:


就能直接把项目clone下来,就是一些Git操作的图形化罢了,首先来到下面的链接
下载Github客户端:https://desktop.github.com/
文件很小,后面点击运行文件后,他还要在线下载安装,100多m,然后傻瓜式安装,
安装完成后,会自动打开Github客户端,然后使用你的Github账号登陆,接着他会
默认为你创建SSH Key信息,接着的你自己摸索了!

这里另外补充一点,就是win 8.1装Github客户端的问题,昨晚安装的时候一直
报这个错误:


直接,win + x,选择"命令行提示符(管理员)",执行以下下面的这个指令:

%SYSTEMROOT%\SYSTEM32\REGSVR32.EXE %SYSTEMROOT%\SYSTEM32\WUAUENG.DLL

然后再点击Github的安装程序,等待安装完成即可,下载并不需梯子。


7.如何删除Github上的仓库

点击进入你的仓库,点击Setting,拉到最后:


点击Delete this repository


弹出的对话框中输入要删除的仓库名称,接着点击删除



8.如何为开源项目贡献代码

你可以Clone别人的开源项目,在看别人代码的时候,你觉得作者有某些地方写得不好,
写错,或者你有更好的想法,你在本地修改后,想把修改push推送到开源项目上,
想法很好,但是你不是项目的拥有着和参与者,是无法推送更改的!!!这样是为了
避免熊孩子,毕竟熊孩子无处不在,参与开源项目的方法有两种:

第一种方法
是让作者把你加为写作者,添加协作者流程:点击仓库的Settings
-->Collaborators然后输入想添加的人的用户名或者邮箱,点击添加即可。

第二种方法
点击Fork按钮,把这个项目fork到自己的账号下,然后Clone到本地,然后
做你想做的修改,commit提交,然后push到自己账号里的仓库,然后打开开源
项目,点击


,然后新建一个pull request,接着设置自己的仓库为
仓库
,设置源分支目标仓库目标分支,然后还有pull request的标题和
描述信息,填写完毕后,确定,这个时候开源项目的作者就会收到一个pull
request的请求,由他来进行审核,作者审查完代码觉得没问题的话,他可以
点击一下merge按钮即可将这个pull request合并到自己的项目中,假如作者
发现了你代码中还有些bug,他可以通过Pull Request跟你说明,要修复了
xxBUG才允许合并,那么你再修改下BUG,提交,更改后的提交会进入Pull
Request,然后作者再审核这样!

PS:假如作者不关闭或者merge你的这个Pull Request,你可以一直commit
骚扰主项目...( ╯□╰ )


9.删除服务器上的无用分支

直接键入:

git push origin :无用分支名

10.一些补充

限于篇幅和水平显示,关于Github的介绍还有些遗漏,比如页面介绍或其他东东,
这里贴下一些相关的文章,可以看看,后续看到不错的文章会补上:

  • 怎样使用 GitHub?
  • 如何高效利用GitHub

另外,再安利一个练习Git命令行很棒的一个开源项目:githug
通过闯关的形式让你熟悉Git命令的使用,总共有55个关卡,不过只能够在linux
系统上玩,因为安装游戏的指令就是:gem install github,关于通关攻略
网上有很多,这里贴下之前在简书上看到的一个:「Githug」Git 游戏通关流程


小结

本节给大家讲解了Github作为远程仓库的可能会遇到的问题,但还是记住:
远程仓库只是作为我们交换各自本地仓库的一个媒介罢了,我们可以换成其他
的仓库,换汤不换药,我们更应该关注的是本地仓库的操作以及多人协作时的工作流
程,下节我们通过简单的例子来阐述Git多人协作开发的流程,敬请期待!

你可能感兴趣的:(git)