我正在参与「兔了个兔」构思投稿大赛,详情请看:「兔了个兔」构思投稿大赛

上回讲到,几只兔子打算进行一次正式的项目合作。之后它们将会各自担任项目的一部分,并终究汇总到一同,而这就需要一个代码管理东西来辅助。而又因为它们是 分布式 地开发,即不在同一台机器上进行开发,所以它们挑选了Git。

Git是由Linux团队开发的一个强壮的东西,其功能十分多样,这儿为了项目之便只是运用到了其中很根底的一小部分,若想对它有更详细和全面的了解,能够参阅这儿:

Git User Manual

文章阐明

  • 本文叙述的是Linux环境下的装备。
  • 笔者之前也写过一篇关于Git运用的文章:Git学习笔记 可是这篇文章讲的范围窄而杂,不利于快速上手应用;再加上最近我对Git又有了新的认识,所以又从头写一篇新文,从另一个视点谈谈Git。

Git概览

运用Git及一个一同可拜访的代码库房进行合作的流程可用下图来归纳:

【兔年创意投稿】兔兔的奇妙之旅(八)协力同心,众志成城&&Git基本配置及代码提交

关于一同可拜访的代码库房的选取:

  • 假如是打算开源的项目或许一些出于爱好等等开发的项目,能够运用Github的public库房进行保管。
  • 假如是秘要项目,一般不直接放在Github的public库房上(它有private库房,我暂时还没用过)。GitLab是开源、可定制的,能够用它的代码自己搭一个。

本地Git装备

此处省掉下载解压的步骤。

首先得告诉Git我们是谁。

装备 :git config

假定姓名是xiaoming,邮箱是:1111111111@qq.com

git config --global user.name "xiaoming"
git config --global user.email "1111111111@qq.com"

–global表示当时体系中所有库房都适用这个装备;–local表示只适用于当时库房。 假如一同装备了–global 和 –local,当时库房将以local的信息为准。(类比全局变量和局部变量的联系)

修正装备 :insteadOf

格局: git config --global url.<url> .insteadOf <url>

别号设置

格局: git config --global alias.cin "commit --amend --no-edit"

表示commit --amend --no-edit的别号是cin

本地Git运用

树立库房

装备好了之后就能够开端运用了。有两种运用方法:

  • 自己新建一个库房,往里面从0开端加代码(或许把网上的公开代码zip包解压后放进去)
  • 拉取别人的代码

自己新建一个库房

本质便是这个库房记载的代码提交前史是从现在的首次提交开端算的

  • 新建一个目录并进入 mkdir demo && cd demo
  • 初始化库房 git init

运用tree .git 指令,能够看到库房树的结构。

(后续弥补:当然,也能够在之后运用git remote add origin 别人的库房地址进行操作,这种相当于fork,也能看到原库房代码的前史提交记载。)

克隆别人的库房

git clone <库房地址> 这种方法下的库房中能看到原库房代码的前史提交记载

处理代码

git add

git add . 将当时目录的代码参加暂存区,也便是纳入了git的监控范围

git commit

提交代码到本地库房(主机里面的Git库房)

有两个常用的可选参数:

  • -m “xxx”:xxx是对所提交内容的简要归纳 假如单纯git commit,会进入一个页面,让你挑选提交信息。注释掉的信息会被忽略不计,撤销注释的内容将会全部展现在提交记载中。
  • -a :相当于git add+git commit 不过为了防止呈现提交变动丢掉的状况,最好仍是先git add . 再commit。

假如用IDE的能够设置一下add automatically

与自己的长途库房树立衔接(以Github为例)

假定兔子突突在Github注册了一个账号,并树立了库房。方才所说的代码便是它在本地git clone 自己的长途库房。

那本地库房和长途库房怎么联系起来呢?

这就不得不提两种类型的衔接方法:HTTPS和SSH。

翻开Github的一个库房,点击绿色的code按钮,会呈现HTTPS SSH 和直接下载zip包这几种方法。

【兔年创意投稿】兔兔的奇妙之旅(八)协力同心,众志成城&&Git基本配置及代码提交

而假如要向长途库房推送分支,也是可通过HTTPS和SSH这两种方法。

因为SSH更为安全,所以这儿将会演示一下SSH的方法。

本地创建密钥对

现在密钥对有四种类型,rsa、dsa、ecdsa、ed25519.

出于安全性原因考虑,推荐运用ed25519(并且据说有的体系会回绝接纳和处理rsa、dsa的密钥)

假定邮箱是 1111111111@qq.com

生成密钥对:ssh-keygen -t ed25519 -C "1111111111@qq.com"

在接下来的输出信息中,那个显示的目录便是密钥存放的方位。

获取密钥

  • 仿制方才的目录路径
  • cat 这个目录.pub
  • 仿制显示的字符串(公钥)

装备密钥

  • 翻开Github,点击个人头像——Settings——SSH and GPG keys
  • 点击绿色按钮“new ssh key”
  • 将公钥粘贴到key对应的方框中,给密钥取个title

SSH拜访

假定你的Github名是xiaoming

输入以下指令测验是否衔接成功:

ssh -T git@github.com

若呈现:

Hi xiaoming! You've successfully authenticated, but GitHub does not provide shell access.

阐明装备成功。

假如库房中有多个密钥,SSH登录时能够通过-i 选项指定。

本地与长途库房间的操作

拉取代码

  • git fetch
  • git pull 这两者的区别是:
  • git fetch拉取最新代码,可是并不与库房中的已有分支直接兼并;
  • git pull相当于git fetch+git merge

推送代码

git push origin main

  • 自己的长途库房默认是origin
  • 这儿的main是因为Github自2022年开端更改了Github作业流主支的称号,不再叫master,而是main。 遇到姓名报错的朋友记住改一下分支名

指定fetch和push

git remote -v能够检查该本地与长途库房的相关信息。

但有时候,我们期望从长途的a库房拉代码,然后提交到自己长途的b库房。这时候就要修正fetch和pull信息。

  • 先长途拉取a的代码 git remote add origin a库房地址
  • 修正提交地址 以下为SSH方法的地址:

git remote set-url --add --push origin git@github.com:用户名/库房名.git

长途库房间的操作

pr流程

  • 所谓的pr,指的便是pull request,但实际上是一种请求兼并的操作。
  • 在提pr之前,应该先再拉取一遍代码,确保在自己fork代码修正的代码没有和当时最新的代码发生新冲突。
  • 在Github中,点击长途库房的pull request,挑选绿色按钮new pull request。如代码无误,将等待原库房主人审阅后可兼并。

【兔年创意投稿】兔兔的奇妙之旅(八)协力同心,众志成城&&Git基本配置及代码提交

协作方法

上述对长途库房间操作的描绘,可能仍是会让部分同学感觉有点懵。 接下来将会再详细地叙述这个问题。

  • 关于小型团队,能够共用一个库房,组长为各成员分配权限,在一个master上进行开发,各自拉个分支,最后merge到一同。
  • 针对大型项目,比方开源项目,一个个拉名单是不现实的,参与者将原库房fork一份构成自己的库房,并在其上进行开发,最后提pr兼并到主库房。

总结

Git是一个东西,它的指令许多,把戏也许多。我觉得上面说到的一些作业模式也并不是固定的,能够视状况挑选自己和团队以为最称手、最安全的协作方法。