在国内所以用gitee进行操作,还有一个可以配置密钥,这个后面聊,现在聊一如何操作远程仓库。需要了解Git基础的可以看另一篇:传送阵
常用命令:
命令 | 描述 |
---|---|
git remote -v | 查看配置的远程仓库 |
git remote add 别名 远程地址 | 因为远程地址不好记也不方便输入所以用一个别名。这个是添加远程仓库以及起一个别名 |
git push 别名 本地分支 | 将本地分支上的内容推送到远程仓库 |
git clone 远程地址 | 将远程仓库的数据克隆到本地 |
git pull 远程地址命令 远程分支 | 将远程仓库对于分支最新的内容拉下来后于当前本地分支直接合并 |
git remote rename 别名 新别名 | 远程仓库的重命名 |
git remote remove 仓库别名 | git remote rm 仓库别名 | 要移除一个远程仓库 |
git clone 仓库名 | 克隆一个仓库 |
前提:
-
申请一个gitee账户。
-
创建一个仓库,这样才有仓库地址,本人测试地址:
-
然后git给自己的添加签名,这个上一篇聊过
git config --global user.name 名字 git config --global user.email 邮箱
还是那句话这个和git账户密码没关系,当然你也可以设置成一样的。
-
初始化某一个文件是git本地仓库
git init // 这个前面也说过
注意:本地数据提交到本地仓库,才能提交远程仓库。
不同地址
可以看出对于远程仓库的地址无论是gitee还是github都有两种不同地址:
-
HTTPS :
不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;
-
SSH:
clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。
SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。这个如何配置后面聊。
添加一个远程仓库 以及起一个别名
既然需要与远程仓库进行交互,那自然就需要知道远程仓库在哪里。所以就以我个人设置的远程仓库为例。一般习惯将别名设置和项目名一样,方便记忆
// 这个gitee 这个创建的时候是私库
git remote add tesssst https://gitee.com/huikmenk/test.git
这样等于添加一个远程仓库。
查看添加的远程仓库
毕竟添加了多少仓库。
git remote -v
可以看出这个地方显示两个库,但是仔细看的话会发现两者几乎一样,其实就是说一下这个仓库。
-
fetch : 其实是远程仓库同步到本地地址,其是pull一部分这再下面补充。
-
push : 就是推送到远程仓库的地址。
push/pull 远程仓库
如果在gitee创建完仓库后会有如此提示:
似乎已经将所有步骤都写了出来,但是我们在push的时候还是有问题的。
这个涉及到一个问题,如果在提交的时候初始化了readme文件就有另一个问题。
这个还是聊git时候的文件,切换到分支master下的text.txt文件,然后看一下内容:
然后再远程仓库有有哪些数据
两个的README.md的文件是再初始化的时候会选择添加,说白了就是对这个仓库的内容进行说明,也可以写一些如何使用的步骤。
注意一点gitee创建的默认主分支和git一样是master,但是github的默认主分支是main,当然都可以修改。
如果仓库没有自己没有push权限也是无法进行push。
现在将test.txt push到远程仓库maste:
// 因为有别名所以不写https地址了,要不然也不会起别名 git push 别名 本地分支名
git push tesssst master
说如果通过https
push到仓库的话需要输入gitee的账户密码的。
但是还是会失败报错:
To https://gitee.com/huikmenk/test.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/huikmenk/test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
为什么,因为首先需要通过pull,让远程和本地仓库同步。 告诉远程仓库和本地仓库,你两个算是分布式版本控制了,控制的内容一样。
// 因为有别名所以不写https地址了,要不然也不会起别名 git pull 远程地址命令 远程分支
git pull tesssst master
似乎没有问题,但是如果要是再push的时候:
// 其实说实话-u 这个参数带不带 效果不变。 git push tesssst master
git push -u tesssst master
这事为什么?因为再初始化的时候,生成了两个文件:
然后pull的时候没有同步到本地:
所以会这个时候就需要参加参数:
//--allow-unrelated-histories 也就是在合并merge的时候,有时候会不成功 ,加上这个即可
git pull tesssst master --allow-unrelated-histories
然后再push的时候就不会报错:
这个又涉及到一个问题:那就是如果push的时候,有人在gitee网页进行修改了,你push的话因为两个版本,不一样所以需要先pull,然后调整代码再来搞:例子是添加了:qqqq
本地修改为:
然后再push试一下:
git push tesssst master
所以还是需要进行pull再本地进行一次合并处理。
然后根据自己需求修改一下本地的test.txt文件,先后提交本地版本,再进行push就不可以了。
git push 命用和在gitee上创建的分支名不一样呢?
格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
//如果本地分支名与远程分支名相同,则可以省略冒号
git push <远程主机名> <本地分支名>
// 这个会报错的 (因为git网站我没有 test_branch 分支)
git push tesssst test_branch
然后如果改成如下:
// 没有这个分支也就没有必要pull了
git push tesssst master:test_branch;
这样push的时候会发现
既然远程仓库也有了test_branch 分支了,那么再修改一下test.txt文件,是否可以通过省略写远程分支的方式上传呢?
//如果这个时候在push 也不行的,毕竟两者还需要同步一下
git push tesssst test_branch;
然后就是pull和push操作就和操作master分支的意义了,就不解释了。
补充
其实git pull同时完成了两个步骤,如果分开的话是这样的:
git fetch 远程仓库同步到本地
git merge 毕竟远程仓库和自己的仓库需要合并一下内容
而在使用者一般都是为了省事直接通过pull操作。
远程仓库删除和重命名
远程仓库自然也可以删除,命令如下:
git remote rm 别名
也可以重命名:
git remote rename 旧名字 新名字
克隆仓库
这个是最常用的一种方式,那就是克隆一个项目,工作的时候项目经理也会给你这个一个地址让你克隆项目,一起svn都是时候是checkout。
一般克隆的时候会单独弄一个本地仓库文件毕竟这个是一个新项目。我随便在找一个开源的项目。
// 克隆一个项目 默认旧等于pull 同步了
git clone https://gitee.com/bilibala/YiSpider.git
我估计没有新建文件夹然后看下:
会发现很乱,而且也不建议新建的文件夹然后初始化,毕竟如果提交的化,直接进文件里面吧,克隆的文件夹自动会初始化。
git clone url 默认克隆的是master分支。如果需要选择某个仓库的某分支如下操作:
git clone -b 分支名仓库地址
fork
前面一直说fork也是git牛逼的地方之一,但是需要一天远程仓库,现在看一下gitee提供的。
然后其实其push代码的时候会在这个地方看到:
通过SSH配置
这个配置其SSH配置在gitee和github大同小异,一般这个是操作自己的仓库或者被赋予了管理员权限才有必要添加。
所以就演示一个了:
第一步先通过本地命令生成一个密钥(不是git命令窗口,而是cmd窗口):
// 具有管理或者拥有者的邮箱, 也就是账户邮箱
ssh-keygen -t rsa -C "这里输入你的邮箱@xxxxx.com"
如果之前有,也要重新生成一下,不然会出现各自问题。
因为我本身有,所以旧选择不覆盖了,具体文件在:C:\Users\自己电脑名.ssh
其中: id_rsa是私钥,id_rsa.pub是公钥,将公钥复制黏贴到下面:
在gitee设置中:
添加的时候需要你输入密码确认
然后在新建一个文件test1.txt
然后push一下:
方便起见这个地方我们就不甚至别名了
git push git@gitee.com:huikmenk/test.git master
整个时候保存密钥的地方又生成另一个文件:
为啥会出这个错误呢?因为我为了重新来一遍,用的手机号注册的一个新号,但是我用的是老号的邮箱所以报错,然后我登录一下老号,重新配置了一下,然后提交如下:
出现问题
-
问题1
The authenticity of host 'gitee.com (212.64.63.190)' can't be established. ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
- 原因1:这种第一重新生成一下密钥,要不覆盖要不就是删除后在生成文件。
- 原因2: 没有使用有权限账户绑定的邮箱。
-
push的时候出现之前的问题:
error: failed to push some refs to
- 整个就通过pull同步一下两个库即可。
最后说一个挨打的话,虽然命令需要掌握,但是很多开发软件可以集成将整个git配置在开发软件中,通过图像操作。