主要包括本地仓库和远程仓库的管理。
本文部分参考: https://www.bilibili.com/video/BV1MU4y1Y7h5
1. git安装及配置
注意,以下所有配置,均可在用户目录下的.ssh文件夹和.gitconfig文件中找到,有时候也可以直接创建这些
文件并写入配置,但是代码比较繁琐,下面还是使用git提供的命令进行配置
1.1 下载及安装
Git - Downloading Package (git-scm.com)
1.2 本地身份配置
本地账户名和邮箱名可随便填写,假的也行,这个主要为了后面提交到远程仓库时,
管理远程仓库的人可以看见到底是哪个人推了这段代码上来,辨识身份用的,和在线github账号完全无关1
2git config --global user.name "Your Name"
git config --global user.email "youremail@yourdomain.com"
然后是本地生成一串ssh key,相当于暗号,生成后复制到你的远程仓库,这里指的是github中去,以后这台电脑
在git环境下推送东西到有这串钥匙的github账号的仓库中时,就不需要输入任何账号密码,直接就能推送过去.
生成办法也很简单,随便一个地方右击,git gui here,然后找到help-show ssh key,如果出来的窗口没有一串英文字母和数字的ssh key,窗口中右上方有个generate ssh key,就能生成,然后复制这串key,点击网页右上方你的github头像,点Settings,SSH and GPG keys,然后粘贴进去,添加即可,ssh key的名称随意填写.
1.3 代理设置
配置代理是因为有时候github无法访问,配置系统代理,与设置—网络—代理中的系统代理一致,需要
你用软件打开系统代理,在系统设置的网络的代理中才能看到
代理配置:git设置、查看、取消代理_git 取消代理-CSDN博客
如果上传的时候出现下方错误,说明你的22号端口被学校或者机构禁用了,需要换端口
1 | ssh: connect to host github.com port 22: Connection timed out |
端口配置:坑:ssh: connect to host github.com port 22: Connection refused - 知乎 (zhihu.com)
2. git基本命令格式
一般形式:
1 | git <命令> [一般参数,长参数,短参数,多个参数] |
一般参数的命令:
1 | git log readme.md |
长参数的命令:
1 | git log --author John |
短参数的命令:
1 | git log -a John |
多个参数的命令:
1 | git log --author=John --since="2023-01-01" -- README.md |
实际上命令可以理解为函数名,然后后面就是函数的参数,然后参数包括普通参数和关键字参数,
普通参数直接 git 命令 普通参数, 关键字参数就是 git 命令 [关键字=参数] 关键字就是长选项或者短选项,
后面的内容就是参数值,一般用空格放在中间,也可以使用等号.
3. 本地仓库管理
3.1 基本概念
首先本地仓库抽象为3块内存,分别是仓库,暂存区,工作区,工作区就是你能看得到的本地文件夹目录下的区域,
仓库就是背后你看不到的一个区域,你需要把你想管理的文件都提交到这个仓库才行,暂存区就是一个中转站,所有
工作目录的东西需要先放到暂存区后,才能提交给仓库.如下图
为了便于理解,这里举个例子,比如你在玩口袋妖怪,你的工作区就是你看到的游戏界面,现在你要购买10个伤药和5个解毒药,于是你通过按键操控人物来到商店,点击购买10个伤药和5个解毒药,于是你的工作区也就是游戏界面的装备栏的物品就更新了,这个操作对应git里面的两步操作,一个就是把工作区的文件添加10个伤药和5个解毒药,然后通过git add放入缓存区,在游戏里面你购买就相当于同时执行了这两步.如果此时你直接关机,那么下次开机你的记录还是没有10个伤药和5个解毒药,所以还需要进行存档操作,这步对应git里面的git commit.下面就来完整操作一遍.
第一步,初始化一个存档
假设pokemon文件夹就是我的工作目录,我添加一个initial_archive文件,然后使用如下
命令将仓库初始化成这个存档(第一个命令就是初始化仓库,背后新建了一个数据结构进行管理),
剩下两个命令你暂时不用理会,现在当作不存在,后面你就明白了.
1 | git init |
第二步,购买伤药解毒药
第三步,提交给缓存区
使用如下命令,其中点是提交所有修改的内容
1 | git add . |
第四步,存档
使用如下命令,其中 -m表示message消息,后面字符串是你对当前操作的一个说明,后面可以通过log查看这个消息,
以便于你知道你干了什么事情
1 | git commit -m 'buy 10 shangyao and 10 jieduyao' |
第五步,就是简单查看一下你干了什么事
1 | git log |
3.2 多分支管理
这个这里也是简单提一下到底是怎么回事,相当于你同学借你的当前存档继续玩,比如他发现了一个大师球,
然后你在你的存档下继续玩,你捉到了一只妙蛙种子,然后你和你的同学都进行了存档.
当前的情况就是两台游戏机,对应的就是git仓库的两个分支,每个分支对应一个游戏机,你所在的主分支就是
上一节操作的那台游戏机和存档,而你同学的分支是另外开辟的结构和你的一模一样的分支.
先把两个分支分别怎么玩讲清楚,然后再讲别的.接下来我们主要做三件事,第一件事就是把你的存档拷贝给一台新游戏机,也就是新开辟一个一模一样的分支,第二件事就是你去捕捉妙蛙种子并存档,第三件事就是让你同学找到大师球并存档.先把这3件事情完成再谈后面的事情.
三件事全流程
第一件事,拷存档,即开辟新分支
1 | git branch '分支名称' |
第二件事,你在master分支捕捉妙蛙种子并存档
既然当前分支是master,那么当前显示的工作目录就是你自己的游戏机,直接操作即可
第三件事,切换到小智分支,然后寻找大师球,并存档
1 | git checkout xiaozhi # 切换到小智分支 |
寻找大师球,并存档到小智游戏机的存档里面,
由于当前分支已经切换到小智游戏机了,所以当前工作目录就是小智的游戏机
三件事之后
做完上面3件事情之后,我们有了两个游戏机和存档,一般来说,这两个存档你只能选择其中一个继续玩,比如要了妙蛙种子存档你就没有大师球,要了大师球存档,你就不能有妙蛙种子.
但是和游戏存档不同的是,我们这里可以合并存档,把修改的地方(这里是增加装备或精灵)同时合并到同一个存档,这里就把小智游戏机的存档合并到你的游戏机中去.这样小智获得的大师球你就也有了.
(冲突情况请参考上面的参考链接,就是我使用了一个伤药,剩余9个,小智购买了10个伤药,变成了20个,我们同时更改了伤药,那么合并分支到底采用哪个人的伤药呢?不要突然想到数量合并,这样你就想偏了)
这里仅仅为了演示基本操作,并让你理解这个操作背后的含义,所以只把简单的例子执行一遍让你看,并不会面面俱到
1 | git checkout master # 切换到你的游戏机 |
注意,上面git merge xiaozhi 后面其实也要加个字符串短消息,和git commit一样.如果上面不加,会跳出一个添加短消息的界面,自动给你加了一个消息,你不需要更改,直接按ESC,然后输入:wq退出即可.
4. 远程仓库管理
首先新建一个github远程仓库,非常简单,登录你的账号后,上面有新建仓库选项,一路创建下去即可,先不用管各种配置选项,然后打开你创建的仓库就行了.
4.1 推送
远程仓库相当于云存档,然后你电脑上的多个分支,最后一般是都合并到你的主分支上面(master或main),你上传到云存档的就是这个主分支,将主分支存档合并到云存档里面.具体操作步骤如下:
第一步,设置添加远程仓库
1 | git remote add <远端名称> <仓库路径> |
第二步,合并存档到云存档
1 | git push remote-pokemon master:main |
remote-pokemon是你刚开始定义的远程仓库名称
master是本地分支名称
main是远程仓库主分支名称
4.2 克隆与拉取
克隆就是张三买了游戏机,他也想玩口袋妖怪,但他又不想从头打,于是他把云端存档下载到他的游戏机,然后打
1 | git clone <仓库URL> pokemon2 |
仓库URL就是上面说的仓库路径,也就是ssh地址,pokemon2就是工作目录,把远程仓库的东西都克隆到这个工作目录
拉取就是云端存档被张三玩了一下,他捉到了喷火龙,这是你没有的,于是你新开一个本地存档分支’zhangsan’,把他的存档拉取下来到这个分支,然后继续打这个分支,打完后,再合并到你的本地主分支上面.
1 | git fetch <远程仓库名> <远程分支名>:<本地分支名> |
注意,这里拉取的同时,也会新创建zhangsan分支,这个分支你游戏机里之前是没有的,
假如你的游戏机已经有了zhangsan分支了,使用fetch命令拉下来的存档会存到一个引用中,你需要再使用merge命令合并到你的zhangsan存档中去,这种已经存在这个分支的情况,我们通常并不这么麻烦,而是使用另外的拉取命令
1 | git pull <远程仓库名> <远程分支名>:<本地分支名> |
这样,就直接拉取并合并到你的zhangsan分支存档里面了,相当于fetch+merge命令
ok,基本命令和所做的事情的含义就讲到这里,到这里你的脑中应该就有一个大致的印象了,知道这东西大概是怎么回事了,更多的命令和使用,以及各种场景(冲突,分支开发),请参考其他资料,或问chatgpt即可.
5. 图形化管理工具
这节就是告诉你有图形化管理工具替代git命令,图形化工具有很多种,会使用命令的情况下,这些工具学起来也不会很难,所以这里不会详细讲解这些工具怎么用.本文的核心是让你大脑里对git管理的东西到底是怎么回事有个大致的概念,这个很重要.下面简单看一款图形化工具,叫Sourcetree
上面点击history就能看到所有分支的记录,相当于git log
另外,你在本地修改了任意内容,这里也是实时更新的,再workspace中的文件状态中可以提交修改到暂存区,然后commit给存档。
这里就不把每个事情讲一遍了,详细使用请参考网上教程,直接b站搜Sourcetree或者git图形化即可。