1. GIT常规流程
2. 团队协作
1.1 基础开发流程
- 首先创建中央仓库:可以基于 gitHub / codding 来创建。
http://github.com
把开发者都列入仓库的开发群组中,这样每一个开发者用自己的gitHub账号,都有权限操作这个仓库了(当然不这样做也可以,所有开发者用统一的一个账号也可以,为了防止不知道是谁提交的,我们需要让每一个客户端在本地的GIT全局配置中,设置和gitHub相同的用户名和邮箱 $ git config --global user.name ‘xxx’ …)
如何给他人开权限:
Settings
->Collaborators
->搜索他人的信息
->点击右边的add即可
。
然后等待对方接收邀请。
- 创建客户端本地仓库(一个开发者就是一个单独仓库),还需要让本地的仓库和远程仓库保持关联,这样才可以实现后续的信息同步。
1)
mkdir TESK
创建一个文件夹作为本地仓库;
2)cd TESK
进入这个本地仓库;
3)git init
创建本地仓库;
4)git remote add origin 远程git地址
将本地仓库与远程仓库关联到一起;(origin是连接的名称,一般都用这个名字,当然自己可以随便设置)
5)git remote -v
查看连接情况;
6)git remote rm origin
断开连接,再使用 git remote -v 发现什么都没有;
7)git remote update origin
更新连接通道;
注意:上面的步骤可以简化:
有更简单的方式:只要把远程仓库克隆到本地,就相当于创建本地仓库,而且自动建立了链接,并且把远程仓库中的内容也同步到了本地。
$ git clone “远程仓库地址” “本地仓库文件夹名字(不写默认是仓库名字)”
进入克隆下来的目录中,执行 git remote -v 便可发现 本地与远程仓库已经连接好了。
- 提交历史版本
例如TESTA
项目 新增了文件1.js
(前提是TESTA是clone下来的),我们就需要将它提交生成一个历史版本:
cd TESTA
git add .
git commit -m '创建1.js'
git log
可以查看历史版本信息。
若另一个人开发者,clone了代码,给了一个他自己的版本。
cd TESTB
git add .
git commit -m "我是开发者二,创建了2.js
- 各自和中央服务器同步信息
每一个分支的产生是通过 提交一个历史版本后产生的,开始的时候肯定什么都没有。
我们在建立一个中央仓库后最好让它自带有mater
分支(里面有文件),不要是个空仓库(因为空仓库没有任何分支),这样每个提交者都可以共同操作一个mater。
推送:
git push origin master
( 每次PUSH之前最好都PULL一下:如果有冲突在本地处理一下冲突,然后再推送 );
拉取:git pull origin master
注意:在每个成员各自操作各自的文件,而不是去改共同的文件,即不存在代码冲突的时候,我们都是基于上面来处理的。
首次提交出现问题,可先强制提交:
git push -u origin master -f
1.2 多分支管理
目前一个团队对于项目一般有两种管理模式:无分支管理模式 和 单独分支管理模式。
1.2.1 无分支管理模式
所有人都使用 master
分支,管理代码。
关于基本操作都相同,但我们可能需要处理冲突合并问题。
冲突合并:
- 文件有冲突,但不是同一个文件的同一行代码,我们只需将pull下来的代码中它会全部留下来,你需要手动选择你要留的代码,删除掉多余的“描述”,然后push即可。
- 同一个文件,像同行代码冲突,在 pull 之后会提示你,你只需 ESC :wq Enter 即可,然后提交。
其实在大多数情况下,项目用一个主分支就完全足够了。
1.2.2 单独分支管理模式
- add提交到暂存区,commit提交到历史区
- 分支指的是历史区的峰分支:创建分支就是创建不同的线路,来管理历史版本。例如:我们向
dev 分支
提交了一个 历史版本,我们可以将这个版本先提交的master 主分支
上,然会再提交到远程仓库上。- 相当于 将开发的版本 暂存到某一分支上,先不提交到 master 分支上,防止多人大规模开发使 master 过乱,等到我的版本确定后,再提交到 master 分支中,这样就不会乱了。
- 其实总的来看,这和只有一个 master分支 没啥区别,只不过管控起来逻辑更加清晰了。
git branch
查看当前存在的分支;
*master 代表当前在哪个分支上git branch dev
创建一个叫 dev 的分支(特点:创建分支完成,会把本地的 master 分支中的历史内容同步到 dev 分支上,只有新创建的分支才会这样);git checkout dev
切换到 dev 分支上;git checkout -b dev
创建并且切换到这个分支(上面两个命令的和);git add .
和git commit -m 'newBranch'
提交到当前分支;git stash
先暂存本地文件(合并到 master 分支上的第一步,然后先切到 master 分支上,再合并);git checkout master
切换回master上再进行提交;git stash pop
还原暂时存储的内容;git merge dev
当前在 master 分支上,我们将 dev 与 master 两个分支进行合并(把谁合并到我在的分支上);git pull origin master
要推到远程地址上,先拉下来;git push origin master
:提交到远程仓库中(远程的仓库中并没有同步到当前的分支 dev);git branch -D xxx
删除分支;