• git的团队协作开发



    title: git的团队协作开发
    date: 2018-04-24 14:00:03
    tags: [git]

    项目负责人创建组织架构

    在控制面板中点击组织按钮,添加组织,在这里可以把组织理解为一个公司
    添加成功后,进入刚刚新建的组织
    邀请他人加入----相当于公司成员
    组织团队可以进行分组,默认的Owners是管理组

    项目负责人创建新的仓库

    创建新的仓库。
    打勾 该仓库为私有的。
    创建仓库。

    创建成功后,项目负责人下载git后,在需要上传的文件夹中右键选中 Git Bash Here
    依次运行:

      git init      #初始化
      git add .     #添加到本地仓库 . 表示全部当前文件夹中的所有文件和目录 
      git commit -m "first commit"  #添加后生效的必须提交 -m 后面的是提交的备注
      git remote add origin http://10.92.216.250:3000/test/test.git  #连接我们新建的远程仓库
      git push -u origin master  #将本地仓库的所有推送到远程仓库,需要输入帐号密码
    

    创建新的团队

    根据需要设置权限
    进入刚刚新建的团队,添加成员和相应的仓库

    分工协作之单支作业

    小张:

    	git clone http://10.92.216.250:3000/test/test.git
      #直接将项目克隆到本地,可在D盘中运行该命令,成功后会出现一个test文件夹,然后就可以进行常规操作了
    

    本地常规操作

    小张在这个项目--test文件夹中新增了一个index.html文件
    在该项目中右键选中 Git Bash Here

      git add index.html #将index.html添加到本地仓库中
      git status #这个是查看有多少添加但还没提交的文件
      git commit -m '小张完成了index.html' #提交到本地仓库
    

    上面的过程的无限进行,添加,提交。注意这些操作都是在本地仓库进行的

    快下班了,小张准备把今天的开发全部推送到服务器

      $ git remote #提交之前最好先看看服务器叫什么
      origin       #这个origin就是使用git remote得到的远程服务器的名称
      $ git push origin master #将本地master推送到origin这台主机上,默认名字相同的分支,即master
    

    window 删除警告

    在使用git add . 命令时,出现如下提示:
    warning: LF will be replaced by CRLF in XXXXX
    意思是在XXXXX文件中,LF(换行,Line Feed)将会被CRLF(回车换行,CarriageReturn)替代。这是因为在windows中换行符为CRLF,而在linux下的换行符为LF。

        rm -rf .git  # 删除.git  
        git config --global core.autocrlf false  #禁用自动转换    
        git init    
        git add .
    

    忽略提交文件

    在开发中,有时候git根目录下有一些不需要add的文件或目录,可以在根目录添加一个 ".gitignore"文件

        /mtk/               #过滤整个文件夹
        *.zip               #过滤所有.zip文件
        /mtk/do.c           #过滤某个具体文件
        echo  "*.class"  >> .gitignore    #用命令行排除以.class结尾的文件
    

    多人的时候

    第二天老郭也来开发这个项目:

    	git clone http://10.92.216.250:3000/test/test.git
      #直接将项目克隆到本地,可在D盘中运行该命令,成功后会出现一个test文件夹,然后就可以进行常规操作了
    

    取得最新的项目,老郭看到小张已经把index.html开发了。他就负责开发admin.html,这个时候小张也在开发index.css
    老郭开发完admin.html后

      git add admin.html #将index.html添加到老郭的本地仓库中$
      git status #这个是查看有多少添加但还没提交的文件
      git commit -m '老郭完成了admin.html' #提交到本地仓库
      git remote #提交之前最好先看看服务器叫什么
      git push origin master #将本地master推送到origin这台主机上,默认名字相同的分支,即master
    

    这个时候小张的index.css也开发完成了:

      $ git add index.css
      $ git status #
      $ git commit -m '小张完成了index.css' #提交到本地仓库
      $ git remote #提交之前最好先看看服务器叫什么
      $ git push origin master #将本地master推送到origin这台主机上,默认名字相同的分支,即master
      error:**************    #报错了
    

    这是因为老郭已经提前提交了一次,现在小张多应的版本不是最新的,每次提交都要确保对应的最新版本

    从远程服务器拉取版本

    小张知道原因后:

      $ git pull #将远程服务器中的最新版本拉下来,没有文件冲突肯定就成功的,有冲突后面再说
      $ git push origin master  #现在小张就提交成功了
    

    以后小张也学聪明了,不过有几个开发人员,反正每次push之前先pull最新的下来,然后再push
    在小张push成功后,如果老郭又要push也需要先pull最新的下来,另外每次开发之前最好也pull一次,这样
    就可以在最新版本中开发,也就是开发前开发后都要pull

    解决冲突

    现在中梁也来开发这个项目了

    	git clone http://10.92.216.250:3000/test/test.git 
      #直接将项目克隆到本地,可在D盘中运行该命令,成功后会出现一个test文件夹,然后就可以进行常规操作了
    

    中梁开发了test.txt,

      文件内容
      2222122
      222
      222
    

    这个时候小张也在开发这个test.txt,

      文件内容
      aaa
      aaa
      aaa
    

    如果中梁开发得快,先push了,这个时候小张再push就会报冲突的错误,就算pull也拉不下来。

      E:work	est>git push
      To http://10.92.216.250:3000/test/test.git
      ! [rejected]        master -> master (non-fast-forward)
      error: failed to push some refs to 'http://10.92.216.250:3000/test/test.git'
      hint: Updates were rejected because the tip of your current branch is behind
      hint: its remote counterpart. Integrate the remote changes (e.g.
      hint: 'git pull ...') before pushing again.
      hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    
    	E:work	est>git pull
      remote: Counting objects: 5, done.
      remote: Compressing objects: 100% (2/2), done.
      remote: Total 3 (delta 1), reused 0 (delta 0)
      Unpacking objects: 100% (3/3), done.
      From http://10.92.216.250:3000/test/test
        1ada640..dbb924c  master     -> origin/master
      error: Your local changes to the following files would be overwritten by merge:
              test.txt
      Please commit your changes or stash them before you merge.
      Aborting
      Updating 1ada640..dbb924c
    

    在整个协作开发时,有时候会出现冲突。通常都是由于开发人员分工不明确导致的,所以如果出现这种情况,需要两个程序员协商解决。
    另外小张可以先

    	$ git stash #本地的所有修改就都被暂时存储起来 。是用git stash list可以看到保存的信息
      Saved working directory and index state WIP on master: 1ada640 '222'
      $ git stash list
      stash@{0}: WIP on master: 1ada640 '222'    #其中stash@{0}就是刚才修改保存的标记
      $ git pull #现在就能pull下来了
      $ git stash pop stash@{0}    #还原暂存的内容
      Auto-merging test.txt
      CONFLICT (content): Merge conflict in test.txt #系统自动合并修改的内容,但是其中有冲突,需要手动解决。
    

    打开冲突的文件test.txt

    	文件内容
      <<<<<<< Updated upstream
      2222122
      222
      222
      =======
      aaa
      aaa
      aaa
      >>>>>>> Stashed changes
    

    系统不知道要保留中梁的,还是报错小张的
    这个时候经过协商,把文件改为

      文件内容
      222
      aaa
      222
    

    然后小张:

      $ git add test.txt
      $ git commit -m '合并了test文件内容'
      $ git push origin master
    

    现在不管是老,中,少三人还是更多的开发者,都可以按照这个流程完成所有开发

    分工协作之多分支

    在之前的开发中,适用于小团队,如果大团队就需要多分支来管理。

    分支的基本操作

      分支的基本操作
      $ git branch   #查看分支
      * master       #有*的就是当前分支
      $ git branch test  #创建test分支
      $ git checkout test   #切换到test分支,然后可以在该分支进行常规的开发和操作,
      $ git checkout -b test  #创建并切换分支
      $ touch test2.txt  #创建一个test2的文件夹
      $ git add test2.txt
      $ git commit -m '小张在新分支test中创建了一个text2.txt文件'
      $ git push origin test  #注意,这里是把本地的test分支推送到origin远程主机上,这里是后面省略了 (:test)
    
      $ git checkout master  #切换到主分区
      $ git merge test  #合并指定分支到当前分支
      $ git branch -d test #删除test分支
    git推送本地分支到远程分支
    场景
    有时候我们开发需要开一个分支,这样可以有效的并行开发.
    
    
    
    开分支有两种方式:
    一种是在远程开好分支,本地直接拉下来;
    一种是本地开好分支,推送到远程.
    远程先开好分支然后拉到本地
    git checkout -b feature-branch origin/feature-branch    //检出远程的feature-branch分支到本地
    本地先开好分支然后推送到远程
    $  git checkout -b feature-branch    //创建并切换到分支feature-branch  
    $  git push origin feature-branch:feature-branch    //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
    

    分支管理

    这波操作后gogs 上仓库就有新的test分支了
    项目管理员可以在仓库设置中->管理分支->保护分支->把给主分支开启保护

    其他人可以在其他分支中创建合并请求

    该仓库管理团队的成员可以点击合并进行合并,有冲突也可以在gogs 上点击 编辑(小笔)解决冲突后合并。

    作者:陈耿聪 —— 夕狱

    出处:https://www.cnblogs.com/CGCong/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    read-uncommited 下脏读的实现
    MySQL 加锁处理分析【重点】
    Next-key locking是如何解决幻读(当前读)问题的
    spring ioc
    讨论 update A set number=number+ ? where id=?的原子性 (含数据库原理)
    PESSIMISTIC_READ & PESSIMISTIC_WRITE 与 共享锁 & 排它锁
    innodb当前读 与 快照读 and rr级别是否真正避免了幻读
    java finalize及实践
    uva 539 The Settlers of Catan
    zoj 1016 Parencodings
  • 原文地址:https://www.cnblogs.com/CGCong/p/9375774.html
Copyright © 2020-2023  润新知