Git笔记——基本功能(下)

2022-10-31 15:58:31 浏览数 (1)

大家好,DDL是大学生的第一生产力,所以很快就赶出这第二篇教程出来啦。

本篇文章会重点放在GitHub上,说git操作GitHub的一些基本操作。

本篇文章的部分内容参考了Git链接到自己的Github(1)简单的开始 - plinx - 博客园,这是一篇不错的blog,介绍了git操作GitHub的一些常见问题。

下面我们开始正文

目录

准备工作

推送文件及常见问题

GitHub 界面一些按钮及操作

准备工作

先给大家看看GitHub的界面

首先登陆GitHub的网站,注册一个GitHub账号,GitHub的账号是电子邮箱和密码,这个邮箱是GitHub用来给你发通知的重要邮箱,不要随便设置。

然后我们返回git,记得你之前设置了一个本机的邮箱和用户名吗?现在你需要让本地库与GitHub建立连接,如何让GitHub知道这个是你发的呢?这就是SSH密钥的作用了,好的,我们输入以下命令:

ssh-keygen -t rsa -C "youremail@example.com"

(请注意这个邮箱是你的本机邮箱)

这是在生成一个RSA的SSH密钥,之后它会先让你确定产生的id_rsa(请注意文件名,这个文件名要是不对就删掉重来吧,以前我掉进坑过)的密钥地址,好的,然后会让你输入密码,这个密码如果不是军事用途,商业机密什么的就忽略掉。讲白了,直接enter下来就好

但是!如果这不是你第一次设置密钥,你可能会与之前的密钥地址和文件名冲突,这个时候需要自己设置好存放的地址。

这里给大家看一下产生的两个文件

(以前已经设置过一个密钥了,所以这次我修改了存放地址)

id_rsa那个是密钥,不要泄露出去,id_rsa.pub是公钥(public),可以暴露,同样的,GitHub只需要知道你的公钥就可以确定你是谁了。所以下一步我们回到GitHub。

点击右上角你的头像——Settings——SSH and GPG keys进入界面,点击右上角的New SSH key按钮

自己设立title,然后key里面把原来的公钥用notepad 打开,直接复制粘贴到Key框里面就好。

添加好了,我们来测试一下SSH链接。

ssh -T git@github.com

被成功识别之后,你就可以开始操作了。

推送文件

首先,我们在GitHub账户上创建一个新的空仓库,以我自己的账户为例,设置名字为demo

由于我们现在演示的是把东西推送上去,所以最后那个设置README的选项不要管它。直接到这里就创建仓库就好。

然后进入这个界面

下一步要做的事情就已经很明显了,输入命令

git remote add origin git@github.com:*

git push -u origin master

我们解释一下:

● 第一行命令是要添加一个远程库,*后面是这个仓库的地址,对照好GitHub界面左上方仓库的地址,然后不要忘了后面的.git扩展名,remote 遥远的,origin一般表示远程库。

● 第二行命令是将master分支上的东西都推送到这个远程库上。-u参数表示第一次需要先建立本地版本库与GitHub远程库的连接,第二次之后就不需要这个参数了。

那我们来演示一下

(提交的过程会有点慢,等待就好)

(origin是刚才做了添加之后产生的文件,无视就好)

那么提交之后,再回头去看看GitHub,发生了什么呢?

这就完成了提交。

提示:远程库的状况如果你不清楚的话,只需要输入命令:

git remote -v

就可以展现远程库的详细信息。

提示:如果你想推送到下一个库,那么之前的库要记得删,命令是

git remote remove origin

注意:分清楚工作区,暂存区和你的branch分支上的文件(已经提交的),你这次的push只是把已经commit到branch分支上的文件提交了上去,工作区内没有被add,commit的文件是不会被提交的,如果觉得不太放心,时刻注意查看一下工作区的status

注意:很多时候我们需要把一个库里面的文件夹一起推上去,git add有一种参数方法是可以把所有的文件一起推送上去的,这里不介绍这个命令的原因是如果碰上文件夹,这种方法会把文件夹识别为文件,会产生意想不到的情况。所以我建议大家一个一个的add,然后检查完了再进行push。

当然,事情往往总不是那么plain sailing(一帆风顺)……

因为之前我们已经做了很多的注意和提示,所以诸如连接不上,找不到仓库(not find a repository)这些的我们都当你们会成功的躲过……

但是,有可能会发生rejected(拒绝)的错误,别忘了刚才我们是推送给一个空仓库,如果里面有东西呢怎么办?

有的代码是不允许你覆盖的,这种情况下我们推荐的解决方案是先把它原本的东西抓取下来,使用的命令是

git pull

这个时候会牵涉到分支的合并的问题,具体的说的话不太好理解,其实只要理解为:远程库的版本比你现在的分支的版本要新,你应该怎么样做分支的合并?

这个时候,我们进入.git文件夹(别忘了上一节提到的那个初始化工作区后生成的一个隐藏文件夹),打开config,修改里面的一些东西为如下内容:

[branch "master"]

remote = origin

merge = refs/heads/master

之后就可以正常爬取并且传送上去了。

这种情况产生的原因是冲突,这在多个分支的工作的时候经常会出现,不过如果你一直都是一个master分支,那倒是问题不大。

好的,最后来说一说clone

git clone git@github.com:*

*的东西是远程版本库的地址,我们举个例子,现在打开一个很强的GitHub网站

我要把它clone下来放到我的GitHub的demo工作区

这就代表了任务的完成,回去看看demo里,哎,真有这玩意。

提示:我自己在研究的时候发现传输的速率总是很慢很慢(几个KB/s),但是现在我们看这个就发现完全不一样,这个原因是因为我自己打开的校园网的VPN,如果你也是学生的话,这个方法不妨一试,挂个服务器代理,连一下VPN,都可以大大提高传输的速率。

好的,有人要提问了,到现在为止,我都没有发现怎么删除文件,事实上这需要好好的理解一下git add和commit文件的具体表示。

我们这里提供了一个演示

我之前手工的创建了一个文件demo2.txt,现在我把它手动删除了,然后

看到图里的deleted了没?再看看下面的git add demo2.txt,是不是有点懵逼?

注意!这里提交的并不是demo2.txt的文件,而是对应的它的修改命令!也就是说,你把这个东西commit并且push掉之后,GitHub执行的就是删除命令了。demo2.txt就在GitHub上被删了。

当然,如果你想完全通过命令行来简单粗暴的解决,也可以使用git rm命令,具体的原理与git add相似,这里我们就不展开了。

下面,来看一个稍微复杂的问题

写一份教程的同时自己也要保证图的多样性,例子的准确性,就刚刚我看到了我的git上显示了这些东西

原来我在刚才做了删除操作之后发现那个句子好像很不错,我就后悔了,做了一次reflog,于是,现在我的本地仓库版本已经比远程库落后了,这个时候,我尝试着去push新的东西上去,也就失败了

解决方案:

1. 把目前你的东西复制一份移出工作区

2. it pull,然后把你的东西移进来,手动解决冲突。

3. git push

这样就可以了。

这个问题挺常见的,希望大家可以多看看这篇文章,积累经验。

GitHub 界面一些按钮及操作

学了以上的命令,已经足够你玩转你自己的GitHub了,但是这并不是我们逃避GitHub的理由,因此我们这里依然对GitHub的界面做一些简单的介绍,希望大家学完后可以轻松玩转GitHub~~

我们还是一样,看图说话

登陆GitHub网站,我这边会显示这样的画面

可以看出分为好几块,我们一个一个来说

● 上方导航区,一般常用的是search,pull requests和issues。

● 左上方的导言,这是给你去探索着玩的,有兴趣的可以去看看

● 右上方的表示你在这些仓库里贡献过,也就是提交过文件

● 右下角表示仓库,注意三个图标,前三个代表是自己的仓库,第四个代表这是个私人仓库,经过owner分享才能看到,最后三个是fork下来的(fork的概念之后说)

● 点击右上方的头像,点击your profile就进入了下一张图

这里就要说这么几个概念了

fork

我们看到REMDME下面有一行提示文字是forked from...,这代表这个仓库是从别的地方拷过来的,这种情况多半出现在需要摘用别的代码并且进行修改的时候,在项目协作开发的时候会经常用上。

与之相对应的就是

pull request

点进去fork的仓库,我们来看一下这张图

我们继续一点一点来看

● 首先右上角的三个按钮是标记这个仓库被fork,star,watch的次数的,当然你也可以点击那个fork的按钮,完成fork操作

● 略微向下有一个code栏,pull requests之后说,projects这一栏主要是用来标记目前的项目开发的一些进度的,这个有点像notes的意思。另外想介绍一下settings,这可以对仓库做一些处理,比如删除……不说了,我脸现在还很疼。

● 再往下看到31 commits那一栏,这一栏我们拉出来说

1. commits

这是记录提交的每一步的,这和git reflog展现出来的内容相似,点每一次提交记录就能看到每一步的提交状态。

2. branch

这标记了提交的不同分支,在项目开发中,有可能有一方面的内容是由多个人来做的,这个时候多个人对应多个分支,这一方面内容有点复杂,这里略去不说。

3. Release

这个牵涉到了版本tag标记的概念,大概意思就是说,我每一次的成稿都给它一个tag,标记版本号,也就是项目开发的开发版本相关内容,这一块内容由于组内开发不复杂,这里略去不说。感兴趣的可以参考廖雪峰老师的教程。

4. contributors

这就表示由多少人参与了协作。

● 再下方最左有个branch:master,master都知道是主分支,如果你用多个分支提交过文件,就会有不一样的内容

● 稍微往右看,看到了一个New pull request,这就是fork对应的功能,你fork完,修改完之后认为对了,就可以提交一个pull request,界面会给你提供修改的痕迹,提交成功后,由这个仓库的owner进行评定,如果成功,你的pull request就会成功的被应用到他的项目开发中,也就是给开源做了贡献啦。

● 再往右看有个create new file和upload files等等,咱们略去不说,因为太简单了,clone or download中,download是可以下载的,不过是手工下载,clone就不用说了,你已经学过git了。

● 再往下有一条提示信息:

This branch is 26 commits behind the xmucpp:master.

这个代表你fork的对应的原organization(组织,orga)已经很新了,在这之后有26条提交记录,后面就开始提示你要不要做pull request,但是compare的话只会compare这个仓库的变化,所以有可能你点进去依然看不到任何信息。

最后,给大家展示一下项目组的organization

被邀请进入项目GitHub的人自然就可以在组内创建仓库进行工作了,而owner资格拿到之后,就可以删除仓库,整理仓库了。

好了,可视化界面的介绍就到这里。

写在后面

git操作GitHub和GitHub本身可视化界面,每个人倾向不同。但是git学好之后,对于理解GitHub上的一些界面按钮很有好处,而且用git操作会显得比较的程序猿,所以说,找到二者的结合点,是玩转它的关键~

~好的,本系列教程结束,撒花~

~欢迎支持着点赞~

~笔芯~

文/刘理

排版/芷若

0 人点赞