Git | 远程操作
文章目录
0、分布式版本控制系统概念
Git是一个分布式版本控制系统,可以进行多人协作开发。
一个团队中每个人的电脑都是一个完整的版本库,一个版本库控制系统有一台充当中央服务器的电脑,用来方便交换、同步彼此之间的修改。与此同时还能一定程度上避免因为本地故障而阻塞项目进度,例如硬盘损坏而导致的文件丢失。
这里的起着中央服务器的电脑通常不用我们自己花钱去购买,目前比较主流使用gitee或者github这样提供Git仓库托管服务的网站,在上边同步远程仓库。
基于本地网络情况以及访问效率上来讲,这里使用的是gitee。
1、创建远程仓库
具体步骤如下:
-
进入gitee官网,注册并登录,点击导航栏右上角的加号,点击新建仓库
-
填写基本信息建议仓库名填成英文的,路径会自动映射上去,仓库介绍为非必填项,一开始可以先设置成私有的;初始化仓库的话可以选择语言,练习的时候不选择也可以;设置模版中ReadMe文件勾选之后项目初始化时会多个Readme文件和Readme.en文件【英文】(一般为仓库的使用说明文档),后边的不选择也可以。
-
点击创建
补充:后续更改仓库的开源状态或者更改仓库信息,点击仓库里的管理:
2、克隆远程仓库
clone/download远程仓库到本地(windows/linux本地),需要使用git clone
命令。(这里贴的是windows的,但linux的跟这个差不多)(ps,只有这里贴的是windows的,其他的都是LinuxOS的)
一般来说,克隆远程仓库有两种方式
- 通过https方式
- 通过ssh方式
上边这两种方式,是git最常使用的数据传输协议
https方式
-
复制命令到终端执行【点击到对应文件夹这里是e盘,右键git bash那里,粘贴并敲下回车】
-
再次查看e盘,发现已经克隆下来
为方便演示,这里我先将clone下来的仓库删除。
ssh方式
ssh协议使用公钥加密和公钥登录机制,因此,相较于使用https,使用此协议多了一步——将我们的公钥放在服务器上,由Git服务器进行管理。
-
拿到自己的公钥
-
输入
ll -a
,查看当前仓库目录中有没有.ssh目录,.ssh目录下有没有id_rsa和id_rsa.pub两个文件 -
若有,则跳过生成公钥和私钥的步骤,若没有,输入
ssh-keygen -t rsa -C "xxx@qq.com"
生成 -
此时再次查看
ll -a
,进入.ssh目录这里存在一种情况,就是你的git装到了其他盘,可能生成的文件在对应的路径下,此时再查看的时候可以通过路径信息查看对应的信息
-
查看id_rsa.pub(公钥),并复制
-
-
添加自己的公钥到远程仓库
设置–》安全设置–》SSH公钥
标题:可以使用mykey(实际上随便命名) 公钥部分将从文件中查到的内容原原本本复制上去,点击确定
-
再次复制ssh方式的clone命令执行
3、推送至远程仓库
这里因为之前配置原因,已经手动将本地库与远程的remote-gitcode做了连接,但是后续又进行了test_factory1的克隆,最终还是推送到了remote-gitcode上,精力原因不再修改。
对于windows来说推送到远程可以通过图形化界面方式(需要用小乌龟)和非图形化界面的方式,而对于Linux来说一般就是通过git命令进行操作,这里主要说的是非图形化界面方式即命令行方式。
推送之前我们需要确保已经将gitee账户的姓名和邮箱配置上去了,查看方式:
git config -l
以将版本库中的file5push到远程为例:
- 创建并编辑file5
- add file5 commit file5
- push file5
其中git push origin master:master
,origin是远程主机名,后边是本地分支名:远程分支名
这里有两个文件被修改是因为我之前就连接过其他仓库remote-gitcode,又在这个仓库下克隆的test_factory1,所以相当于是把内容推送到remote-gitcode上去了。
如果想推送到test_factory1上可以单独找一个目录进行克隆并提交和push,整体流程是这样,不再演示。
4、本地拉取远程仓库
在gitee上边修改ReadMe文件(实际工作中最好不要动,这里只是模拟),本地拉取远程的文件:
git pull origin master:master
其中本地分支名和远程分支名相同时,可以省略远程分支名
5、配置Git
忽略特殊文件
背景:不想提交保存数据库密码的配置文件,就不让git追踪管理某些文件
解决:git工作区中有个.gitignore文件
-
vim .gitignore
# 省略选择模本的内容 ... # My configurations: *.ini *.so
-
git add .
-
git commit - m "add .gitignore"
-
git push origin maser
这样操作后,即使我们修改了ini文件,它也不会被追踪,so文件同理
使用的过程中可能存在以下情况
-
我们想强制添加一个已经被忽略的文件:
git add -f [filename]
-
查看被忽略的文件到底是哪里设置了:
git check-ignore -v a.so
-
.gitignore已经配置忽略so文件,但是希望不忽略a.so文件:
例外规则:
!文件名
==》!a.so
给命令配置别名
- 将git status简化为git st:
git config --global alias.st status
- 显示最后一次提交信息:
git config --global alias.last 'log -1'
配置完别名,原来的也可以使用
6、标签管理
标签是对某次commit的标识,eg:v1,v2,
版本包或许与这里有些联系,版本号或许就是标签?
标签可以通过远程仓库查看
创建标签
1、初试
- 切换到需要打标签的分支上:
git branch
【打当前的分支的当前版本】 git tag [name]
:这里以v1.0为例- 用
git tag
查看所有标签 - 之后可以通过
git push origin <tagname>
提交,然后在远程就可以看到了
2、在指定版本的commit上打标签:
- 首先找到想要打标签的历史版本,可以通过查日志的方式:
git log --pretty=oneline --abbrev-commit
- 对这次提交打标签(若标签名为v0.7):git tag v0.7 部分或全部commitid
- 通过git tag查看:【标签不是按时间给的,是按照字母排序的】
另外,可以通过git show [tagname]
查看标签信息
操作标签
创建的标签只会存储在本地,不会自动推送到远程。
-
如果操作错误想删除,可以执行
git tag -d [tagname]
; -
如果想要提交,执行
git push origin <tagname>
即可 -
想要删除已经推送到远程的标签
- 先本地删除:
git tag -d [tagname]
- 再从远程删除:
git push origin :refs/tags/[tagname]
tag -d [tagname]`;
- 先本地删除: