手把手教你配置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...)}}

posted @ 2020-09-21 09:17  Coder梁  阅读(27195)  评论(1编辑  收藏  举报