Git 远程仓库

以下是如何使用 Git 远程仓库(remotes)备份仓库以及跨设备工作。我们会在本地建一个远程仓库来模拟云平台。

远程仓库管理

远程仓库其实就是一个 Git 仓库。我们先新建一个仓库:

$ git init --bare ~/remote-git-repo
Initialized empty Git repository in 用户目录/remote-git-repo/

选项 --bare 会创建出没有工作树的仓库。

进入到一个 Git 管理的目录里,添加一个名为 backup 远程仓库:

$ git remote add backup ~/remote-git-repo

你可以添加多个远程仓库。除此之外,你还可以:

注意,现在远程仓库的地址是一个本地目录;如果你的远程仓库在某个云平台上的话,这个地址应该根据平台设置。

git push

把现在的提交全部上传到这个远程仓库里:

$ git push backup master
Enumerating objects: ?, done.
Counting objects: 100% (?/?), done.
Delta compression using up to ? threads
Compressing objects: 100% (?/?), done.
Writing objects: 100% (?/?), ? KiB | ? MiB/s, done.
Total ? (delta ?), reused ? (delta ?), pack-reused ?
To 用户目录/remote-git-repo
 * [new branch]      master -> master

master 是上传到远程仓库的分支名,你现在可以不管它。

运行:

$ git log
commit b1ac9863b2bcdfcf29c8bf87cf24150808a47d1a (HEAD -> master, backup/master)
Author: 你的名字 <你的邮箱>
Date:   ??? ??? ?? ??:??:?? ???? +????

    提交 message

可以看到 backup/master 也就是远程仓库 backup 上的 master 分支已经更新到 HEAD 提交了。

git pull

如果说你有两台设备,在一台上做了提交,并且上传到了远程仓库,要怎么把这些提交下载到另一台上呢?

我们再新建一个仓库,假设它是第二台设备上的:

$ git init ~/device2
Initialized empty Git repository in 用户目录/device2/.git/
$ cd ~/device2
$ git remote add backup ~/remote-git-repo

然后运行:

$ git pull backup master
remote: Enumerating objects: ?, done.
remote: Counting objects: 100% (?/?), done.
remote: Compressing objects: 100% (?/?), done.
remote: Total ? (delta ?), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (?/?), ? KiB | ? MiB/s, done.
From 用户目录/remote-git-repo
 * [new branch]      master     -> backup/master

再运行:

$ git log
commit b1ac9863b2bcdfcf29c8bf87cf24150808a47d1a (HEAD -> master, backup/master)
Author: 你的名字 <你的邮箱>
Date:   ??? ??? ?? ??:??:?? ???? +????

    提交 message

现在 backup/master 已经同步到本地了。

git clone

如果你只是想把远程仓库上的东西原封不动地下载下来,你可以直接克隆:

$ git clone https://github.com/ChengYuShun/git-tutorial.git

使用 HTTPS 协议下载。这个仓库里放的是这个教程的源代码。

进入下载好的目录,运行:

$ git remote
origin
$ git remote get-url origin
https://github.com/ChengYuShun/git-tutorial.git

可见 Git 会为克隆下来的仓库默认创建一个远程仓库 origin,并且其地址就是你克隆的地址。