手把手教你配置git和git仓库
今天是git专题的第二篇,我们来介绍一下git的基本配置,以及建立一个git仓库的基本方法。
首先申明一点,本文不会介绍git的安装。一方面是大部分个人PC的系统当中都是已经装好了git的,另外一方面是git安装的教程和内容网上太多了,大同小异,所以这部分我们就略过了。如果你打开命令行输入git提示报错的话,那么可以百度一下你对应系统的git安装方法。
git配置
git常用的配置内容不多,一般来说最常用的就只有两个。一个是user相关的配置,一个是alias相关的配置。下面就来详细说说,首先讲讲user的配置。
user是配置你的用户名和邮箱,这是一个非常常用的配置。因为像是github和gitlab等等代码仓库,当我们使用git命令与它们交互的时候,它都会通过git的配置获取我们的邮箱来和账户进行关联,从而对我们的账号进行验证。配置的方法也很简单,主要有两种方法,一种是通过git config命令来配置,另外一种我们等会一起说。
先来看看config命令:
git config --global user.name chengzhi
git config --global user.email chengzhi@gmail.com
这里的global表示的是全局配置,一次配置全局生效。
第二个配置是alias配置,也就是别名配置。别名配置的用途是我们自己给git命令起一个别名,这样当我们输入命令的时候可以进行简化。比如说git当中切换分支的命令是git checkout xxx,这里的checkout单词很长,我们经常会拼错。我们可以给它起一个别名是co,这样命令就成了git co xxx,相比起来要舒服很多。
我们同样可以使用git config命令来完成别名的配置:
git config --global alias.st status # st 替换status
git config --global alias.co checkout # co 替换checkout
下面再来说说第二种方法,第二种方法就是直接修改git的配置文件。在windows系统当中,git配置文件的路径是C:\Users\Administrator,如果是Linux或者是Mac系统,配置文件地址是~/下。
我们cd到对应的地址寻找一下gitconfig这个文件,如果找不到可以自己创建一个。我们在文件当中输入我们想要进行的配置就行了,这里提供一个模板:
[user]
name = chengzhi
email = chengzhi@gmail.com
[alias]
co = checkout
br = branch
ci = commit
st = status
当然在这个config当中我们还可以进行一些其他的配置,比如配置git默认的编辑器成emacs等等,但一般这些配置不是很常用,所以我们就不提了,感兴趣的可以自己了解一下。
一般来说配置用户名和常用的别名就可以了。
配置ssh
git安装好了之后,我们就可以注册github账号开始我们的开源旅程了。这里说明一下,git和github其实并没有特殊的关系,github只是使用git的开源代码仓库而已。前面也说到过使用git作为工具的代码仓库有很多,除了github之外还有gitlab以及国内这几年比较火的码云等等。
注册成功之后,我们进入github需要做一件事情就是配置ssh。ssh是安全外壳协议,它本身和git没什么关系,主要是为了使用它来进行安全验证。说白了为了证明你是你,为了方便根据账号做权限管理。比如阻止你clone你没有权限的代码,阻止你push代码到没有权限的远程等等。说白了,这是一个安全工具,通过它可以让我们的账号和代码更加安全。
ssh相关的细节不做过多深入,感兴趣的同学可以自行了解,我们简单说下应该怎么配置。首先我们需要使用ssh-keygen工具来生成我们的ras秘钥。ras是一种对称加密算法,它的加密原理是生成一对秘钥,一个是可以分享给别人的公钥,一个是你自己保管的私钥。简单来说持有公钥一方可以验证私钥的正确性,但是不可以破解私钥加密的数据。所以我们会把公钥上传到各个网站,在自己的机器保留私钥。
我们在命令行当中输入:
ssh-keygen -t rsa -C "chengzhi@gmail.com"
这里传入的是你自己刚刚设置在git当中的邮箱,之后系统会提示你输入密码,之后我们查看公钥和私钥需要输入密码。这里可以不设置,敲两个回车即可。完成之后,我们可以输入命令查看我们的公钥:
cat ~/.ssh/id_rsa.pub

接着把屏幕上显示的内容拷贝下来,填到github当中。具体的路径是先点击右上角自己的头像,选择settings,在弹出的页面当中选择SSH and GPG keys,再点击右上角的New SSH key,起一个名字再把刚才复制的内容粘贴进去即可。

这样当我们clone仓库的时候就可以使用SSH协议代替https协议了,这样会更加安全。

github创建仓库
最后,我们来介绍一下在github当中创建仓库的方法。第一种方法是创建一个空白仓库,这个很简单,我们可以直接在github当中操作。
点击右上角头像,选择Your Repositories,之后点击右上角的New新建即可。

在之后弹出的页面当中我们填上项目的名称以及简介即可,下图框出的三个选项前两个可选可不选,第三个一般不选。前两个选项如果选上会替我们生成readme以及gitignoree文件,这两个文件的用途我们以后会说,可选可不选随意。第三个框表示开源许可证,和我们关系不大,可以忽略。

如果说我们已经在本地开发好了内容,想要同步到github当中这时候应该怎么办?当然我们也可以现在github创建,再把本地的代码拷贝进去,但显然这样做很low,我们还有更好的办法。
当然我们在github创建项目是免不了的,创建好了之后,我们要做的就是把本地的文件夹和远程的这个刚建好的仓库关联起来。首先,我们在本地的文件夹当中运行git init,在本地初始化一个git仓库。
git init
下面我们要做的就是关联本地的仓库和远程的仓库,并且把本地的仓库当中的内容push到远程去。为了做到这一点,我们运行git remote add origin命令给本地的git仓库增加一个远程的源,这里后面跟着的链接是我们刚才在github里创建好的仓库的地址。
git remote add origin git@github.com:moutsea/git-tutorial.git
由于这个git-tutorial是我们自己创建的,所以是没有问题的,如果add别人的repo可能会报错。添加完成之后我们需要拉取远程的改动,因为我们在创建repo的时候创建了一个readme文件,这也算是一个改动,我们需要把这个改动拉下来,和远程保持同步之后再推送更新。
记住这一点,我们在push代码到远程之前,一定要先通过git pull和远程先保持同步之后再进行推送。
但是我们直接git pull是不行的,会报错,因为虽然本地和远程关联起来了,但是分支没有关联,它根本不知道该去pull哪个分支。我们需要把本地的master分支关联远程的master分支,但是这又迎来一个新的问题。我们本地暂时还没有任何改动,这个master分支实际上是不存在的,所以我们需要先提交本地的文件到git仓库。
这里的两个命令很常规,首先是git add .这里的.表示添加全部变更,使用.的时候要小心,因为有时候不是所有文件都需要添加的。大家知道就好,细节我们以后再说。然后是git commit -m提交到git仓库,由于我们配置了alias,所以可以使用ci代替commit。-m是message的意思,后面需要传入一个字符串,表示这个改动的备注,方便以后查看。

注意这里的commit操作并不是提交到远程,而是提交到本地的git仓库。terminal当中会把git添加的文件名都输出出来,由于我用的是中文,所以出来的是乱码,不过这没有关系,至少我们add成功了。
之后我们用命令把本地的master和远程的master分支关联起来,其实也就是给本地的master分支添加一个上游:
git branch --set-upstream-to=origin/master master
现在一切都已经就绪了,按理说我们直接git pull之后在git push就可以了。但还有一个小问题是你会遇到这么一个报错:fatal: refusing to merge unrelated histories.
这个报错的意思是说不能够将两个没有关系的历史记录合并起来,原因是我们commit到本地git仓库的时候,本地的master还没有和远程的master分支取得关联。git默认是不允许将没有关联的记录进行合并的,不过这个问题也很好解决,我们只需要加上参数强制让它允许就可以了:
git pull --allow-unrelated-histories
这样我们就会发现它已经成功了,远程的readme文件已经被拉取了下来。之后我们再运行git push即可。由于我们已经将本地的master和远程的master取得了联系,我们只需要git push就可以了,不需要git push origin master了。
我特意为git专题创建了一个github的repo,链接如下:https://github.com/moutsea/git-tutorial
今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。
本文使用 mdnice 排版
- END -
{{uploading-image-690710.png(uploading...)}}
手把手教你配置git和git仓库的更多相关文章
- 第一节:学会Java前提-手把手教你配置JDK环境变量
前言 大家好,今天写一遍学会Java前提-手把手教你配置JDK环境变量的概述,希望你们喜欢 下载地址 下载jdk,和eclipse就比较简单了,提供JDK 9 地址: http://www.oracl ...
- 手把手教你使用gogs搭建git私有仓库
本来想在 Github 上建一个私仓,但是发现只能设置 3 个贡献者. 国内的码云也只能设置 5 个. 无意间看到了使用 gogs 可以搭建私服,正好手头有空闲的服务器,于是开干! https://g ...
- 手把手教你提交文件到git
手把手教你使用git提交到github 作者 数据分析与优化 关注 2016.07.17 10:25 字数 7342 阅读 399评论 1喜欢 6 摘要Git是分布式版本控制系统,那么它就没有中央服务 ...
- 【必知必会】手把手教你配置MySQL环境变量——图文详解
一.先决条件 假设我们已经成功安装MySQL数据库.如果还有小伙伴不知道如何安装MySQL数据库,可以在本文下留言,留言数超20,则出一期"手把手教你安装MySQL数据库--图文详解&quo ...
- Linux环境搭建 | 手把手教你配置Linux虚拟机
在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度. Ubuntu刚安装完毕之后,还无法进行开发 ...
- 最香远程开发解决方案!手把手教你配置VS Code远程开发工具,工作效率提升N倍
文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 今天和大家分享远程开发工具,分享一下我平常是如何用 V ...
- 手把手教你配置UltraEdit对Oracle的PLSQL着色
http://hi.baidu.com/kingbridge/blog/item/94e225ad5fad4b194b36d60d.html UltraEdit-32 12.1版本配置默认文件显示 ...
- 手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客
http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. ...
- Java入门 手把手教你配置环境变量
很多人觉得配置Java开发的环境变量很麻烦,很容易忘记,时常被它搞得晕头转向.如果出现这样的情况,那么原因只有一个,你不了解为毛需要配置环境变量,不配置环境变量就不能开发了吗? 答案是:NO!,那么下 ...
随机推荐
- 解决QT5移植报错:This application failed to start because no Qt platform plugin could be initialized
今天自己基于Pyqt5开发了一个软件,打包成exe后在自己的电脑上运行正常,在其他机器上提示: This application failed to start because no Qt platf ...
- IDEA编写Scala代码时自动显示变量类型
设置方法如下:settins -->Editor--> Code Style --> scala --Type Annotations 勾选框选部分 测试效果
- bluetoothctl命令提示No default controller available
在学习bluetoothctl命令时,执行bluetoothctl,然后执行show,提示No default controller available. 1. 执行hciconfig,发现有hci0 ...
- 仿京东BOE官网 html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 玩转Spring——Spring事务
事务的概念:多个sql 操作 要么都成功 要么都失败 ACID特性:原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生.一致性(Consisten ...
- 微信小程序发送订阅消息(之前是模板消息)
之前的模板消息已经废弃,现在改为订阅消息,订阅消息发布前,需要用户确认后才能接收订阅消息. 小程序端 index.wxml <button bindtap="send"> ...
- 区块链入门到实战(19)之以太坊(Ethereum) – 以太币
以太币的作用:防范以太坊网络被滥用和激励矿工. 与比特币网络有比特币类似,以太坊(Ethereum)也有自己的虚拟币 — 以太币. 以太币的主要作用有2个: 应用程序执行任何操作都需要支付以太币,防范 ...
- js实现树级递归,通过js生成tree树形菜单(递归算法)
方法封装: /** * 数据转换为树形(递归),示例:toTreeByRecursion(source, 'id', 'parentId', null, 'children') * @param {A ...
- Java面试题(反射篇+对象拷贝篇)
反射 57.什么是反射? 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力 Java反射: 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否 ...
- 【从零开始撸一个App】PKCE
一个成功的App背后肯定有一堆后端服务提供支撑,认证授权服务(Authentication and Authorization Service,以下称AAS)就是其中之一,它是约束App.保障资源安全 ...