Git 教程(一)
由于在学校没参与过实际的项目开发,那时候写代码也就自己一个人玩玩,知道版本控制管理git这个工具,但是一直没怎么用,结果来实习的时候提交代码各种悲剧,冲突挺多,下定决心要好好学习git。如果你经验够丰富了就不用看本教程了,我是写给和我类似的人看的,做一个务实的程序员,灵活地使用git与团队共同工作。
Git原理:
Git是一款分布式版本控制管理工具,与svn等集中式版本管理的主要区别在于,git 每个机器都有一个版本库,目录.git就是你的版本库,使用git提交代码无须联网,因为提交代码的时候是向本地版本库提交,自然无须使用网络。当然后面还有分支,远程库这些概念,暂且不说。
用git的程序员平时是怎么工作的呢,上一张图:
平时我们就在工作目录里工作,注意,不是在版本库里。我们修改代码、编辑代码都在工作目录里。
当我们改好了一个问题,就得像本地版本库提交代码。
提交一个文件Test.java 使用命令:git add Test.java 和 git commit -m “提 价信息” Test.java
提交全部修改 使用 git commit -a ,然后编辑提交信息,退出即可。
其实这儿还有暂存区的概念,就是用git add 命令的时候是把文件提交到了一个缓冲区,这样方便我们一次性提交到版本库。
这儿不得不说一下分支Branch:
使用git commit -m 提交代码的时候,默认是提交到你版本库的一个分支master上。
每个分支Branch你可以认为对应着一个工作目录,如果你有两个分支:
master
test
当使用git checkout 分支名时,你会发现不同的分支工作目录里的内容并不相同。
知道这些了,那我们来看看在实际的工作中是怎么用的吧。
假如公司有一个项目ProjectA,作为新人,第一天来,要将公司的代码复制一份到自己的电脑上。
步骤:
① 安装git (网上自己找)
② 配置git ,将自己的公钥添加到GitHub的公钥上(网上挺多,自己找)
③ clone项目
我主要讲解git命令的操作
在电脑上新建一个文件夹,假如你公司叫MM吧
mkdir MM
git clone ProjectA的在gitHub上的地址
ProjectA克隆下来后,你修改了代码,提交到本地版本库之后,再想提交到公司的项目中。
使用git branch 查看你本地的所有分支:
查看本地分支和远程分支的对应关系,git branch -vv
test分支就是我当前的分支
一般不要在master分支上做修改,也不要提交master分支的代码,因为git push的时候如果没有设置上游分支会根据本地分支名称匹配远程已存在的分支名。就是说提交本地master自动push到了远程master,这样不好,公司的master应该是稳定的,对外发布的,如果你代码有错误,不好处理。
下面就来说说git push的一些细节:
如果你使用的是1.7之后的git,有两种push模式。
① matching 如果直接使用git push会根据当前分支名匹配远程已存在同名分支
② simple 比较保守,没有设置上游分支push代码会失败
建议修改git push 的push.default参数为simple
设置一个上游分支,远程已存在的
这样以后直接使用git push就是提交到 test1 分支去了
或者
git branch --set-upstream-to =远程分支名
就自动把本地所处的分支对应到了远程分支
下面介绍一个超实用的功能。
假如我们只想在本地建立一个与远程对应的分支,就是先有远程分支然后依据它创建一个本地分支,这样两个自动呼应,这样多爽!
步骤:
① 建立一个空文件夹,使用git init 初始化版本库
② 添加远程名 origin。
git remote add origin 工程地址
③ 使用git remote show origin 查看远程工程的所有分支,可以看见右边是new
④ 通知git更新远程分支 git remote update,再次使用git remote show origin可以看见被tracked了
⑤ 使用git fetch
⑥ 在本地创建一个分支和远程的一模一样 git checkout -b 本地分支名 origin/远程分支名,并自动切换到本地分支了。
⑦ 这时候使用git branch查看分支,发现只有一个分支,并且没有master分支,这样以后提交代码都是到远程的那个分支,不用提交到master分支上了。