Git入门笔记(二)

远程仓库

克隆项目到本地

很简单,git clone <url>在url填入远程仓库的地址就可以clone到本地了,url处有两种地址,一种是通过SSH进行克隆,另外一种是通过HTTPS的方式进行克隆。

image-20220422185525713

上面为SSH的方式,下面为HTTPS的方式。

初始化远程仓库

HTTPS

以GitHub为例子,具体账号与仓库创建不再赘述。

仓库创建好了之后,我们看到我们的仓库是没有初始化的,GitHub页面上会出现一个初始化的教程。

image-20220422205301003

我们照着教程上初始化即可,简单来说,它的初始化过程就是,先生成一个README.md,接着创建一个本地仓库,提交README.md到本地仓库,然后将本地仓库推送到远程仓库,即可完成初始化。

image-20220422210303739
配置SSH

Git支持多种协议,其中包括SSH,SSH速度相当不错,比HTTPS效果更佳。我们来配置一下SSH。

第一步,我们检查一下电脑上是否已经存在SSH Key

1
2
cd ~/.ssh
ls

如果显示出存在id_rsa.pub id_dsa.pub文件时,则证明已经存在SSH Key,可以跳过第二步。

第二步,创建SSH Key

1
ssh-keygen -t ed25519 -C "[email protected]"

如果你的电脑不支持ed25519的加密格式,我们也可以使用传统的rsa加密:

1
ssh-keygen -t rsa -b 4096 -C "[email protected]"

我们可以来看看参数的含义:

参数 含义
-b 指定密钥长度
-e 读取openssh的私钥或者公钥文件
-f 指定用于保存密钥的文件名
-t 指定密钥类型
-C 添加注释,往往以邮箱作为注释

通常的,我们可以省略-b参数。-f参数会在后面提示中让你填写:

1
# Enter file in which to save the key (/c/Users/yourusersname/.ssh/id_rsa): [Press enter]

这里推荐使用默认即可,接着会提醒是输入两次密码,此密码为push时使用的密码,不是GitHub的密码,我们可以不输入,这样在push时就不需要密码了:

1
2
# Enter passphrase (empty for no passphrase): 
# Enter same passphrase again:

接下来,就会出现代码提示

1
2
3
# Your identification has been saved in /c/Users/yourusersname/.ssh/id_rsa.
# Your public key has been saved in /c/Users/yourusersname/.ssh/id_rsa.pub.
....

意味着你的SSH Key就创建好了,公钥就是/c/Users/yourusersname/.ssh/id_rsa.pub、私钥是/c/Users/yourusersname/.ssh/id_rsa

第三步,添加SSH Key至Github。

用任何文本编辑器打开你的公钥id_rsa.pub,复制文件内所有信息。

打开你的Github,点击你的头像,选择settings,然后再Access中找到SSH and GPG keys选项,选择New SSH key

image-20220424203852243

title填入你想给这个SSH Key的备注,在Key中粘贴进刚刚复制的信息,点击Add SSH key即可。

这样就添加成功SSH Key了。

第四步,测试SSH Key。

打开Git Bash,输入:

1
ssh -T [email protected]

出现提示:

1
2
3
# The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is (你的密钥)
# Are you sure you want to continue connecting (yes/no)?

输入yes即可,若创建时使用了密码,这时就需要输入你的密码。

完成后就会出现:

1
2
# Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.

这样,你的Github的SSH设置就算完成了。

接下来初始化的步骤,与HTTPS几乎没有什么区别,按照Github上提示完成即可。

[^参考资料2]: 使用 SSH 连接到 GitHub - GitHub Docs

从远程仓库更新

有两种方法,第一种比较安全,第二种比较方便。

git fetch

我们需要两个步骤:

  1. 从远程仓库中抓取与拉取
1
git fetch <remote>

这个命令可以从远程仓库中下载数据到本地仓库,但没有进行合并。

我们clone了一个远程仓库,命令会自动将远程仓库命名为origin,一般来说,我们在本地仓库的文件夹内,使用origin作为<remote>即可,即

1
git fetch origin
  1. 合并到本地仓库分支
1
git merge <remote>/<branch>

这个命令的意思是,将<remote>/<branch>分支与主合并。

<remote>/<branch>是我们从远程仓库下载下来的分支,在Github中,主分支被命名为main,因此,我们从Github远程仓库下载下来的主分支名字一般都为main,所以我们要将远程下载下来的主分支与本地仓库当前分支合并,运行

1
git merge origin/main
git pull

这个命令相当于是将上面两个命令合二为一,即抓取数据并自动尝试合并到当前所在的分支。使用很简单:

1
git pull <remote> <remote branch>:<local branch>

意思是从remote远程仓库中拉取remote branch分支,并与本地的local branch分支合并:

1
git pull origin main:main

如果远程分支是与当前分支合并,则冒号后面可以省略:

1
git pull origin main

推送到远程仓库

推送到远程仓库的命令,与上面git pull的命令格式非常相似:

1
git pull <remote> <local branch>:<remote branch>

意思是将本地仓库local branch分支与remote远程仓库中的remote branch分支合并。

如果远程分支名与本地分支名相同,则可以省略冒号后面的内容:

1
git pull <remote> <local branch>

实例:

1
git push origin main

意思为将本地的mian分支推送到远程仓库,并于其中的main分支合并。

使用这个命令,我们还可以删除远程仓库中的分支:

1
git push origin --delete testbranch

意思是删除远程仓库中testbranch分支。