git远程仓库小记

Git是分布式版本控制系统,同一个Git仓库,能够分布到不一样的机器上。怎么分布呢?git

好在这个世界上有个叫GitHub的神奇的网站,从名字就能够看出,这个网站就是提供Git仓库托管服务的,因此,只要注册一个GitHub帐号,就能够免费得到Git远程仓库。程序员

因为你的本地Git仓库和GitHub仓库之间的传输是经过SSH加密的,目的(为了确保数据传输的可靠性,由于GitHub须要识别出你推送的提交确实是你推送的,而不是别人冒充的),若是你不配置相关命令,则每次本地仓库和远程仓库提交时,都须要验证密码,为了方便,因此,须要一点设置:github

git设置免密码登陆,生成ssh秘钥命令shell

建立SSH Key

ssh-keygen -t rsa -C “<email>”
复制代码

步骤1:命令输入完成后,一直回车。会在本地生成一个**.ssh**文件,打开该文件会看到默认保存位置当前 ~/.ssh/id_rsa(私密) 和id_rsa.pub(公密),将生成的公密用记事本打开,并复制。bash

步骤2:把id_rsa.pub里的复制内容添加到github的ssh keys里,必定不能有空格在密钥里面。 以下图:服务器

图片描述

“Add Key”,你就应该看到已经添加的Key:ssh

图片描述

点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容分布式

测试连通性

在git Bash 中输入如下代码ide

$ ssh -T git@github.com
复制代码

当你输入以上代码时,会有一段警告代码,如:测试

The authenticity of host 'github.com (192.30.255.112)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)? 复制代码

这是正常的,你输入 yes 回车既可。若是你建立 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:

Enter passphrase for key '/home/jeremy/.ssh/id_rsa':
复制代码

固然若是你密码输错了,会再要求你输入,直到对了为止。

密码正确后你会看到下面这段话,如:

Hi username! You've successfully authenticated, but GitHub does not provide shell access. 复制代码

若是用户名是正确的,你已经成功设置SSH密钥。若是你看到 “access denied” ,则表示拒绝访问,那么你就须要使用 https 去访问,而不是 SSH 。

能够参考网站:

git使用以及免密码登录

解决每次push代码到github都须要输入用户名和密码的方法

git-ssh 配置和使用

注意事项:在GitHub上免费托管的Git仓库,任何人均可以看到喔(但只有你本身才能改)。因此,不要把敏感信息放进去,形成信息泄露。若是你不想让别人看到Git库,有两个办法,一是:让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另外一个办法是本身动手,搭一个Git服务器,由于是你本身的Git服务器,因此别人也是看不见的。

#### 添加远程仓库(git remote) 如今的情景是,你已经在本地建立了一个Git仓库后,又想在GitHub建立一个Git仓库,而且让这两个仓库进行远程同步,这样,GitHub上的仓库既能够做为备份,又可让其余人经过该仓库来协做,真是一举多得。

首先,登录GitHub,而后,在右上角找到“New repository”按钮,建立一个新的仓库:

在Repository name填入studygit,其余保持默认设置,点击“Create repository”按钮,就成功地建立了一个新的Git仓库:

根据GitHub的提示,在本地的studygit仓库下运行命令

(1)将远程项目和本地项目进行关联

$ git remote add origin +&emsp;分支地址 //origin是远程库的名字,这是Git默认的叫法,也能够改为别的,可是origin这个名字一看就知道是远程库
复制代码

(2).第一次推送master分支的全部内容到远程仓库

$ git push -u origin master&emsp;&emsp;&emsp;//第一次提交须要这么作,第二次提交就能够直接用`git push origin master`或者 `git push `

复制代码

把本地库的内容推送到远程,用git push命令,其实是把当前分支master推送到远程。

因为远程库是空的,咱们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在之后的推送或者拉取时就能够简化命令。

推送成功后,能够马上在GitHub页面中看到远程库的内容已经和本地如出一辙

从远程库克隆(git clone)

使用 git clone 拷贝一个 Git 仓库到本地,让本身可以查看该项目,或者进行修改。

若是你须要与他人合做一个项目,或者想要复制一个项目,看看代码,你就能够克隆那个项目。 执行命令:

git clone [url]   //[url] 为你想要复制的项目
 
复制代码

克隆完成后,在当前目录下会生成一个新 目录,即会远程的目录名称。 **注意事项: 要克隆一个仓库,首先必须知道仓库的地址,而后使用git clone命令克隆。另外,Git支持多种协议,包括https,但经过ssh支持的原生git协议速度最快。

Git 分支管理

几乎全部的版本控制系统都以某种形式支持分支。 使用分支意味着你能够把你的工做从开发主线上分离开来,以避免影响开发主线。

有人把 Git 的分支模型称为必杀技特性,而正是由于它,将 Git 从版本控制系统家族里区分出来。

建立分支命令:

git branch 分支名称
复制代码

切换分支命令:

git checkout (branchname)
复制代码

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工做目录的内容, 因此多个分支不须要多个目录。

建立并切换分支

git checkout命令加上-b参数表示建立并切换

git checkout -b + 分支名称
至关于如下两条命令
git branch 分支名称
git checkout (branchname)
复制代码

列出分支基本命令:

git branch
复制代码

没有参数时,git branch 会列出你在本地的分支,默认是master。

$ git branch
* master //意思是:有一个叫作 master 的分支,而且该分支是当前分支
复制代码

若是须要查看每个分支的最后一次提交,能够运行 git branch -v 命令:

若是咱们要手动建立一个分支。执行 git branch (branchname) 便可。

$ git branch A  //A为分支名称
$ git branch
* master
  A
复制代码

如今咱们能够看到,有了一个新分支 A。

当你以此方式在上次提交更新以后建立了新分支,若是后来又有更新提交, 而后又切换到了 testing 分支,Git 将还原你的工做目录到你建立分支时候的样子。

使用分支将工做切分开来,从而让咱们可以在不一样开发环境中作事,并来回切换。

删除分支:

git breach -d 分支名称
复制代码

例如咱们要删除A分支:

$ git branch
* master
A
$ git branch -d A
Deleted branch A (was 85fc7e7).
$ git branch
* master
复制代码

分支合并:

一旦某分支有了独立内容,你终究会但愿将它合并回到你的主分支。 你可使用如下命令将任何分支合并到当前分支中去:

git merge
复制代码

切换回master分支后,把A分支的工做成果合并到master分支上:

$ git merge A
复制代码

合并完后就能够删除分支:

$ git branch -d  A 
复制代码

若是真的想要删除分支并丢掉那些工做,如同帮助信息里所指出的,可使用 -D 选项强制删除它。

Git鼓励大量使用分支:

查看分支:git branch

建立分支:git branch <name>

切换分支:git checkout <name>

建立+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>
强制删除分支:git branch -D <name>
复制代码

解决分支合并的冲突:

若是master分支和A分支各自都分别有新的提交,这种状况下,Git没法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,

Git用<<<<<<<,=======,>>>>>>>标记出不一样分支的内容 再提交:

$ git add gitnote.txt 
$ git commit -m "conflict fixed"
[master cf810e4] conflict fixed

复制代码

注意: 当Git没法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为咱们但愿的内容,再提交。

用git log --graph命令能够看到分支合并图。

多人协做:

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,而且,远程仓库的默认名称是origin。

要查看远程库的信息,用git remote

$ git remote
origin
复制代码

或者,用git remote -v显示更详细的信息:

$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)
复制代码

上面显示了能够抓取和推送的origin的地址。若是没有推送权限,就看不到push的地址。

推送分支:

推送分支,就是把该分支上的全部本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master
复制代码

若是要推送其余分支,好比dev,就改为:

$ git push origin dev
复制代码

建立远程origin的dev分支到本地,于:

$ git checkout -b dev origin/dev
复制代码

多人协做的工做模式一般是这样:

首先,能够试图用git push origin 推送本身的修改;

若是推送失败,则由于远程分支比你的本地更新,须要先用git pull试图合并;

若是合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

若是git pull提示no tracking information,则说明本地分支和远程分支的连接关系没有建立,用命令git branch --set-upstream-to origin/。

这就是多人协做的工做模式,一旦熟悉了,就很是简单。

本人小白程序员,初来乍到,请多关照!

相关文章
相关标签/搜索