Git Fork Sync

今天在工作中,想在Github上建立一个repository供大家协同开发,有人提出要可以进行code review,之前在项目中用到过Gerrit,但是这种小型项目感觉用Gerrit有点大材小用。

总之,先尝试了一下Fork的使用。

Fork

USERAGithub上新建一个repository,之后USERBFork这个repository。然后clone到本地。

$ git clone git@github.wdf.sap.corp:USERB/RepositoryName.git

这里用的是ssh url。

Commit

Clone下来之后,USERB可以进行编辑,比如新建一个err.md文件,并填写一些内容。

$ git add filename
$ git commit

Push

之后,USERB进行push操作,注意,此时push是到了USERBrepository

如果想要让项目的原作者注意到,USERB需要发起一个pull request

Pull Request

创建一个pull requestbase是远程的USERA的repositoryheadUSERBrepository

填写comment,这时就可以等待原作者的同意并并入到原作者的项目中去了。

Keep Synced

此时大家可能会注意到一个问题,我们如何保持我们fork出来的项目和原项目同步呢?

$ git fetch [origin]

这条命令没有错,但是只是从USERBrepository的远程来拉代码,并不能解决同步问题。

这时我们需要设定一个新的remote源。

$ git remote -v

查看当前的remote

origin  git@github.wdf.sap.corp:USERB/RepositoryName.git (fetch)
origin  git@github.wdf.sap.corp:USERB/RepositoryName.git (push)

新加一个新的remote

$ git remote add upstream git@github.wdf.sap.corp:USERA/RepositoryName.git

此时我们看到,remote变成了四个。

origin  git@github.wdf.sap.corp:USERB/RepositoryName.git (fetch)
origin  git@github.wdf.sap.corp:USERB/RepositoryName.git (push)
upstream  git@github.wdf.sap.corp:USERA/RepositoryName.git (fetch)
upstream  git@github.wdf.sap.corp:USERA/RepositoryName.git (push)

之后,我们如果要保持代码同步的话,可以直接输入命令。

$ git fetch upstream

文献

参考文章: Fork and Pull, Fork a Repo