git教程——下载,SSH配置,clone,pull,push,pull request(PR)

前言:

由于本人在初学git时尝遇多次困难,而且在找文章的时候发现分布不均,不是能找到一个很系统的教学(要么就是不全,要么就是过时了用不了,还有的要钱。。),所以在此总结一下有关git的基本操作教程,如有不对之处,还望各位海涵

下载:

首先先看看电脑上有没有下载git。打开windows终端(右键开始按钮->终端),输入以下命令:

git --version

如果显示git的版本号,比如: 

git version 2.46.1.windows.1

那么已经安装git成功了。

否则如果没有安装,就会返回:

git: command not found
或者在某些系统上:
'git' is not recognized as an internal or external command, operable program or batch file.

 如果说没有安装,则应在git官网下安装:

首先打开Downloads:

接着进入对应操作系统(这里以windows为例): 

接着选择这个版本(现在的操作系统大多都是64位的了): 

 接着就按照默认安装程序来做就好了(或者可以参考这篇文章,里面有详细的安装教程Git下载安装及设置详细教程

安装好了以后,就可以在指定的文件夹中,右键->(显示更多选项)->Open Git Bash here来打开git bash了。

SSH配置: 

git下载好以后,我们就可以在git bash上输入一些指令了。不过在这之前,还要注意SSH的配置,不然一些操作,比如clone,pull,push等,会出现以下报错:
 

~$git clone https://github.com/......
fatal: unable to access 'https://github.com/......'

~$git pull origin master
fatal: Could not read from remote repository.

这种情况下就是SSH配置的问题,需要生成ssh key(ssh key的相关知识请自行搜索)。

生成ssh key:

参考文章:解决 “fatal: Could not read from remote repository.“

首先先看电脑中是否生成了ssh key。在终端(windows的终端)中输入:
 

PS C:\Users\xxx> dir

将会列举本目录的所有文件及文件夹,如果说能找到:

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         xxxx/x/xx     xx:xx                .ssh

则说明已经配置好了ssh key,那么这步可以跳过。如果没有的话,说明要生成新的ssh key了。

打开git bash,输入:
 

ssh-keygen -t rsa -C "youremail@example.com"(比如123456@qq.com)
或者是:
ssh-keygen -t rsa -b 4096 -C "邮箱"

补充:ssh-keygen -t rsa -b 4096 -C "邮箱":这条命令的目的是为了让本地机器ssh登录远程机器上的GitHub账户无需输入密码。 

 来生成ssh key。以下是ssh-keygen命令以及各个参数的说明:
 

ssh-keygen(基于密匙的安全验证):需要依靠密钥进行安全验证,必须为自己创建一对密钥,并把公用密钥放在需要访问的服务器上。
	-t 即指定密钥的类型。密钥的类型有两种,一种是RSA,一种是DSA。
	-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。命令中的4096指的是RSA密钥长度为4096位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。
	-C 表示要提供一个新注释,用于识别这个密钥。“”里面不一定非要填邮箱,可以是任何内容,邮箱仅仅是识别用的key。

生成的部分大概类似如下(图取自参考文章):

将ssh-key添加到ssh-agent:

生成完ssh-key后,还需要将ssh-key添加到ssh-agent,在git bash中输入:

ssh-add ~/.ssh/id_rsa

 即可完成添加(图取自参考文章):

补充: 如果出现“Could not open a connection to your authentication agent.”的错误可以使用以下两种方式解决:

eval "$(ssh-agent -s)"
或者
eval `ssh-agent`

然后再次使用ssh-add ~/.ssh/id_rsa指令。 

将ssh key添加到你的github账户:
 

 生成完ssh key之后,你可以按照“生成ssh key”中的步骤查看是否生成ssh key成功。如果找到相应文件夹了,就可以将ssh key添加到你的github账户了。

首先找到对应的密钥。打开终端,如果说dir能找到.ssh文件夹的话,使用cd .ssh进入文件夹,然后用cat id_rsa.pub来读取:
 

PS C:\Users\xxxx> cd .ssh
PS C:\Users\xxxx\.ssh> cat id_rsa.pub
ssh-rsa ....

在账户选项中选择 “Settings”–>“SSH and GPG keys”–>“New SSH key”,然后打开之前新生成的id_rsa.pub文件,将密钥复制后填写到账户中:(图取自参考文章) 

以下是点进“New SSH key”后的界面,这里的Title就是你的密钥的名字,可以随便取(最好用英文),然后key就填上面复制的密钥就可以了。最后记得"Add SSH key"

验证key:

添加好了以后,可以用ssh -T git@github.com,对ssh key进行验证:(图取自参考文章) 

当上述界面出现时说明配置成功,那么恭喜你成功配置了SSH!

clone:

 clone就是把远程仓库复制到本地进行使用。指令很简单,就是直接git clone https://github.com/......里面填仓库地址就可以了:

~$git clone https://github.com/......

 这里的仓库地址可以直接复制仓库的网址,或者在进入仓库后,点击"<> Code"->"HTTPS"或者"SSH",然后点击右边那个两个正方形的图案进行复制即可:

注:1.在git bash中的复制粘贴的快捷键并不是ctrl+c/v,而是复制:ctrl+Insert,粘贴:shift+Insert,如果不习惯的话可以直接右键进行复制粘贴。

2.由于github是国外的网站,国内登进去的话没有梯子会不稳定。所以建议是在git clone或者push等等的时候,最好是开着梯子进行操作,否则会出现无法clone或者无法push的情况。比如:
 

fatal: unable to access ...: Failed to connect to github.com port 443 after 21147 ms: Could not connect to server

pull: 

创建仓库: 

那么在成功配置完SSH之后,就可以进行pull操作给自己的仓库添加文件了。在此之前,我们可以在github上创立自己的账户(这里不赘述),然后创建自己的仓库:点击右上角的"+",然后点击"New repository"进行创建:

Respository name填写你的仓库名字,Description是对你的仓库的描述,public还是private表示是否对外公开仓库,Add a REAME file表示是否添加REAME文件(就相当于一个markdown文件,你可以在里面填写你想给仓库介绍的内容,比如仓库进程,简要描述等等),.gitignore template表示你将要使用的语言,当然如果不写的话后面添加文件时它会自动识别,license就是告诉别人哪些代码可以碰哪些不可以(一般情况下不会用到):

创建好仓库之后,你就可以点击右上角你的头像->Your Respositoris来查看你的仓库了!

 补充:README.md文件大概是显示在你的仓库的下面这个地方:
 

如果你想要对README文件进行修改,可以点击README右边的那个小铅笔,然后用markdown语法来写就可以了(关于markdown语法可以自行查找资料),写完之后记得点击右上角的Commit Changes,然后README的内容就会改变了。

初始化: 

创建好仓库之后,我们如果要在本地连接远程仓库,就必须要在本地初始化。

那么初始化很简单,只需要先在你想要连接远程仓库的地方(文件夹),打开git bash,然后输入git init:
 

~$ git init
Initialized empty Git repository in C:/test/.git/#这里是测试用,我不建议放在C盘

如果不出意外的话,在该目录的文件夹里面应该会出现一个.git的隐藏文件:
 

如果没有的话,点击上面的查看->显示->勾选隐藏的项目(注:作者用的是win11)

那么这个时候就可以看到.git文件了,这个就是初始化成功后的结果。 

连接远程仓库: 

 初始化成功之后,就可以使用git remote add origin https://github.com/......来连接远程仓库了(这里的地址可以用HTTPS或者SSH):

~$git remote add origin https://github.com/......

注:origin是远程仓库的别名,相当于说不管你的仓库叫什么名字,在本地都可以用origin进行代替 

补充:如果显示error: remote origin already exists.:

error: remote origin already exists.

则说明已经有连接的仓库了,这时候可以用git remote -v来查看连接的是哪个远程仓库:

~$git remote -v

如果不是你想要的仓库的话,可以用git remote rm origin:

~$git remote rm origin

进行pull: 

以上准备工作做完了以后,我们就可以利用git pull origin master(分支名字,github用master作为默认分支)来pull了。

~$git pull origin master

 那么这时候再回到原本的文件夹下查看,可以看到我们github仓库上的东西已经成功pull下来了:

push: 

添加新加入的文件: 

pull仓库下来之后,我们就可以对仓库中的文件进行修改或者向其中添加(删除)新的文件了。(注意如果要删除文件不能直接在github上进行删除,只能按下面push的步骤来进行修改(删除))。比如我这里为测试写了一个hello.c文件:

#include<stdio.h>
int main(){
    printf("hello,world.");
    return 0;
}

写完保存之后,我们在当前文件夹进入git bash。 

这时候我们可以用git add .来添加新的文件(当然进行修改也是用这个指令)(.代表的是当前目录):

~$git add .

提交更改:

接着我们可以用git status来查看我们添加的情况:

~$git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   hello.c
        new file:   output/hello.exe

确定了之后,就可以使用git commit -m "hello,world"(这里是提交标志,可以随便写一些东西。当然为了让别人看懂,最好写“你干了些什么”的概况)来提交更改了:

~$git commit -m "hello,world"
[master fae8218] hello,world
 2 files changed, 5 insertions(+)
 create mode 100644 hello.c
 create mode 100644 output/hello.exe

进行push: 

准备工作做完之后,我们就可以用git push origin master(分支名字),来push东西到我们的仓库了:

~$git push origin master
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 16 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 24.81 KiB | 2.76 MiB/s, done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://github.com/......
   efd8d2d..fae8218  master -> master

接下来我们再到仓库的网址进行刷新,就可以看到我们更改的内容了:
 注:1.commit可以一次性提交多个更改,所以实际上add和commit可以这样用:

~$git add .
#第一次更改

~$git add .
#第二次更改

~$git commit -m "FirstChang+SecondChang"
#提交两次更改的内容

2. 如果出现类似以下警告:

warning: LF will be replaced by CRLF in ...

可以直接忽略。因为LF是Linux/Unix的换行符,CRLF是windows的换行符,那么git会自动将LF替换成CRLF。 

pull request(PR):

众所周知github是个开源社区,而我们可以使用pull request对开源代码做出贡献,这对我们以后求职经历是一个加分项。那么该怎么进行PR呢?接下来就让我来讲讲。

Fork仓库:

首先找到开源项目,并进入其仓库,让后点击Fork按钮来Fork仓库:

然后我们就能得到一个Fork原仓库后的分叉仓库了。 

clone分叉仓库和添加上游仓库:

Fork好了仓库之后,接下来我们就clone分叉仓库(Fork仓库):

~$ git clone https://github.com/......
#这里的地址写Fork仓库的地址

然后通过git remote -v来查看本地仓库的情况:

~$ git remote -v
origin: https://github.com/...... (fetch)
origin: https://github.com/...... (push)

然后我们回到Fork仓库的原仓库,这里可以点击forked from xxx的xxx来回到原仓库:

然后接下来就是要添加上游仓库:

~$ git remote add upstream https://github.com/......
#这里填写的是原始仓库的地址

然后这里可以git remote -v来看一下是否添加成功:

~$ git remote -v
origin: https://github.com/...... (fetch)
origin: https://github.com/...... (push)
#Fork仓库
origin:     https://github.com/...... (fetch)
origin:     https://github.com/...... (push)
#原仓库

然后利用git checkout -b upstream-local upstream/master来创建一个本地分支:

~$ git checkout -b upstream-local upstream/master
#这里的upstream-local就是你要创建的分支的名字,可以随意修改
#这里的upstream/master意思是在原仓库的master分支基础上建立的,如果要PR其他分支则可以自行修改master

这时候可以通过git branch查看一下创建的分支了:

~$ git branch
   master
*  upstream-local

接下来我们要把开源仓库的提交rebase(同步到本地):

~$ git fetch origin
#连接远程分支
~$ git rebase upstream/master
#同步到本地

做完这些以后,我们就可以对代码进行修改,作出贡献了。

进行PR:

等到修改完了之后,就进行提交就行:

~$ git add .
~$ git commit -m "Test-PR"
~$ git push --set-upstream origin

如果push成功了,那么在github上就会出现:

点击Compare & pull request,接下来就是进行一个比较。

这里的意思就是把我们的本地仓库的upstream-local提交到原仓库的master上面。

然后写好标题和留言(comment)之后,就可以Create pull request了:

至此,我们的PR就已经成功了!接下来就需要等原仓库的作者看到我们PR的内容并进行审核,如果确定可以添加到原仓库上的话就可以为原仓库作贡献了! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值