Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。怎么分布呢?
好在这个世界上有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,目的(为了确保数据传输的可靠性,因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的),如果你不配置相关命令,则每次本地仓库和远程仓库提交时,都需要验证密码,为了方便,所以,需要一点设置:
git设置免密码登录,生成ssh秘钥命令
创建SSH Key
ssh-keygen -t rsa -C “<email>”
步骤1:命令输入完成后,一直回车。会在本地生成一个.ssh文件,打开该文件会看到默认保存位置当前 ~/.ssh/id_rsa(私密) 和id_rsa.pub(公密),将生成的公密用记事本打开,并复制。
步骤2:把id_rsa.pub里的复制内容添加到github的ssh keys里,一定不能有空格在密钥里面。
如下图:
“Add Key”,你就应该看到已经添加的Key:
点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
测试连通性
在git Bash 中输入以下代码
$ 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 。
可以参考网站:
解决每次push代码到github都需要输入用户名和密码的方法
注意事项:在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 + 分支地址 //origin是远程库的名字,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
(2).第一次推送master分支的所有内容到远程仓库
$ git push -u origin master //第一次提交需要这么做,第二次提交就可以直接用`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 <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
本人小白程序员,初来乍到,请多关照
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。