Git操作远程仓库
1、添加/连接远程仓库:要操作Git的远程仓库的前提,那就是要先添加或者说是连接远程仓库才行。
Git仓库之间的传输都是通过SSH加密的,所以在操作远程库之前,需要做一些准备,首先你需要注册一个 GitHub 或者 GitOSC,下面我用GitOSC来做演示了:
1、创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "baikeyang@vip.qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/lenovo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/lenovo/.ssh/id_rsa.
Your public key has been saved in /c/Users/lenovo/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2y8XeQcc8Yjp9cU/cjBeK4kogLtdqd4uWgIRaoTDZug baikeyang@vip.qq.com
The key's randomart image is:
+---[RSA 2048]----+
|+o .. |
|*+. . o.+ |
|=+ . . o+oo+|
|.E. . . . ..o.B.+|
| . . +S. ..* =o|
| . o o .o o = o|
| o + . . o . |
| +.. ... |
| ...oo o. |
+----[SHA256]-----+
我这里是一路回车的,由于这个Key是用于个人,所以也无需设置密码。
现在就可以根据上面的提示或者自己在用户的主目录中找到 id_rsa 和 id_rsa.pub 两个文件了。这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
2、登录GitOSC,进入个人中心,进入SSH公钥页面;
然后填写任意 公钥标题(Key),在公钥(value)文本框里粘贴id_rsa.pub文件的内容:
以上信息都填写完成后,点击确定。SSH 公钥添加成功。
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
通常我们已经在本地创建了一个Git仓库后,又想在GitOSC 创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitOSC 上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。
3、上面的操作做完了,我们就可以开始添加远程库了。在GitOSC上面新建一个版本库
OK,现在已经成功的创建了一个仓库。
在仓库创建完成,目前GitOSC 上的仓库是空的,GitOSC给出了一些提示,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitOSC 仓库。
现在,我们根据GitOSC 的提示,在本地的仓库下运行命令:
$ git remote add GitGo git@git.oschina.net:Mr.bai/GitGo.git
添加后,远程库的名字就是GitGo,这是Git默认的叫法,也可以改成别的,但是GitGo这个名字一看就知道是远程库。
接着就将本地的版本库 内容推送到远程的版本库中:
$ git push -u GitGo master
Counting objects: 16, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (16/16), 1.48 KiB | 0 bytes/s, done.
Total 16 (delta 3), reused 0 (delta 0)
To git@git.oschina.net:Mr.bai/GitGo.git
* [new branch] master -> master
Branch master set up to track remote branch master from GitGo.
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitOSC 页面中看到远程库的内容已经和本地一模一样:
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitOSC ,现在,你就拥有了真正的分布式版本库!
注:
SSH警告
当你第一次使用Git的clone
或者push
命令连接GitOSC 时,会得到一个警告:
The authenticity of host 'git.oschina.net (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitOSC服务器的Key时,需要你确认GitOSC 的Key的指纹信息是否真的来自GitOSC 的服务器,输入yes
回车即可。
Git会输出一个警告,告诉你已经把GitOSC 的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'git.oschina.net' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
从远程库克隆:
可以重新创建一个新的仓库 或者 找一个仓库,在创建的时候勾选ReadMe,GitOSC会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件
OK,仓库创建完成。
现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:
$ git clone git@git.oschina.net:Mr.bai/GitClone.git
Cloning into 'GitClone'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
操作总结:
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。