Git学习 <day4>

来源:互联网 发布:注册淘宝也是支付宝 编辑:程序博客网 时间:2024/06/15 07:22

连接Github远程仓库

生成密钥

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

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

.ssh pwd/Users/zhoupengxiao/.ssh.ssh lsid_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 masterThe 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)? yesWarning: 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 -> masterBranch 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 remotelearningorigin

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

git push

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

➜  mygit git:(master) git statusOn branch masterYour 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.gitCloning 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 0Receiving objects: 100% (6/6), done.Checking connectivity... done.
mygit git:(master)cd erperp git:(master) lsREADME.md            sarahzhou.properties

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

从远程仓库拉取

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

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

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

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

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

0 0