zoukankan      html  css  js  c++  java
  • git 多人协作

    本地git关联远程仓库

    关联一个远程仓库使用命令: git remote add origin git@xxx/xxx.git
    关联后,使用命令 git push -u origin master 第一次推送master 分支的所有内容
    此后,本次本地提交后,只要有必要就可以使用命令 git push origin master 推送最新修改。
    
    如果从远程仓库克隆时,实际上git自动把本地的master分支和远程的master分支对应起来了,并且远程仓库的默认名称为origin.
    

    要查看远程仓库的信息:git remote

    $ git remote
    origin
    显示更详细的信息:git remote -v 
    $ git remote -v
    origin  git@github.com:michaelliao/learngit.git (fetch)
    origin  git@github.com:michaelliao/learngit.git (push)
    上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址
    

    推送分支

    把本地仓库内容推送到远程,用git push命令,实际上是把当前分支推送到远程仓库对应的分支。
    由于远程库是空的,我们第一次推送master分支时,加上-u 参数,git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    
    推送分支就是把分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样git就会把该分支推送到远程库对应的远程分支上。
    git push origin master
    ​
    如果要推送其他分支,比如dev,就修改成
    git push origin dev
    ​
    ps: 并不一定要把本地分支往远程推送,一般那些需要推送?
    mater分支:该分支为主分支,因此要时刻与远程同步
    dev分支:该分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步。
    

    抓取分支

    多人协作开发时,大家都会向master和dev分支上推送各自的修改。
    实例:
     模拟一个你的小伙伴,可以在另一台电脑(主要要把SSH Key添加到GitHud)或者同一台电脑的另一个目录下克隆
    $ git clone git@github.com:michaelliao/learngit.git
    Cloning into 'learngit'...
    ...
    Receiving objects: 100% (46/46), 15.69 KiB | 6 KiB/s, done.
    Resolving deltas: 100% (16/16), done.
    当小伙伴从远程库clone时,默认情况下,小伙伴只能看到本地的master分支。
    $git branch
    *master
    现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,使用如下命令:
    $git checkout -b dev origin/dev
    这样,他就可以在dev 分支上继续修改,并且可以时不时把dev分支push远程
    

    多人开发冲突

    当你的小伙伴已经向origin/dev分支推送了他的请求,而碰巧,你也对同样的文件做了修改,并试图推送。
    $ git add hello.py 
    $ git commit -m "add coding: utf-8"
    [dev bd6ae48] add coding: utf-8
     1 file changed, 1 insertion(+)
    $ git push origin dev
    To git@github.com:michaelliao/learngit.git
     ! [rejected]        dev -> dev (non-fast-forward)
    error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
    hint: Updates were rejected because the tip of your current branch is behind
    hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
    hint: before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    这时你发现你的提交和小伙伴的最新提交有冲突,解决办法也很简单,git已经提示我们先用git pull 把最新的提交从origin/dev 抓下来,然后手动解决冲突(详见git的工作流章节),冲突解决后再进行推送。
    如果git pull也失败了,原因是没有指定本地dev分支域远程的origin/dev分支的连接,根据提示,设置dev和origin/dev链接 
    
    $git pull 失败并提示
    If you wish to set tracking information for this branch you can do so with:
    git branch --set-upstream dev origin/<branch>
    ​
    将本地dev分支与远程origin/dev分支的链接关联
    $ git branch --set-upstream dev origin/dev
    Branch dev set up to track remote branch dev from origin.
    ​
    分支关联后再次进行拉取
    $ git pull
    Auto-merging hello.py
    CONFLICT (content): Merge conflict in hello.py
    Automatic merge failed; fix conflicts and then commit the result.
    ​
    git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中解决冲突完全一样。解决后,提交,在push
    $ git commit -m "merge & fix hello.py"
    [dev adca45d] merge & fix hello.py
    $ git push origin dev
    Counting objects: 10, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (5/5), done.
    Writing objects: 100% (6/6), 747 bytes, done.
    Total 6 (delta 0), reused 0 (delta 0)
    To git@github.com:michaelliao/learngit.git
       291bea8..adca45d  dev -> dev
    

    多人协作的工作模式

    首先可以试图用 git push origin brach-name推送自己的修改
    如果推送失败,则是因为远程分支比你本地更新,需要先用git pull试图合并
    如果合并有冲突,则解决冲突,并在本地提交。
    如果没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就可以成功
    如果 git pull 提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令
    git branch --set-upstream branch-name origin/branch-name
    

    总结

    查看远程库,使用 git remote [-v]
    本地新建的分支如果不推送到远程,其他人就是不可见的
    从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的最新提交。
    在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name。本地和远程分支的名称最好一致。
    建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
    从远程抓取分支,使用git pull ,如果有冲突,要先处理冲突
    
  • 相关阅读:
    C++类内存分布
    职场人理财之指数基金篇
    职场之殇---有些事情千万不能做
    职场人为什么需要理财
    职场发展之跟对老板有多重要
    职场中怎么做好一个演讲
    多线程如何按指定顺序同步执行
    多线程抢票系统浅析
    Spring Boot进阶系列三
    Spring Boot进阶系列二
  • 原文地址:https://www.cnblogs.com/ssgao/p/8879948.html
Copyright © 2011-2022 走看看