分布式版本控制系统 Git | 五
Git 基础 | 远程仓库
远程仓库是指托管在网络中的项目版本库。这里介绍的平台是 Gitee
,具体的链接:https://gitee.com/。可自行到网站注册账号。
本地 Git 仓库和 Gitee 仓库之间的传输是通过 SSH 加密的,所以需要先进行设置:
第一步:创建 SSH Key。在用户目录下,查看是否有 .ssh 目录。如果有,查看是否有 id_rsa
和 id_rsa.pub
两个文件。若有,可以跳过这个步骤,否则,打开 Shell,创建 SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
id_rsa
是私钥,不随意公开。id_rsa.pub
是公钥,可以公示。
第二步:登录 Gitee,打开 "Settings"
- "SSH keys"
页面:
在 Add key
下方,填写 Title,在 Key 文本框中,将 id_rsa.pub
的内容复制粘贴进去,点击 Submit
,在弹出的 Account security verification
窗口,输入当前账户的密码确认即可添加 Key。
查看远程仓库
假设查看已配置的远程仓库服务器,可以运行 git remote
命令,会列出服务器的简写。假设克隆自己的仓库,会看到 origin
--这时 Git 给克隆仓库服务器默认的名字:
$ git clone git@gitee.com:damengsanqianqiu/python_learn.git
Cloning into 'python_learn'...
remote: Enumerating objects: 391, done.
remote: Counting objects: 100% (391/391), done.
remote: Compressing objects: 100% (318/318), done.
Receiremote: Total 391 (delta 143), reused 0 (delta 0)
Receiving objects: 100% (391/391), 160.78 KiB | 357.00 KiB/s, done.
Resolving deltas: 100% (143/143), done.
$ cd python_learn
$ git remote
origin
这里也可以使用选项 -v
,显示需要读写远程仓库使用的 Git 保存的简写与对应的 URL。
$ git remote -v
origin git@gitee.com:damengsanqianqiu/python_learn.git (fetch)
origin git@gitee.com:damengsanqianqiu/python_learn.git (push)
若是远程仓库不止一个,这个命令会将它们全部列出。
添加远程仓库
登录 Gitee
,点击 +
后,选择 New Repository
创建仓库。
创建完成后,页面中会有相应的提示告知如何操作。
这里我在远程仓库创建的仓库名与本地的仓库名一致,Gitee 创建的这个仓库还是空的,现在将本地已有的仓库与之相关联,然后,后续的修改将提交到 Gitee。
根据页面的提示,在本地仓库运行命令:
$ cd about_git
$ git remote add ag git@gitee.com:damengsanqianqiu/about_git.git
$ git remote -v
ag git@gitee.com:damengsanqianqiu/about_git.git (fetch)
ag git@gitee.com:damengsanqianqiu/about_git.git (push)
git remote add <shortname> <url>
这个命令即使用来添加一个新的远程 Git
仓库,利用 <shortname>
指定简写,方便后续引用。
现在在命令行操作时,即可使用 ag
代替整个 URL。
假设远程仓库的内容已经被协同者修改更新。而本地的仓库版本与远程仓库的版本不一致。现在想拉取远程仓库中有,但本地没有的信息,可以使用 git fetch ag
:
$ git fetch ag
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (6/6), 631 bytes | 0 bytes/s, done.
From gitee.com:damengsanqianqiu/about_git
34cec72..ebbd604 master -> ag/master
现在远程的 master
分支可以在本地通过 ag/master
访问。
从远程仓库中抓取与拉取
上面使用的代码,就是从远程仓库中获得数据:
$ git fetch [remote-name]
这个命令会拉取本地中还没有的数据。执行完成后,会拥有远程仓库中所有分支的引用,可随时合并或查看。
前面也讲述了执行 git clone
命令的情况,会自动将其添加为远程仓库,并以默认的 origin
命名。所以,git fetch origin
会抓取克隆后新推送的所有工作。
但是 git fetch
命令抓取数据到本地,却并不会自动合并或修改当前的工作。这里必须手动合并。
假设本地有分支用以跟踪一个远程分支,可以使用 git pull
命令来自动的抓取然后合并分支到当前分支,这种是较为推荐的工作流程。
推送到远程仓库
当要分享项目时,这时必须推送到远程仓库。可以使用下面的命令:
$ git push ag master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 869 bytes | 869.00 KiB/s, done.
Total 7 (delta 3), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-3.8]
To gitee.com:damengsanqianqiu/about_git.git
ebbd604..24c7079 master -> master
git push [remote-name] [branch-name]
这个命令就是将本地的项目推送到远程仓库。
若是同时间克隆,并且在协同者已经推送到远程仓库后,使用这个命令的时候,会失败。这个时候,应该先将协同者们的工作拉取下来,并且合并到自己的工作中,最终才推送。这部分会在 Git 分支
中进行讲解。
查看某个远程仓库
如果想要查看远程仓库的详细信息,可以使用 git remote show [remote-name]
的命令,例如:
$ git remote show ag
* remote ag
Fetch URL: git@gitee.com:damengsanqianqiu/about_git.git
Push URL: git@gitee.com:damengsanqianqiu/about_git.git
HEAD branch: master
Remote branches:
dev tracked
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local refs configured for 'git push':
dev pushes to dev (up to date)
master pushes to master (up to date)
这个命令的输出结果会显示远程仓库的 URL 与跟踪分支的信息。上述的输出结果中,给出的信息显示当前处于 master 分支,如果运行 git pull,会将远程 master 分支合并到本地 master 分支上。
这些结果中也列出了,特定的分支上执行 git push
会自动推送到哪一个远程分支上。
远程仓库的重命名与移除
git remote rename <old> <new>
命令能够重新命名远程仓库的简写名。例如:
$ git remote
ag
origin
$ git remote rename ag aboutgit
$ git remote
aboutgit
origin
这里需要注意,这个操作重命名后,远程的所有跟踪分支和配置都会更新。官方文档也有给出相关提示:
Rename the remote named to . All remote-tracking branches and configuration settings for the remote are updated.
所以修改前引用 ag/master
的现在将引用 aboutgit/master
移除仓库的操作可以使用 git remote remove <name>
或者 git remote rm <name>
命令。例如:
$ git remote remove aboutgit
$ git remote
origin
这里 aboutgit
就已经被移除。这里的移除也是将所有跟踪分支和配置同步移除。
以上就是本篇的主要内容。
未完待续