git-logo

第四部分 远程仓库的使用

Created by Charles Liu

Agenda

  • 远程仓库和gitlab
  • 查看远程仓库
  • 添加远程仓库
  • 抓取代码
  • 跟踪一个远程分支和拉取代码
  • 推送代码
  • 工作流

远程仓库


# 通过目录共享版本库
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git

# 通过http协议共享版本库
$ git clone https://example.com/gitproject.git

# 通过ssh协议共享版本库
$ git clone ssh://user@server/project.git
$ git clone user@server:project.git
  

github和gitlab ce

功能 Github Gitlab CE
同步代码 可以 可以
托管方式 托管 自建服务器
文件查看 支持 支持
分支管理 支持 支持
代码审查 支持 支持
合作方式 派生+拉取请求 派生+合并请求
费用 开源免费,闭源收费 自建免费,托管收费

查看远程仓库

git remote

# emoji-minesweeper项目
$ git remote -v
origin	git@github.com:dodoinblue/emoji-minesweeper.git (fetch)
origin	git@github.com:dodoinblue/emoji-minesweeper.git (push)
  

多个remote的项目看起来像是下面这个样子


defunkt   https://github.com/defunkt/grit (fetch)
defunkt   https://github.com/defunkt/grit (push)
koke      git://github.com/koke/grit.git (fetch)
koke      git://github.com/koke/grit.git (push)
origin    git@github.com:mojombo/grit.git (fetch)
origin    git@github.com:mojombo/grit.git (push)
    

通过init创建的git没有remote

远程分支


# emoji-minesweeper项目
$ git branch --all
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/gh-pages
  remotes/origin/master
  remotes/origin/randos
  

抓取代码

git fetch [remote-name]

把remote的变化应用到本地分支上

用变基(rebase)而不是合并merge


$ git fetch
$ git rebase origin/master
  

拉取代码——用一个命令更新本地分支代码

git pull

$ git pull --rebase
    

推送代码

git push

$ git push origin master

$ git push origin charles-feature-name
  

删除远程分支


$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted]         serverfix
  

派生(fork)

拉取请求(pull request)和合并请求(merge request)

打标签 (tag)

git tag

# 列出标签
$ git tag -l
0.1.0
0.1.1
0.1.2
  

# 添加标签
$ git tag -a tagname commit-id
  

# 共享标签(推送到服务器)
$ git push origin tag-name
# 推送所有标签
$ git push origin --tags
  

# 检出标签
$ git checkout 0.1.0
  

案例——单分支工作

sequenceDiagram Server ->> Peter: git clone Server ->> Bob: git clone activate Peter activate Bob Note right of Peter: 实现特性1 Note right of Bob: 修改Bug1 deactivate Bob Bob ->> Server: git push Server ->> Server: accept change deactivate Peter Peter ->> Server: git push Server --x Server: 冲突 Peter ->> Peter: git rebase Peter ->> Server: git push

案例——Review不通过

sequenceDiagram Server ->> Peter: git clone activate Peter Note right of Peter: 实现特性1 deactivate Peter Peter ->> Server: git push & merge request loop 直到审核通过 Server ->> Reviewer: 请审查代码 Note right of Reviewer: 审查代码.. Reviewer ->> Server: Review NOK activate Peter Peter ->> Peter: 按照Review修改代码 deactivate Peter Peter ->> Peter: git commit --amend Peter ->> Server: git push Server ->> Server: Update MR end Server ->> Reviewer: 请审查代码 Reviewer ->> Server: Review OK. Accept Merge

References

  • https://git-scm.com/book/zh/v2/
  • https://cn.udacity.com/course/how-to-use-git-and-github--ud775/