前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git基础知识(三)

Git基础知识(三)

作者头像
zx钟
发布2019-07-19 14:27:43
6760
发布2019-07-19 14:27:43
举报
文章被收录于专栏:测试游记测试游记

远程仓库

为了能进行项目协作,所以我们需要将仓库托管在一个公共的地方。远程仓库是指托管在因特网或其他网络中的你的项目的版本库。

一般从Github上克隆下来的仓库,我们的权限是只读:能下载,能在本地修改,但是无法上传更改。

当然也可以同时维护好几个远程仓库。

为了学习远程仓库,我们前往最大的同性交友平台Github创建一个学习使用的仓库

Github上搭建一个项目

进入https://github.com并注册一个账户,在首页点击New

New

项目配置

进行项目的配置

  • Owner:所属人员,可以选择自己也可以选择成员组

Owner

  • Repository name:项目名称
  • Description(optional):项目描述
  • Public/Private:项目的开发程度,Public所有人可以看,Private只有Owner可以看到
  • Initialize this repository with a README:是否在初始化的时候创建README.md
  • Add .gitignore:XXX增加项目忽略文件,GitHub提供了很多模版,可以根据自己的需要进行选择和定制

忽略

  • Add a license:XXX:协议

协议以MIT License为例

Copyright (C)   Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:   The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 被授权人权利 被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。 被授权人可根据程序的需要修改授权条款为适当的内容。 被授权人义务 在软件和软件的所有副本中都必须包含版权声明和许可声明。 其他重要特性 此授权条款并非属copyleft的自由软件授权条款,允许在自由/开放源码软件或非自由软件(proprietary software)所使用。 MIT的内容可依照程序著作权者的需求更改内容。此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。 MIT条款可与其他授权条款并存。另外,MIT条款也是自由软件基金会(FSF)所认可的自由软件授权条款,与GPL兼容。

点击创建,就完成了创建,然后会跳转至项目界面

项目界面

具体的东西后续再看了,先点击Clone or Download拿到项目的地址

项目地址

使用以下语句把代码克隆至本地

代码语言:javascript
复制
git clone https://github.com/zx490336534/Git_study.git

克隆至本地

为了方便测试,我们将本地仓库导出一个裸仓库后上传到我的Gitlab服务器

首先到导出裸仓库(一个不包含当前工作目录的仓库)

  • git clone --bare Git_study Git_study.git
  • git clone —bare https://github.com/zx490336534/Git_study.git

导出裸仓库

进入裸仓库

然后把仓库推送到新的服务器上

根据git的规则新的服务器地址应该是http://123.56.13.233:9000/z05035/Git_study.git

使用

git push --mirror http://123.56.13.233:9000/z05035/Git_study.git

就可以把东西推送上去了

推送

Gitlab上的内容

查看远程仓库

git remote的一些用法

使用git remote可以查看远程服务器的简写

可以加-v参数看到简写和对应的URL

查看远程服务器信息

我们现在把Gitlab的服务器信息也加入到远程仓库

代码语言:javascript
复制
git remote add gitlab_origin http://123.56.13.233:9000/z05035/Git_study.git

然后再用git remote -v查看一下,可以看到新增了一个简写是gitlab_origin的远程信息

远程仓库信息

从远程仓库抓取和拉取

这里有两个概念:抓取拉取

从远程仓库获取数据,也就是抓取

代码语言:javascript
复制
git fetch [remote-name]

git fetch 命令会将数据拉取到你的本地仓库,它并不会自动合并或修改你当前的工作

从远程仓库获取某分支的内容并合并当前分支,也就是拉取

代码语言:javascript
复制
git pull [options] [<repository> [<refspec>…]]
git pull <远程主机名> <远程分支名>:<本地分支名>

运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。

代码语言:javascript
复制
git pull origin master:master
把服务器上的master分支拉取到本地的master分支上

其实git pull的本质是

代码语言:javascript
复制
git fetch origin
git merge origin/master

Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

也可以手动建立追踪关系

代码语言:javascript
复制
git branch --set-upstream master origin/next

所以如果是有追踪关系的分支更新,直接使用git pull就好了

git fetch和git pull的区别

git fetch:相当于是从远程获取最新版本到本地,不会自动合并。

代码语言:javascript
复制
git fetch origin master
git log -p master..origin/master
git merge origin/master

以上命令的含义:

  • 首先从远程的originmaster主分支下载最新的版本到origin/master分支上
  • 然后比较本地的master分支和origin/master分支的差别
  • 最后进行合并

上述过程其实可以用以下更清晰的方式来进行:

代码语言:javascript
复制
git fetch origin master:tmp
git diff tmp 
git merge tmp

git pull:相当于是从远程获取最新版本并merge到本地

代码语言:javascript
复制
git pull origin master

上述命令其实相当于git fetchgit merge 在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。

推送至远程仓库

git push命令用于将本地分支的更新,然后推送到远程主机。

代码语言:javascript
复制
git push origin master

将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。

只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

将本地所有分支推送到远端

不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。

代码语言:javascript
复制
git push --all origin

远程仓库的重命名

代码语言:javascript
复制
git remote rename <old_name> <new_name>

git remote rename gitlab_origin gitlab
git remote -v

image-20190331144922832

远程仓库的移除

代码语言:javascript
复制
git remote rm  <name>
git remote rm gitlab
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 远程仓库
    • Github上搭建一个项目
      • 查看远程仓库
        • 从远程仓库抓取和拉取
          • git fetch和git pull的区别
        • 推送至远程仓库
          • 将本地所有分支推送到远端
        • 远程仓库的重命名
          • 远程仓库的移除
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档