Git基础知识(三)
远程仓库
为了能进行项目协作,所以我们需要将仓库托管在一个公共的地方。远程仓库是指托管在因特网或其他网络中的你的项目的版本库。
一般从Github上克隆下来的仓库,我们的权限是只读
:能下载,能在本地修改,但是无法上传更改。
当然也可以同时维护好几个远程仓库。
为了学习远程仓库,我们前往最大的同性交友平台Github创建一个学习使用的仓库
Github上搭建一个项目
进入https://github.com并注册一个账户,在首页点击`New`
进行项目的配置
Owner
:所属人员,可以选择自己也可以选择成员组
Repository name
:项目名称Description(optional)
:项目描述Public/Private
:项目的开发程度,Public所有人可以看,Private只有Owner可以看到Initialize this repository with a README
:是否在初始化的时候创建README.mdAdd .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
拿到项目的地址
使用以下语句把代码克隆至本地
1 | 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
就可以把东西推送上去了
查看远程仓库
使用git remote
可以查看远程服务器的简写
可以加-v
参数看到简写和对应的URL
我们现在把Gitlab的服务器信息也加入到远程仓库
1 | git remote add gitlab_origin http://123.56.13.233:9000/z05035/Git_study.git |
然后再用git remote -v
查看一下,可以看到新增了一个简写是gitlab_origin
的远程信息
从远程仓库抓取和拉取
这里有两个概念:抓取
,拉取
从远程仓库获取数据,也就是抓取
1 | git fetch [remote-name] |
git fetch
命令会将数据拉取到你的本地仓库,它并不会自动合并或修改你当前的工作。
从远程仓库获取某分支的内容并合并到当前分支,也就是拉取
1 | git pull [options] [<repository> [<refspec>…]] |
运行 git pull
通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
1 | git pull origin master:master |
其实git pull
的本质是
1 | git fetch origin |
Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在
git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master
分支自动”追踪”origin/master
分支。
也可以手动建立追踪关系
1 | git branch --set-upstream master origin/next |
所以如果是有追踪关系的分支更新,直接使用git pull
就好了
git fetch和git pull的区别
git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
1 | git fetch origin master |
以上命令的含义:
- 首先从远程的
origin
的master
主分支下载最新的版本到origin/master
分支上 - 然后比较本地的
master
分支和origin/master
分支的差别 - 最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
1 | git fetch origin master:tmp |
git pull:相当于是从远程获取最新版本并merge
到本地
1 | git pull origin master |
上述命令其实相当于git fetch
和 git merge
在实际使用中,git fetch
更安全一些,因为在merge
前,我们可以查看更新情况,然后再决定是否合并。
推送至远程仓库
git push
命令用于将本地分支的更新,然后推送到远程主机。
1 | git push origin master |
将本地的master
分支推送到origin
主机的master
分支。如果master
不存在,则会被新建。
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
将本地所有分支推送到远端
不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all
选项。
1 | git push --all origin |
远程仓库的重命名
1 | git remote rename <old_name> <new_name> |
远程仓库的移除
1 | git remote rm <name> |
欢迎关注我的公众号:zx94_11