设为首页 收藏本站
查看: 1005|回复: 0

[经验分享] git多人合作模式的应用

[复制链接]

尚未签到

发表于 2018-1-13 16:02:20 | 显示全部楼层 |阅读模式
  接触git只有不到一年的时间,可以说比大多数人起步都晚。那会还沉浸在自己的舒适圈里面,进公司就用着perforce,一用就快7年,觉得自己会用一个SCM就行了,捧着不放,也不想去接触别的SCM。
  直到去年公司一个新的项目开启,时程很赶,然后我也被拉进项目组。编程语言用的是PHP,framework是Laravel,SCM是git。刚听到的时候,我……一.NET程序员,现在让我来搞php,还是从来没接触过的,心想没搞错吧,可是是大老板安排的,抵触也没用,然后就被逼接触到了php,接触到了git。
  如果说perforce带给我的感觉是迈腾,git就是S级大奔,如果现在让我从新再选一次,我会毫无疑问选择git,差距就是这么大,再加上当今最大的代码托管平台GitHub,git作为当今最强大的分布式SCM,当之无愧。

废话说的有点多,下面进入正题。

Git的安装
  参考官网https://www.git-scm.com/
  在windows上的童鞋下载打包好的集成环境即可:https://www.git-scm.com/download/win

Git flow
  Git flow有很多,从简单到复杂,没有绝对的标准,选择适合自己的就好:


  • 如果整个项目只有你一个人,在一个master分支上玩就可以
  • 如果项目有多人合作,且master分支总是可以跟线上环境吻合,使用master分支+branches开发。
  • 如果项目有多人合作,并且master分支并不一定跟线上环境吻合,使用master分支+production分支+branches开发。
  • 等等
本文讲述的是上面第二种Flow:


  • 主代码在master分支上
  • 要对代码做的任何一个改动,无论是开发功能,修复bug,均从master分支开新的branch
  • 代码完成,发pull/merge request,如果有CI,此时会跑test脚本,通过之后,reviewers会来评审你的代码,期间可能需要你再对code做一些修改
  • 完成之后,代码被合并至master分支,如果有CI,会自动部署到stage(QA)环境
Flow对应的操作如下:

0、配置SSH KEY
  参考:http://www.cnblogs.com/windchen/p/6222434.html

1、获取master分支代码
  如果是第一次获取,用git clone指令,代码仓库都有一个地址,比如git@code.aliyun.com:ypzc/first-web.git
  git clone git@code.aliyun.com:ypzc/first-web.git
  如果是获取远程最新代码,用git pull指令,下面指令获取远程master的最新代码到当前分支
  

git checkout master  
git pull origin master
  


2、创建branch
  创建branch的命令有两个,这里推荐 git checkout -b [branch-name]
  git checkout -b相当于执行两条指令:
  

git branch [branch-name]  
git checkout [branch-name]
  

  在实际多人合作开发过程中,无论是开发功能或者修复bug,均需先获取远程master分支最新代码,再创建branch:
  

git checkout master  
git pull origin master
  
git checkout -b [branch-name]
  

  branch创建好之后,就要开始修改code了,比如新增try-git.md文件:
  

# I like git very much  

  此时可以用git status指令查看工作区有哪些文件有修改:
  

$ git status  
On branch training
  
Your branch is up
-to-date with 'origin/training'.  
Untracked files:
  
(use
"git add <file>..." to include in what will be committed)  

  
try
-git.md  

  
nothing added to commit but untracked files present (use
"git add" to track)  

  git已经很聪明的提醒我们,没有被跟踪的文件列表,并告诉我们用git add指令去追踪它
  

$ git add try-git.md  

  再次用git status查看状况
  

$ git status  
On branch training
  
Your branch is up
-to-date with 'origin/master'.  
Changes to be committed:
  
(use
"git reset HEAD <file>..." to unstage)  

  
new
file: try-git.md  

  提示有修改需要提交,需要再运行git commit。
  git add指令是将我们在工作区对文件做的修改放入暂存区,之后可以继续对该文件进行修改,但暂存区里面保存了该文件上一次放进去的样子。
  git commit是将暂存区中的文件提交到本地版本库
  

$ git commit -m "first add file" try-git.md  

1 file changed, 1 insertion(+)  
create mode
100644 try-git.md  

  再次运行git status
  

$ git status  
On branch training
  
nothing to commit, working tree clean
  

  到目前为止,对git的操作只是在本地进行,需要把对代码的修改推到远端仓库,其他人才能看到你修改后的代码
  

$ git push origin [branch-name]  


3. 合并分支、提交merge request
  此时这个branch的代码还不在master分支中,在提交merge request之前要先合并master分支的最新代码到当前分支,避免merge失败:
  先将master分支上最新的code marge到当前分支:
  

$ git pull --rebase origin master  
CONFLICT (content): Merge conflict in try-git.md
  

  如果遇到错误提示,则打开冲突的文件,修改冲突。
  查看有冲突的文件:
  

git status  

  

  both modified:标出的就是需要手动调整的冲突文件。
  Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,此时打开try-git.md文件,可以看到类似
  

<<<<<<< HEAD  
# Git is so powerful!
  
=======
  
# I like git very much
  
>>>>>>> feature1
  

  手动调整为:
  

# Git is so powerful!  
# I like git very much
  

  所有冲突的文件调整好之后,运行
  

git add .  

  提交到暂存区,然后执行git rebase --continue,再push到远程
  

$ git add try-git.md  
$ git rebase --continue
  
$ git push origin [branch-name]
  

  建立pull/merge request,拿阿里code举例子:

  执行之后,reviewers会收到通知信,查看代码,顺利的话,代码会自动marge到master分支上。

Git常用命令


  • git add [file-name] 将文件放入暂存区
  • git add . 将所有文件放入暂存区
  • git status 查看工作区和暂存区状况
  • git commit -m "message" [file-name] 提交文件到版本库
  • git commit -m "message" 提交所有暂存区中的文件到版本库
  • git push origin [branch-name] 将当前分支推到远端分支
  • git pull --rebase origin master 将远端master的修改更新到本地当前分支
  • git diff [file-name] 比较工作区文件与暂存区/版本库的差别
  • git checkout [file-name] 忽略文件当前工作区的修改,如果暂存区有该文件的修改,则回到暂存区的版本,否则回到版本库的版本
  • git rm [file-name] 删除文件
  • git log 查看版本库提交历史
  • git reset --hard [commit-id] 将代码回退到某一次commit,丢弃所有更改。另外HEAD代表当前版本,HEAD^表示上一次commit,HEAD^^表示上上次,以此类推,当然,还有这种表示方法:HEAD~10
  • git reset --soft [commit-id] 取消commit记录,但保留代码修改。这个在从feature branch上merge回master的时候非常有用,通常开发一个feature会有多次commit,如果不经过处理直接marge到master,commit也会一并marge进去,导致master分支的commit太多不容易阅读和维护。最好是在push到origin的时候,先将commit清空,仅保留一个描述当前功能的commit
  • git tag 查看所有标签
  • git tag -a [tag-name] -m "message" 给当前最新一次commit打标签,并给标签添加说明
  • git tag -a [tag-name] -m "message" [commit-id] 给某一个commit打标签,并添加说明
  • git push origin [tag-name] 将本地标签推到远程
  • git push origin --tags 将本地未推送的标签批量推到远程
  • git tag -d [tag-name] 删除标签
  • git push origin :refs/tags/[tag-name] 删除远程标签
  • git branch 查看本地分支
  • git branch -a 查看远程分支
  • git branch -d [branch-name] 删除本地分支
  • git branch -d -r origin/[branch-name] 删除远程分支 推荐用下面的方法
  • git push origin :[branch-name] 删除远程分支
  • git branch |grep 'bran'|xargs git branch -d 批量删除以bran开头的本地分支
  • git branch -a |  grep 'bran' | sed 's/remotes\///' | xargs git branch -d -r 批量删除以bran开头的远程分支
  • git check-ignore -v [file] 检查文件是被哪条规则ignore
  另外有一些文件不希望让git来追踪,可以在工作区根目录的.gitignore文件中说明,语法百度。
  git diff默认提供的功能比较难以阅读,可以利用第三方tool来,这里比较推荐suorcetree,官网:https://www.sourcetreeapp.com/,注册之后可以免费试用。
  如果官网下载很慢,也可以从百度盘下载:
  http://pan.baidu.com/s/1pLS4W7D

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434734-1-1.html 上篇帖子: VScode和GIT初步 下篇帖子: git 上传代码到GitHub 以及git删除github上文件和文件的命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表