likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 5

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

Git是由Linux团队开发的一个强大的工具,其功能十分多样,这里为了项目之便仅仅使用到了其中很基础的一小部分,若想对它有更详细和全面的了解,可以参考这里:

Git User Manual

文章说明

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是一个工具,它的命令很多,花样也很多。我觉得上面提到的一些工作模式也并不是固定的,可以视情况选择自己和团队认为最称手、最安全的协作方式。

转载自:https://juejin.cn/post/7189188980133331000
评论
请登录