今天是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仓库的更多相关文章

  1. 第一节:学会Java前提-手把手教你配置JDK环境变量

    前言 大家好,今天写一遍学会Java前提-手把手教你配置JDK环境变量的概述,希望你们喜欢 下载地址 下载jdk,和eclipse就比较简单了,提供JDK 9 地址: http://www.oracl ...

  2. 手把手教你使用gogs搭建git私有仓库

    本来想在 Github 上建一个私仓,但是发现只能设置 3 个贡献者. 国内的码云也只能设置 5 个. 无意间看到了使用 gogs 可以搭建私服,正好手头有空闲的服务器,于是开干! https://g ...

  3. 手把手教你提交文件到git

    手把手教你使用git提交到github 作者 数据分析与优化 关注 2016.07.17 10:25 字数 7342 阅读 399评论 1喜欢 6 摘要Git是分布式版本控制系统,那么它就没有中央服务 ...

  4. 【必知必会】手把手教你配置MySQL环境变量——图文详解

    一.先决条件 假设我们已经成功安装MySQL数据库.如果还有小伙伴不知道如何安装MySQL数据库,可以在本文下留言,留言数超20,则出一期"手把手教你安装MySQL数据库--图文详解&quo ...

  5. Linux环境搭建 | 手把手教你配置Linux虚拟机

    在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度. Ubuntu刚安装完毕之后,还无法进行开发 ...

  6. 最香远程开发解决方案!手把手教你配置VS Code远程开发工具,工作效率提升N倍

    文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 今天和大家分享远程开发工具,分享一下我平常是如何用 V ...

  7. 手把手教你配置UltraEdit对Oracle的PLSQL着色

    http://hi.baidu.com/kingbridge/blog/item/94e225ad5fad4b194b36d60d.html   UltraEdit-32 12.1版本配置默认文件显示 ...

  8. 手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客

    http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. ...

  9. Java入门 手把手教你配置环境变量

    很多人觉得配置Java开发的环境变量很麻烦,很容易忘记,时常被它搞得晕头转向.如果出现这样的情况,那么原因只有一个,你不了解为毛需要配置环境变量,不配置环境变量就不能开发了吗? 答案是:NO!,那么下 ...

随机推荐

  1. 2 Spark角色介绍及运行模式

    第2章 Spark角色介绍及运行模式 2.1 集群角色 从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点:Master节点主要运行集群管理器的中心化部分,所承 ...

  2. ceph 开启mgr balancer

    参考链接: mgr balancer模式探索及配置方法1 mgr balancer模式探索及配置方法2 1.ceph mgr module enable balancer [root@controll ...

  3. 下载 golang.org/x 包出错不用代理的解决办法

    原文链接:https://www.jianshu.com/p/6fe61053c8aa?utm_campaign=maleskine&utm_content=note&utm_medi ...

  4. BIGI行情http请求实时行情数据方式

    BIGI行情http请求实时行情数据方式 新浪财经文华财经并非实时行情数据源,所以获取的行情数据源也并非实时的.以下介绍的方法和新浪财经获取行情数据源的方法是一致的.需要实时行情数据源可以向BIGI行 ...

  5. Deep Models Under the GAN: Information Leakage from Collaborative Deep Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1702.07464v3 [cs.CR] 14 Sep 2017 以下是对本文关键部分的摘抄翻译,详情请参见原文. ABSTR ...

  6. Java数据结构——循环队列

    普通顺序队列存在的问题在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位.出队时,则是头指针front后移一个单位.像这样进行了一定数量的入队和出队操作后, ...

  7. Python | 多线程死锁问题的巧妙解决方法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第25篇文章,我们一起来聊聊多线程开发当中死锁的问题. 死锁 死锁的原理非常简单,用一句话就可以描述完.就是当多线程 ...

  8. 力扣Leetcode 面试题51. 数组中的逆序对 - 归并排序

    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 <= ...

  9. C# 解析获取Url参数值

    今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的Url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串.样例如下: http://www.cple ...

  10. composer版本号前面`^`和`~`的区别

    ~1.2.3表示: 1.2.3 <= 版本号 < 1.3.0 ^1.2.3表示: 1.2.3 <= 版本号 < 2.0.0 ~1.2 表示: 1.2.0 <= 版本号 & ...