Git与Github进行项目协作开发
- 通过Github创建远程仓库
- 使用git进行版本控制
Github建立远程仓库
选择公开,填写仓库名,仓库描述。
在1024中配置SSH,可以通过1024平台直接控制仓库。(参考1024中git操作提示)
设置远程仓库:git remote add origin git@github.com:username/repo.git。
小型团队协作项目,可以选择合作者模式。合作者模式与通常的开源项目合作过程不同,合作者拥有直接操作仓库的权限,类似管理员,不需要每次提交合并都需要仓库所有者操作。
通过用户名或者邮箱在仓库设置中添加合作者,合作者通过邮箱接受请求后即可。
本地开发
git clone直接将项目克隆到本地,通过创建开发分支进行开发,测试完成后进行分支合并,并推送到远程仓库,需要进行app连接测试,可以在1024平台同步代码并运行,得到外部的服务链接进行测试。
分支管理相关命令:
git branch 分支创建分支git checkout 分支切换分支git checkout -b 分支创建并切换分支git checkout mastergit merge 分支切换到主分支并进行合并git branch -a查看所有分支,包括远程,当前分支有*标记git branch -d 分支合并过后不要的分支删除
合并后可能产生冲突,出现类似以下的信息:
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
此时合并已经产生,但是没有创建一个新的合并提交,使用git status查看未合并unmerged状态的文件。这些文件中加入了冲突标记:
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
通过=====的分隔符,上面是主分支的,下面是合并分支的,处理冲突之后使用git add暂存,表示冲突已经解决,再使用git commit提交合并。
远程分支
考虑到合作开发的场景,需要在远程仓库同步主分支和开发分支。
在Clone项目时,自动建立了本地分支和远程分支的同步关系。
在本地设置分支远程没有的分支时,第一次推送是需要设置分支绑定关系:git push -u origin dev,将推送dev分支到远程的dev分支,如果没有则创建出来并设置对应关系。有了对应关系之后,在本地的该分支操作pull或者push时就可以直接操作。
远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时 “master” 是当你运行
git init时默认的起始分支名字,原因仅仅是它的广泛使用, “origin” 是当你运行git clone时默认的远程仓库名字。 如果你运行git clone -o booyah,那么你默认的远程分支名字将会是booyah/master。
当然在Github上也可以直接创建出分支。当远程存在分支只是本地尚未和远程关联,使用命令git branch -u origin/dev就可以绑定分支。
合作流程
- 新建分支时,先pull最新的代码,再创建分支,以此为基础进行开发。
- commit时,先add到暂存区;如果是多人开发的分支,在commit之后,pull当前分支的最新代码,如果有冲突,解决冲突。
- 测试分支功能稳定之后,切换到主分支,合并代码到主分支
- commit信息尽量填写清楚
rebase变基
使用另一种合并提交方式rebase。
git checkout experiment
git rebase master
提交的历史就合并成了一条线,这时候切换回master分支,并merge一次就可以将master指向C4'。
变基的实质是丢弃一些现有的提交,然后新建一些内容一样但不同的提交。
使用rebase还是merge:对于自己本地的分支修改,使用rebase使提交历史更加清晰;对于已经推送到远程仓库的,不要再进行rebase,否则其他人在pull时要使用git pull --rebase选项,以rebase的方式拉取远程仓库的修改。