github学习

  

git分支概念。首先,如果没有分支,我们会遇到什么问题呢? 即如果没有分支,我们在这一周本地完成了一个功能的50%,还有50%没有完成,但我们为了可以保存好代码,防止丢掉,就会把代码git push到远程的master分支上,这样,就不会丢了,如果我们的电脑丢了,就只需要git clone下来。 但是这样的问题是: 你只完成了50%,那么很有可能会造成他人的影响,因为他们在提交代码时,都会先pull一下,就把你这50%pull到自己这里来了,从而影响了自己的代码。那么该怎么办呢? 对,这时就要用到分支了,在远程创建了分支之后,我们就可以把代码先传到这个分支上面,不传到master上,这样别人pull也不会pull到这50%的代码,然后呢,等你完成了所有的代码之后,再把这些代码合并到master上,这样就没有影响了。

另外,需要注意的是,本地和远程都有一个master,都是最为重要的,但本地的分支和远程的分支并不是一一匹配的,比如远程可以有5到6个分支,因为假如是一个6人小组在合作,那么就会有6个分支,每个人可以临时提交代码到各自的分支,而不是主要分支,而每个人的本地呢,就只有自己的一个分支。所以,本地和远程的分支并不是一一匹配的。 

但是虽然分支的个人可以不一样,但是,我们本地新建的分支和远程建立的分支名称一般是一样的,当然也可以是本地就用一个master来开发,而在远程用一个分支,都是可以的,所以,我们在团队合作的时候,大多都是在自己的本地建立一个分支,然后远程对应也有和自己本地同名的一个分支,每次我们本地dev分支开发了一部分,我们就可以提交到远程的dev,然后等到开发完了,就可以由两种方法:

  • 第一种方法:本地将dev分支合并到master分支上,然后本地master分支到远程master分支上。
  • 第二种方法:本地将dev分支也正常到远程的dev分支,开发完了之后,在远程上pull request,即请求合并,这样就可以由远程master决定是否要合并你这个完成了的分支。

  

   另外,在本地git merge dev的过程中,我们推出的方式是输入 :quit ,否则无法推出从而无法完成合并任务。 

        我们每次在git提交的过程中,都要使用用户名和密码,这是因为我们先建立了远程文件, 然后使用https的方式clone的,为了保证安全,必须每次输入用户名和密码,而如果我们作为本地开发,就需要选择ssh的方式来使用链接,这样,就不需要每次都输入用户名和密码了。  

   

  我们创建了本地分支之后,还可以直接通过git创建远程分支,比如 git checkout -b test 创建了test分支,然后 git push origin test: test,就可以把本地test分支推送到远程test分支上。

  注意:其中 git push origin test:test意思是,git 就是命令,push 是推送,origin可以理解为源代码,test是本地的test分支,冒号右边的test是远程的test分支,如果远程没有这个分支就会创建,如果我们省略冒号和右边的test,那么Push到远程的test也会默认的,比如git push origin master实际上就是git push origin master:master,即把源代码origin从本地的master分支Push到远程的master分支上,显然我们还可以git push origin dev:master,但是这样并不是很好,而是有一个一一对应的最好。 

  注意,上面我们说的是git push origin master:master中的两个master的区别,但是如果是git pull的话,前面的就是远程的分支,而后面的就是本地的分支了,这两个分支的名称不一定要求一样。

        和svn类似,github是版本管理系统,但它是世界上最先进的分布式管理系统。它可以大大提高我们的工作效率。jQuery、bootstrap、react等都托管在github上,所以掌握github是必须的!!!

  git是如何诞生的呢?Linus在1993年开源之后,不断庞大,但后来不满足与其他的管理系统,于是Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

  SVN是集中式管理系统,git是分布式管理系统,但是两者有什么区别呢?

  之前我使用的就是SVN,它是将版本库集中放置在中央服务器上,而干活的时候,就update下来,一天工作结束,最后一定要commit 。

  

  它最大的缺点是:必须联网才能完成上述操作。网速快了还好,网速慢的话,提交一个5M的文件可能就要好久去等待。

  而分布式版本控制系统是没有中央服务器的,每个人的电脑上都有一个完整的版本库,既然完整的版本库在自己电脑上,当然就不需要联网了,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

  git的优势不只是不用联网,更厉害的是强大的分支管理

  

  git可以安装在Linus、Mac OS x和 windows上,下面只介绍windows。

  

  去官网下载https://git-for-windows.github.io/,然后在开始菜单找到Git --Git Bash,然后弹出黑色命令框,说明安装成功, 如下所示:

  

  

  安装完成后,还需要最后设置如下(在gitbash中):

$ git config --global user.name "Your Name"
$ git config --global user.email "Your email"

  因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

  接下来就是创建版本库了,版本库又名仓库,英文名repository,可以理解为一个目录, 这个目录里的所有文件都会被Git管理起来, 每个文件的修改、删除都会被Git跟踪,以便以后找寻历史,甚至还原。

  重要:在windows下操作gitBash使用的是Linux命令。

http://blog.csdn.net/caz28/article/details/43450951

http://blog.sina.com.cn/s/blog_4d9c3fec0102w7g9.html

  首先,先找一个地方,创建一个空目录(这里我是用的是管理员cmd):

md learnt_git

  然后通过 cd learn_git进入。  

  再使用git init将之变成Git可以管理的仓库:git init。这样就可以创建一个本地仓库了,通过这个本地仓库,你就可以互作非为了。

  pull是指拉取(pull有拉的意思),fetch是指获取。两者的区别在于pull是fetch+merge。 也就是说,拉取会把你本地仓库中没有,而远程中仓库中有的更新写在你的本地中,而获取的用户就是来查看对于你本地仓库的状态来说远程仓库是否有更新,仅此而已,并不会使你的本地仓库发生改变。

  通过了解pull的概念就知道了为什么我们总是听说要 先pull,然后再 push,因为只有pull之后,我们才能解决可能会有的冲突,这样才能push。 也就是说,pull有时候可能是没有必要的。

  git中的clone 和 fork 又有什么区别呢?

  chone就是克隆一份到你的本地,而fork它会从别的远程仓库中克隆到你的远程仓库,所以,如果希望本地得到,就一定要克隆。当然这样的说法也是有问题的,因为,如果从你的远程仓库克隆下来,那么克隆在本地的仓库就会自动与远程仓库建立联系,但是如果直接从别人的仓库克隆,那么我们就不能对其做出更多的更改,甚至连git版本都无法管理。

  而对于比如我现在所在的团队中又有所不同,团队中的仓库就相当于自己的仓库,所以我们就可以直接克隆,并且对其进行相应的操作以达到合作的目的。

  在gitbash中,我们可以通过shift和ins组合键来粘贴到gitbash,通过ctrl和ins的方式复制gitbash中的内容。

  

  分支的概念要理解,一般最终文件在master分支,而经常变动的是紧挨着master的dev分支, 我们一般为了开发一个新的feature(功能)都是在dev的基础创建一个新的分支,然后再这个新分支上操作,一般而言,新分支必须在改动后时要commit,否则是不能删除或切换分支的,而也可以强行删除,那么就会丢失掉修改,强行删除使用命令git branch -D feature-vulcan ,这样就成功删除了。

  

  多人协作(这才是git教程中的重点) 总结

  

  当我们直接使用http协议获取到路径(这个路径无论是master还是dev都是同样的一个路径)后,将其git clone,然后,这时默认情况下,我们得到的是只有master分支的,所以,我们需要再在远程dev下检出一个新分支,然后再新分支上进行操作。

  sourcetree使用起来更为方便,先点击克隆,然后再在远程检出新分支即可。

  

  

  

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000

原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6235475.html