目录
8. Git远程仓库
最常听说的远程仓库就是GitHub、码云、GitLab,在企业中一般用gitlab(需要自己部署)(因为github是把代码放在别人那里,对于企业来说,这并不安全)
这里,使用码云(gitee)进行讲解
搜索一下码云,进入官网,注册账号
新建一个仓库
建好后,如下
8.1 配置SSH公钥
配置SSH公钥乃使用远程仓库之前提,接下来,看看如何配置SSH。
在本地文件中的Git Bash中输入
ssh-keygen -t rsa //然后,一路“回车”就可以了
获取公钥
cat ~/.ssh/id_rsa.pub //在Git Bash中输入
将该命令下输出的所有内容复制(选中即为复制)
回到gitee上,找到设置,在设置中就有SSH公钥
然后,把公钥粘贴进去,再命个名,就可以了
最后,回到Git Bash中验证一下是否成功
ssh -T git@gitee.com //他会询问是否继续链接,输入yes即可
这样,就成功了。
注:在仓库界面的管理中,可以修改仓库的一些属性(比如,名字)
8.2 将本地推送到远程
以下的第一二步为建立本地与远程仓库的联系,第三步才是推送。
Frist,复制远程地址,如下图
Second,打开Git Bash,输入以下内容
git remote add origin SSH的地址 //origin为你给远程仓库取的昵称(通常)
git remote //使用该代码查看当前有哪些远程仓库,如下图
Third,开始推送
git push origin master //意为将master分支上的文件推送到origin远程仓库中
如此这般,在去gitee中刷新,就可以看到上传的文件了
拓:关于git push,
其原式为git push [-f] [--set-upstream] [远端名称] [本地分支] :[远端分支]
也就是说上面的代码实为git push origin master:master,只是,相同分支名可以省略,所以只写了一个master。(当远端有多种分支的时候,最好不要省略)
-f 指强制覆盖,如果,上传的文件在远端仓库里已经存在,正常来说,会禁止上传,加上-f 即可使之强制覆盖,以上传的为准。(一般用不到,防止误操作)
--set-upstream (可简写成-u)用于和远端分支建立关联关系,当当前分支与远端分支关联后,之后的推送指令就可以省略分支名和远端名,即直接用git push就可以。(运行如下)(⭐)
其中,git branch -vv可查看分支与远端分支的关联关系(如上图的蓝字部分),另外,第一行命令中的所有符号均为英文字符。(git branch本意就是查看分支)
8.3 从远程仓库克隆
指令:
git clone SSH地址 自定义名字 //如果不去定义名字,就会默认取SSH后几位为名字
接下来,演示一下(演示不取名字的)
在桌面打开Git Bash(不在克隆对象的源文件中打开),输入git clone SSH地址,即可看到一个文件在桌面上创建。
其中,SSH的地址在下图中可找到
可以看到的是生成的文件名称与我们的库名称一致,所以我们一般不会对克隆文件进行额外的命名。
在该文件中打开git bash,并且在源文件中打开git bash,对比两个的git-log,发现只有略微的不同。
一般而言,不会频繁地进行克隆,通常只执行一次。之后的同步由新的指令进行操作,接下来就看看这些新的指令。
8.4 抓取与拉取
抓取命令的基本形式:
git fetch [远程仓库名] [分支名] //如果不指定远程仓库名和分支名,则抓取所有分支到当前
拉取命令的基本形式:
git pull [远程仓库名] [分支名] //如果不指定远程仓库名和分支名,则抓取所有分支到当前
//等同于fetch + merge
先在本地的文件中用Git Bash建立一个新的文件作为示例,推送到远程仓库,再在拷贝的文件中打开Git Bash进行抓取。
//本地
touch starRail02.txt
git add .
git commit -m "add starRail02"
git-log
//在本地推送到远程仓库
git push
git-log
//在拷贝的文件中打开git bash
git-log
//抓取
git fetch
git-log
//将原来的和新抓取来的,进行合并
git merge origin/master
git-log
抓取后的git-log大抵如下左图,合并后的git-log如下右图
但是,这种抓取又是fetch,又是merge的,挺麻烦的,所以,出现了简化版——拉取。
上代码,
//本地
touch starRail03.txt
git add .
git commit -m "add starRail03"
git push
//拷贝的文件中
git pull
git-log
运行后的效果与上文的相同。
8.5 解决合并冲突
当两个人同时修改了同一个内容时,就会出现合并冲突。
继续使用上文的两个例子(本地文件和克隆在桌面的文件)。
首先,打开两个git bash
随便修改一个文件
//克隆中
vi starRail01.txt
将内容修改成update = 2
git add .
git commit -m 'update starRail01-2'
//上传
git push
git-log
//本地中
重复以上操作,但内容改为update = 3
并且不上传,而是抓取
git fetch
git-log
可以看到,本地中出现了分叉,在本地执行git pull,显而易见的可以看到拉取失败了...
未完待续