日常工作中,经常会遇到一种情况,看到别人写的好的 repo 希望能够学习瞻仰,一番观摩之后发现一些问题,因而需要对代码做一波修改,修改之后希望能够贡献在源代码上,但是又因为没有权限无法提交,这时候就可以使用 Fork
了。
Fork 的主要作用
- 对该项目提出改动意见。
- 使用其它的人的项目作为自己项目的起点。
这样你就可以在遵守Open source license的前提下任意修改这个项目了。
常用场景
- 对 repoA 进行 Fork,然后就可以在自己的github下看到该工程了,名为 repoB
- 若直接 clone repoB
- 进行浏览或修改,commit之后可以直接提交在自己的 repoB 中;
- 若希望修改也发生在 repoA中,则通过提 PR 的方式,则原 repoA accept后即可修改;
- 若直接 clone repoA
- 进行浏览或修改,commit之后没有代码 push 权限,因为此时本地的 repo 关联的是 repoA;
git remote -v
可以查看 - 则需要将 repoB也设为本地 repo 的远端代码,并设置远端repo的名字<fork_repo>
git remote add <fork_repo> <repoB_git_address>
之后则可以像步骤2 一样进行其他的操作。
Tips
- 通常我们在分支上push代码时,会直接使用
gp
命令,这里其实是git push origin <branch_name>
的缩写,代表将当前分支push到origin远端分支上; - 当我们在步骤3中为本地repo添加了第二个远端源之后,则当前repo有两个关联的远端repo,分别为
origin
和fork_repo
,这时在分支上提交代码时不能再使用gp
, 需要使用git push fork_repo <branch_name>
来完成push;
涉及知识点
- 使用 git remote -v 查看远程状态
git remote -v
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
通常 fetch 和 push 的两个远端源是同一个,当然也可以设置成不同的远端源,如从A源进行fetch,而去B源push提交。
- 为本地repo添加一个远端repo
git remote add <remote_repo_name> <remote_repo_github_address>
git remote -v
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
- Push 本地代码到远端repo
git push <remote_repo_name> <branch_name>
网友评论