为了能进行项目协作,所以我们需要将仓库托管在一个公共的地方。远程仓库是指托管在因特网或其他网络中的你的项目的版本库。
一般从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.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
拿到项目的地址
项目地址
使用以下语句把代码克隆至本地
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的服务器信息也加入到远程仓库
git remote add gitlab_origin http://123.56.13.233:9000/z05035/Git_study.git
然后再用git remote -v
查看一下,可以看到新增了一个简写是gitlab_origin
的远程信息
远程仓库信息
这里有两个概念:抓取
,拉取
从远程仓库获取数据,也就是抓取
git fetch [remote-name]
git fetch
命令会将数据拉取到你的本地仓库,它并不会自动合并或修改你当前的工作。
从远程仓库获取某分支的内容并合并到当前分支,也就是拉取
git pull [options] [<repository> [<refspec>…]]
git pull <远程主机名> <远程分支名>:<本地分支名>
运行 git pull
通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
git pull origin master:master
把服务器上的master分支拉取到本地的master分支上
其实git pull
的本质是
git fetch origin
git merge origin/master
Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在
git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master
分支自动”追踪”origin/master
分支。
也可以手动建立追踪关系
git branch --set-upstream master origin/next
所以如果是有追踪关系的分支更新,直接使用git pull
就好了
git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含义:
origin
的master
主分支下载最新的版本到origin/master
分支上master
分支和origin/master
分支的差别上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp
git diff tmp
git merge tmp
git pull:相当于是从远程获取最新版本并merge
到本地
git pull origin master
上述命令其实相当于git fetch
和 git merge
在实际使用中,git fetch
更安全一些,因为在merge
前,我们可以查看更新情况,然后再决定是否合并。
git push
命令用于将本地分支的更新,然后推送到远程主机。
git push origin master
将本地的master
分支推送到origin
主机的master
分支。如果master
不存在,则会被新建。
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all
选项。
git push --all origin
git remote rename <old_name> <new_name>
git remote rename gitlab_origin gitlab
git remote -v
image-20190331144922832
git remote rm <name>
git remote rm gitlab