为了便于管理,Git 要求每个远程仓库必须指定一个别名。remote 命令就用于管理仓库别名的命令。
-
远程仓库指的是托管在网络上的项目仓库。
-
通过 clone 命令克隆下来的仓库,默认的别名是 origin。
-
主要涉及的操作有:增(add)、删(remove)、改(rename,set-url)、查(show , get-url)。
常用命令
命令 | 解释 | 选项 |
---|---|---|
git remote add <name> <url> | 添加新的远程库 | |
git remote remove <name> | 删除指定的仓库 | |
git remote rename <old> <new> | 将仓库别名重命名为 new | |
git remote set-url <name> <newurl> | 将仓库的 url 修改为 newurl | |
git remote | 列出所有的远程库 | -v 表示查看每个库的 url |
git remote show <name> | 查看指定库的详细信息 | |
git remote get-url <name> | 获得指定仓库的 url |
在操作时,将别名与 url 的关系理解为 Map 集合 —— 其中别名是 key,url 是 value。
添加
git remote add <name> <url>:添加一个远程库,同时为该远程库指定别名,使用别名指代远程库地址。
git remote add images https://github.com/birdandcliff/images.git
以后可以使用 images 代替对应的url。
使用该命令可以将本地已有的文件与远程仓库关联,从而可以将本地已有的文件提交到远程仓库中。
删除
使用 git remote remove <name> 移除别名对应的仓库。
$ git remote
demo
newo
$ git remote remove newo
$ git remote
demo
修改
修改别名
使用 git remote rename <old> <name> 修改某个远程库的别名。
对远程库重命名后,对应的分支也会发生变化,将其中关于别名部分换成新别名。
$ git remote -v
demo https://github.com/birdandcliff/seturl.git (fetch)
demo https://github.com/birdandcliff/seturl.git (push)
$ git remote -v
demo https://github.com/birdandcliff/seturl.git (fetch)
demo https://github.com/birdandcliff/seturl.git (push)
$ git remote rename demo demo2
$ git remote -v
demo2 https://github.com/birdandcliff/seturl.git (fetch)
demo2 https://github.com/birdandcliff/seturl.git (push)
可以看出, url 没有发生变化,但对应的别名已经修改过了。
修改 url
使用 git remote set-url <name> <newurl> 将指定的远程仓库地址修改为 newurl。
$ git remote -v
demo https://github.com/birdandcliff/gitdemo.git (fetch)
demo https://github.com/birdandcliff/gitdemo.git (push)
$ git remote set-url demo https://github.com/birdandcliff/seturl.git
$ git remote -v
demo https://github.com/birdandcliff/seturl.git (fetch)
demo https://github.com/birdandcliff/seturl.git (push)
修改仓库地址后,可以将本地文件提交提交到新的 url 中。
查看
可以查看所有的别名,也可以查看所有的别名与 url,还能通过别名查看指定的 url。
-
git remote 会列出每一个远程库的别名。可以使用 -v (verbose,详细)选项指定列出详细信息。如下:
-
git remote show <name> 可查看某个远程库的详细信息
-
git remote get-url <name> 根据 name 查看指定的 url
$ git remote
newo
$ git remote -v
newo https://github.com/birdandcliff/seturl.git (fetch)
newo https://github.com/birdandcliff/seturl.git (push)
$ git remote get-url newo
https://github.com/birdandcliff/seturl.git
$ git remote show newo
* remote newo
Fetch URL: https://github.com/birdandcliff/seturl.git
Push URL: https://github.com/birdandcliff/seturl.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
remote 的配置信息
使用 git remote add <别名> url
后,会在 .git/config 文件中添加如下信息:
[remote "demo"]
url = https://github.com/birdandcliff/gitdemo.git
fetch = +refs/heads/*:refs/remotes/demo/*
fetch 的格式由一个可选的 + 号和紧随其后的 <src>:<dst> 组成。其中 <src> 代表远程仓库中的引用;<dst> 是那些远程引用在本地所对应的位置。 + 号告诉 Git 即使在不能快进的情况下也要(强制)更新引用。
因此,Git 会获取 refs/heads/ 下面的所有引用,并将它写入到本地的 refs/remotes/demo/ 中。
-
可以对 fetch 进行手动修改。如将 fetch 行修改如下:
fetch = +refs/heads/master:refs/remotes/demo/master
那么使用
git fetch
时,就只会拉取远程仓库的 master。 -
分支信息并不一定要存储在 demo 目录下。可以在该目录下任意指定子目录。如:
[remote "demo"] url = https://github.com/birdandcliff/gitdemo.git fetch = +refs/heads/re:refs/remotes/demo/devlocal fetch = +refs/heads/tra:refs/remotes/demo/xx/tra
远程的 tra 分支存储的路径就在 demo/xx 目录下,而不是直接位于 demo 目录下。
引用 tra 远程分支时,也需要写成
demo/xx/tra
,不能直接写成demo/tra
形式。如:$git branch -u demo/xx/tra Branch dev set up to track remote branch tra from demo.
网友评论