class="hljs-ln-code"> class="hljs-ln-line"> url = file:///remote_dir class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> fetch = +refs/heads/*:refs/remotes/origin/* class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
远程版本库remote origin。url地址为file:///remote_dir, 拉取时,本地分支与远程分支的关系,这里配置了前缀,例如master分支的对应关系为refs/heads/master对应refs/remotes/origin/master。
第三步,此时,本地可以拉取到远程的数据,但无法推送本地数据,执行git push --set-upstream origin master,
- git push,推送数据的指令。
- set-upstream,操作类型为与远程分支建立联系。
- origin master,远程版本库的名称,远程版本库的分支名称。本地分支是从上下文中获取得到的。
之后,便可以在local,origin之间进行数据同步。
远程到本地
远程数据拉取到本地的指令有三个,clone,fetch,pull。
3.1 clone
克隆版本库,指令的格式如下:
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">git clone [--template=<template_directory>]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> [--dissociate] [--separate-git-dir <git dir>]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> [--depth <depth>] [--[no-]single-branch] [--no-tags]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> [--[no-]remote-submodules] [--jobs <n>] [--sparse] [--] <repository>
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> [<directory>]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
-l,--local:表示远程版本库与当前版本库是在同一台电脑上,所以不会拷贝,而是使用硬链接。Windows系统没有硬链接的概念。
--no-hardlinks:不使用硬链接,会复制所有内容。
--mirror:创建远程版本库的镜像。它会克隆所有的内容,包括标签,远程ref, 标签,钩子,配置等。默认情况下,克隆只有文件,引用(分支和符号引用)。
-o, origin:指定远程版本库的名称,默认为origin
-b,branch:指定远程版本库的分支,默认为所有分支。
--[no-]single-branch:只克隆branch可达的提交历史。
--depth :浅克隆,只保留最近N个提交历史。
--shallow-since=:浅克隆,只保留date之后的提交历史。
--shallow-exclude=:浅克隆,只保留revision之后的提交历史。
--no-tags:不克隆标签。
--template, -s shared,--bare, --sparate-git-dir,不在重复介绍。
-q,-v是公共选项。
-n, no-checkout:克隆之后,不切换分支。
其他略
3.2 fetch
Download objects and refs from another repository.
从远程版本库中下载objects和refs
格式:
git fetch [<options>] [<repository> [<refspec>…]]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
options:clone命令中也会拉取远程版本库的数据,所以大部分的选项含义都是相同的。
repository表示远程版本库的名称.
refspec表示远程版本库的分支。不指定时,拉取所有
3.3 pull
fetch from and integrate with another repository or a local branch.
从远程版本库拉取内容,并且本地的远程追踪分支与当前分支整合。
merge,合并。
rebase,变基,需要配置remote.name.rebase=true,name为远程版本库的名称。
它本质是结合fetch命令和merge 或 rebase命令。它的所有选项都来源于这三个命令。
本地到远程
本地数据推送到远程的命令只有一个,push
4.1 push
Update remote refs along with associated objects.
把本地的更新推送到远程版本库中。
格式:
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">git push [--all | --mirror | --tags] [--follow-tags]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> [--atomic] [-n | --dry-run]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> [--receive-pack=<git-receive-pack>]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> [--repo=<repository>] [-f | --force] [-d | --delete]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> [--prune] [-v | --verbose]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> [-u | --set-upstream]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> [-o <string> | --push-option=<string>]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> [--[no-]signed|--signed=(true|false|if-asked)]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> [--force-with-lease[=<refname>[:<expect>]]]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> [--no-verify] [<repository> [<refspec>…]]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
--all,推送所有的分支,默认选项。
--tags,推送所有的标签,默认选项。
--repo=:指定远程版本库的名称。
-o, push-option:给远程版本库的post-receive和pre-receive钩子函数传递参数。
--[no]force-with-lease:默认情况下,本地提交不是远程提交的子提交时,会拒绝推送,例如本地为A,B,C,而远程为A,B,C,D,E。此时推送会失败。强制推送会导致后续的D,E提交被删除。会将远程的DRG更新为本地的DRG。不要在多人协作的版本库上添加此选项,会删除别人的提交。
-d delete,删除推送关系。即remote.name.pushUrl和push相关选项会被删除
-p prune,同步引用,删除本地存在,远程不存在的引用。
-u --set-upstream,在推送时,同时建立推送关系。默认值。
--[no-]signed:是否提供GPG签名。
--[no-]verify:推送过程中是否建立校验,本质是否启用pre-push钩子函数。
其他
5.1 ls-remote
查看远程版本库的相关信息
格式:
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line"> [-q | --quiet] [--exit-code] [--get-url] [--sort=<key>]
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> [--symref] [<repository> [<refs>…]]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
--heads显示本地版本库与远程版本库建立关系的分支HEAD,在refs/heads目录下可以打开查看。运行命令和手动打开文件是等价的。
--tags显示远程版本库的标签。
--refs显示commit对象的ID。
--symref显示commit对象的引用,通常都是HEAD
--get-url显示远程版本库的URL地址。
--exit-code:在远程版本库没有找到对应的分支时,返回2,找到时,返回0。
--sort-key:排序,它的值有两个version:refname, v:refname。
示例:
// 查看远程版本库的URL地址
git ls-remote --get-url
// 查看远程版本库的tag
git ls-remote --tags
// 查看本地版本库与远程版本库的分支映射关系
git ls-remote,或git remote -v show origin
5.2 remote
remote,本地版本库与远程版本库建立关系的命令,
远程版本库:新增,删除,修改,查看,重命名。
分支映射关系:建立,删除,同步分支信息。
版本库的url:新增,删除,修改,查看。
5.2.1 添加add
格式:
git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url>
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
name是远程标识,可以随意取,默认是origin,
url是远程版本库地址的URL。
t :只拉取远程版本库中对应分支的内容,不是所有的分支。它体现在配置项的fetch = +refs/heads/:refs/remotes/origin/,*会变为branch的名称
no-tags:不拉取远程版本库的标签。
tags:拉取远程版本库的标签。
f,全称为fetch,在建立关系之后,执行一次fetch(拉取)的步骤。
示例:
git remote add origin file:///remote_dir
5.2.2 查看
执行git remote -v,显示推送,拉取的远程版本库信息
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">origin file:///remote_dir (fetch)
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">origin file:///remote_dir (push)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
5.2.3 重命名
重命名远程版本库的名称,不是分支的名称,默认的名称为origin.
格式:
git remote rename <oldName> <newName>
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
oldName:旧名称
newName:新名称
示例:
git remote rename origin test
5.2.4 删除
删除远程版本库信息
格式:
git remote remove
选项:
name:版本库名称
示例:
git remote remove origin
5.2.5 分支映射
添加:set-head, set-branches
删除:set-head
同步:prune。
本地版本库origin/branch_name去追踪远程的branch_name分支。
格式:
git remote set-head <remote_name> (-a | --auto | -d | --delete | <branch>)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
a:auto的缩写,根据remote配置项去查找,自动建立这种映射关系。
d:delete缩写,删除追踪分支。删除之后无法执行push操作。
branch:分支名称。
set-head:默认建立当前分支的关系。
若要指定其他分支,使用set-branches命令。
格式:
git remote set-branches [--add] <name> <branch>
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
add:是追加的意思,执行之后会出现多个fetch变量。
name:是远程文件的标识,branch是分支的名称。
示例:
git remote set-branches [--add] origin master,打开本地版本库的config文件,会发现多了一行
fetch = +refs/heads/master:refs/remotes/origin/master
prune删除在远程版本库中不存在,在本地版本库中存在的分支。
格式:
git remote prune --dry-run <name>
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
选项:
dry-run:模拟运行
name:远程版本库的名称,当只有一个时,无需指定,默认为origin。
示例:
git remote prune –dry-run origin
5.2.6 url地址
url地址的新增,删除,修改,查看。选项与其他指令选项的含义完全相同。
新增:git remote set-url --add [--push]
查看:git remote get-url [--push] [--all]
修改:git remote set-url [--push] []
删除:git remote set-url --delete [--push]
data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/weixin_58869843/article/details/145438333","extend1":"pc","ab":"new"}">>
评论记录:
回复评论: