Git学习 <day4>

连接Github远程仓库

生成密钥

➜  mygit git:(master) ssh-keygen -t rsa -C "your email"    

使用上面的命令为本地仓库创建ssh key,作为远程仓库识别本地仓库的依据,一路回车到结束,在用户目录下生成.ssh文件夹/Users/zhoupengxiao/.ssh

.ssh pwd
/Users/zhoupengxiao/.ssh.ssh ls
id_rsa     id_rsa.pub

其中,id_rsa是私钥,id_rsa.pub是公钥,我们使用公钥与Github建立连接。

将公钥添加到远程仓库

登陆已有的Github账号,进入setting页面,设置允许与其建立连接的ssh key

点击New SSH key,将公钥文件id_rsa.pub中的内容粘贴其中:

创建远程仓库并与本地仓库建立关联


git hub给了我们很多提示,将本地库与远程库建立连接,并将本地库的内容push到远程库:

➜  mygit git:(master) git remote add origin git@github.com:sarahzhouUestc/learning.git

➜  mygit git:(master) git push -u origin master
The authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
Counting objects: 47, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (33/33), done.
Writing objects: 100% (47/47), 45.66 KiB | 0 bytes/s, done.
Total 47 (delta 10), reused 0 (delta 0)
To git@github.com:sarahzhouUestc/learning.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

第一次push操作会提示我们是否将Github远程仓库的公钥加入到本地host,选择yes,双向验证后,就会将本地master分支与远程master分支建立关联。最后一句Branch master set up to track remote branch master from origin. 就是说本地master分支用来追踪远程master分支。
然后可以看到我们本地库中的helloworld.txt和.gitignore文件都已经push到git hub远程库了:

这样以后我们在本地库开发,完了再用git push origin master 将本地master推送到远程即可。

git remote

为本地仓库添加远程分支,格式为git remote add[name][url],其中url是远程仓库的地址,name是为该远程仓库起的别名,后面push的时候,可以直接使用这个别名。

➜  mygit git:(master) git remote add origin git@github.com:sarahzhouUestc/learning.git
➜  mygit git:(master) git remote add learning git@github.com:sarahzhouUestc/learning.git

上面我们为同一个远程仓库learning.git起了2个别名:learning和origin,当然这是为演示的需要,实际应用不常这么做。
git remote 列出已添加的所有远程分支:

mygit git:(master) git remote
learning
origin

可以看到,虽然真正指向的是同一个远程分支(因为url相同),但因为添加了两次,git remote 为我们列出了2个远程分支。

git push

$ git push <远程主机名> <本地分支名>:<远程分支名>
在这里,远程主机名是origin或者learning(因为起了2个别名),待push的本地分支名是master,对应的远程分支名也是master。
我在本地创建了2个测试文件testpush1.txt和testpush2.txt,并commit到了本地仓库:

➜  mygit git:(master) git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

状态信息显示本地master分支超前他关联的远程分支1个commit提交,可以使用push命令将本地提交同步到远程分支。

➜  mygit git:(master) git push learning master                                          
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 381 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@github.com:sarahzhouUestc/learning.git
   7e160f7..f23c534  master -> master

因为本地分支名和对应的远程分支名相同,都是master,因此这里可以省略,只写一个master即可。

从远程仓库克隆

我们在github远程仓库再创建一个全新的名为erp的repository,并在github上添加了2个文件:

现在使用git clone命令克隆出来一个本地仓库:

➜  mygit git:(master) git clone git@github.com:sarahzhouUestc/erp.git
Cloning into 'erp'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.
Checking connectivity... done.
mygit git:(master)cd erperp git:(master) ls
README.md            sarahzhou.properties

可以看到erp已经从远程仓库克隆到了本地仓库。我们在本地的修改就可以直接用git push推送到对应的远程分支了。

从远程仓库拉取

$ git pull <远程主机名> <远程分支名>:<本地分支名>
我在远程分支创建了env.properties文件:

➜  erp git:(master) git pull origin master:master
remote: Counting objects: 2, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), done.
From github.com:sarahzhouUestc/erp
   00d3a9c..139db1c  master     -> master
   00d3a9c..139db1c  master     -> origin/master
warning: fetch updated the current branch head.
fast-forwarding your working tree from
commit 00d3a9cdf0d52430452ebb5e5e07ebdb818e6af4.
Already up-to-date.

实际上在克隆的时候,git已经帮我们建立了追踪(tracking)关系,即本地分支master和远程仓库erp的master分支的对应关系,因此可以直接使用git pull ,省略参数。

➜  erp git:(master) ls
README.md            config.xml           env.properties       sarahzhou.properties

git pull 和 git fetch的区别,git fetct把远程的分支拉取到本地,不会做merge,而git pull包含git fetch和git merge。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值