Git远程操作

发布时间:2024年01月24日

目录

理解分布式版本控制系统

远程仓库

新建远程仓库:

克隆远程仓库:

向远程仓库推送:

从远端仓库拉取:?

配置Git

忽略特殊文件:?

?给命令配置别名:

标签管理

理解标签:?

?创建标签:

带有说明的标签:?

删除标签:?

?删除远程标签:


理解分布式版本控制系统

?之前文章所分享的所有内容(工作区,暂存区,版本库等待),都是在本地的!而我们的Git其实是分布式版本控制系统!

可以简单理解为,我们每个?的电脑上都是?个完整的版本库,这样你?作的时候,就不需要联?
了,因为版本库就在你??的电脑上。如果想让对方也能看到你所做的修改,那就需要将这些东西推送给对方~~

远程仓库

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。怎么进行分布?

一开始有一台机器具有一个原始版本库,此后别的机器对他"克隆"。?

我们将自己的代码推送至远程的服务器,让其他人能够看到我们的推送,实现多人开发合作

这里我们可以登录GitHub网站,这个网站能提供对Git仓库的托管服务的。只要注册一个账号,就可以免费获得Git远程仓库

但github是国外的网站,速度比较慢。国内的话用码云gitee快的多,这里我们就使用gitee了~~

新建远程仓库:

?

填写基本信息:

?

这样就成功创建了我们自己的仓库,且该仓库就一个主分支master

克隆远程仓库:

  • HTTP?

?克隆远端仓库到本地,需要用到git clone命令,后面跟上远端仓库的链接即可

SSH协议和HTTPS协议是Git最常使?的两种数据传输协议。SSH协议使?了公钥加密和公钥登陆机制,体现了其实?性和安全性,使?此协议需要将我们的公钥放上服务器,由Git服务器进?管理。使?HTTPS?式时,没有要求,可以直接克隆下来。?

注意这里仓库改成开源可以直接clone~~
?

  • SSH?

直接使用的话会报错,并不能直接git clone下来,原因是因为没有添加公钥到远端库中,服务器拒接了我们clone链接。需要手动设置一下

第一步:

创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看目录有没有id_rsa和id_rsa.pub这两个文件,如果有就直接下一步,没有的话创建一下:

ssh-keygen -t rsa -C "自己的gitee邮箱"

顺利的话.ssh目录下就有这两个文件:id_rsa是私钥不能泄露,id_rsa.pub是公钥,可以放心告诉别人

第二步:?

添加自己的公钥到远端仓库

?对设置中的SSH公钥进行设置

?

点击确认后,需要对你进行认证,输入你的账号密码即可。至此,ssh的准备工作搞定,接下来的clone就畅通无阻了

如果有多个?协作开发,GitHub/Gitee允许添加多个公钥,只要把每个?的电脑上的Key都添加到GitHub/Gitee,就可以在每台电脑上往GitHub/Gitee上提交推送了

当我们从远程仓库克隆后,实际上Git会?动把本地的maste分?和远程的master分?对应起来,并且,远程仓库的默认名称是origin 。在本地我们可以使? git remote 命令,来查看远程库的信息?

  • git remote?

?

  • git remote -v

更详细一点~~?

上面显示了可以抓取和推送的origin地址,如果没有推送权限,就看不到push地址?

向远程仓库推送:

本地已经clone成功远程仓库后,我们便可以向仓库中提交内容,例如新增一个file.txt文件:

如果我们之前设置过全局的name和e-mail,这两项配置需要和gitee上配置的??名和邮箱?致,否则会出错。或者从来没有设置过全局的name和e-mail,那么我们第?次提交时也会报错。这就需要我们重新配置下了,同样要注意需要和gitee上配置的??名和邮箱?致

提交之后就可以推送了:

git push <远程主机名> <本地分?名>:<远程分?名>

# 如果本地分?名与远程分?名相同,则可以省略冒号:

git push <远程主机名> <本地分?名>

?此时我们要将本地的master分支推送到origin主机的master分支 ,则可以:

?

git pull <远程主机名> <远程分?名>:<本地分?名>

# 如果远程分?是与当前分?合并,则冒号后?的部分可以省略。

git pull <远程主机名> <远程分?名>

这就是我们新提交的文件

从远端仓库拉取:?

我们先在gitee仓库中对file1进行修改~

此时,远程仓库是要领先于本地仓库?个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。Git提供了 git pull 命令,该命令?于从远程获取代码并合并本地的版
本。格式如下 :

git pull <远程主机名> <远程分?名>:<本地分?名>

# 如果远程分?是与当前分?合并,则冒号后?的部分可以省略。

git pull <远程主机名> <远程分?名>

?

?

此时终端中也有了gitee上修改的内容,注意pull是拉取并合并~~


配置Git

忽略特殊文件:?

在?常开发中,我们有些?件不想或者不应该提交到远端,?如保存了数据库密码的配置?件,那怎么让Git知道呢?在Git?作区的根?录下创建?个特殊的 .gitignore ?件,然后把要忽略的?件名填进去,Git就会?动忽略这些?件了

不需要从头写.gitignore文件,gitee在创建仓库的的时候就可以为我们生成,不过要我们手动勾选一下

如果当时没有选,在工作区创建一个也是可以的。无论哪种方式,最终都可以的得到一个完整的.gitignore文件,例如我们想忽略以.so 和 .ini 结尾的所有文件,.gitignore的内容如下

很好理解,*为通配符,后缀为.ini 和 .so都符合上面的形式,这样推送的时候就会被忽略,此时也要记得将.gitignore文件也提交到远端:

?

但如果有些时候你想强制添加一个文件到Git,但是这个文件被ignore忽略了,根本添加不了,那么就可以用-f强制添加

git add -f [filename] 

?或者你发现,可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,?如说?a.so??件
是要被添加的,可以? git check-ignore 命令检查:

git check-ignore -v a.so

Git?会告诉我们, .gitignore 的第4?规则忽略了该?件

但这样强制的-f添加进去破坏了.gitignore文件的规则,那么就可以在.ignore中额外添加一条例外规则:

?

这里的意思就是排除所有.so后缀结尾的文件,但是给a.so一个特例,让他需要被提交?

?给命令配置别名:

在我们使?Git期间,有些命令敲的时候着实让?头疼幸运的是,git?持对命令进?简化!

举个例子将git status 简化成 git st:

git config --global alias.st status

?--global 参数是全局参数,也就是这些命令在这台电脑的所有git仓库下都有用,如果不加就只对当前仓库有用

?

建议是在学习期间,还是多敲敲代码,以后工作再用这个~~?


标签管理

理解标签:?

标签tag,可以简单理解为对某次commit的一个标识,相当于起了一个别名。例如,在项目发布的某个版本的时候,针对最后一次commit起一个v1.0这样的标签来表示里程碑的意义。

这有啥用?

相较于难以记住的commit id,tag很好的解决了这个问题,因为tag一定要给一个让人好记住,且有意义的名字。当我们要回退到某个重要版本的时候,直接使用tag就能很快定位

?创建标签:

在Git中创建非常简单,首先切换到需要打标签的分支上

然后,敲命令git tag [name]即可

  • git tag [name]?

可以使用git tag 查看所有标签

  • git tag

默认标签是打在最新提交的commit上的。那如何在指定的commit上打标签呢?方法是找到历史提交的commit id,然后打上就行了

?

注意标签不是俺时间顺序列出,而是字符排序

可以使用git show [tagname] 查看标签信息的

?

带有说明的标签:?

Git还提供可以创建带有说明的标签,-a指定标签名 ,-m指定说明文字:

git tag -a [name] -m "XXX" [commit_id]

另外打完标签后再看看本地库.git下有什么变化,便于帮你理解

?

删除标签:?

语法:

git tag -d [tag_name]

因为创建的标签都只存储在本地,不会?动推送到远程。所以,打错的标签可以在本地安全删除。如果要推送某个标签到远程,使?命令 git push origin <tagname>

比如推送v1.0标签

git push origin v1.0

?

当然如果你有很多标签也可以一次性全部推送到终端:

git push origin --tags

?

?删除远程标签:

这个稍微麻烦一点

第一步:先删除本地

第二步:从远端删除,删除命令也是push,但是格式如下

文章来源:https://blog.csdn.net/Obto_/article/details/135814652
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。