git是一个分布式版本控制系统,本地git仓库和远程仓库之间的传输支持ssh、https等协议。使用https协议缺点:速度慢,每次推送都必须输入⼝令。若使用 ssh 协议,需要在你的github账户添加你的本机上的ssh公钥,之后才可以通过本机推送内容到你的github。
从零开始实现本地仓库与远程顺畅推拉的步骤:
- 安装git,不同系统安装方法不同。详见https://git-scm.com/downloads。
-
配置用户名和密码
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com
可以根据情况使用不同的参数配置详见git -- config 。不配置用户名和密码,提交时默认使用本机username和hostname。git配置的邮箱与github一致时,显示github用户名和头像。github的contributions统计是按邮箱统计的。
-
建立本地计算机与远程github或者gitlab仓库之间的连接
创建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com" //参数-C: comment,提供一个新注释,这里的邮箱并木有实际意义
github账户添加SSH Key
把用户主目录下,.ssh文件夹中 id_rsa.pub 内容复制到github中,setting/SSH and GPG keys/new SSH key
-
github或者gitlab上create一个远程库。可以得到一个远程库的地址 :
git@github.com:(github用户名)/(creage的时候起的仓库名).git。
-
然后,本地仓库与远程仓库之间的首次互动,有几种做法:
第一种:
$ git clone git@github.com:name/xxx.git 如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在命令末尾指定新的名字: $ git clone git://github.com/schacon/grit.git mygrit
此之后,我们就可以顺利地使用git pull 和git push了。
github上删除远程仓库后,报错:Please make sure you have the correct access rights and the repository exists.第二种:不使用clone命令,而是先把本地的仓库推送上去。
首先,
//初始化本地文件夹为git仓库,文件夹名字和远程的不一定一致 $ git init //添加origin为远程git@github.com:name/xxx.git仓库的别名,体现在.git/config中 $ git remote add origin git@github.com:name/xxx.git
然后,几种方法任选其一:
1.$ git push --set-upstream origin master 2.$ git push -u origin master 3.$ git push [remote-name] [branch-name] 把本地分支推送到远程对应分支
1、2可以顺利地使用git pull 和git push了,体现在.git/config中。经各种验证, 1、2这两个命令作用一致。推送内容并且,Branch 'master' set up to track remote branch 'master' from 'origin'。有些地方讲,如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push。实验一个分支追踪多个主机没有成功。3只推送内容,而不与远程分支建立关联关系。
-
拓展内容
clone命令会做什么:
会下载仓库文件夹(包含外层夹),到当前目录,提示你克隆了一个空仓库,包含.git 文件。
会在.git/config中自动添加origin为远程仓库的别名,以便将来引用。
会自动创建了本地的 master 分支并关联远程仓库中的 master 分支,体现在.git/config中。SSH警告
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。然后,Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的known_hosts信任列表里了。这个警告只会出现一次,后面的操作就不会有任何警告了。如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。
git pull <远程主机> <远程分支>:<本地分支>
git push <远程主机> <本地分支>:<远程分支> <src>:<dst>
git push origin 推送当前分支到远程对应分支,如当前分支只有一个追踪分支,主机名可以省略(实验为一个本地分支添加多个追踪分支,没有成功)远程仓库的相关操作
手动添加一个新的远程仓库,并指定一个别名:
$ git remote add [shortname] [url]:
查看远程库的信息
$ git remote 列出远程库的别名 $ git remote –v (译注:此为 --verbose 的简写)列出远程库的别名以及fetch 和 push 的url地址 $ git remote show origin 查看某个远程仓库的详细信息,比如要看所克隆的 origin 仓库 查看.git/config可以看到origin的含义
远程仓库重命名, 在新版 Git 中修改某个远程仓库在本地的简称:
$ git remote rename old new
远程仓库的删除
碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm 命令,删除origin这个远端的仓库在本地的映射(移除了config中,logs/refs/remotes, 以及 refs/remotes中相关,不会对远程仓库产生作用。)$ git remote rm origin
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。