日常工作中,經(jīng)常會遇到一種情況,看到別人寫的好的 repo 希望能夠?qū)W習(xí)瞻仰,一番觀摩之后發(fā)現(xiàn)一些問題,因而需要對代碼做一波修改,修改之后希望能夠貢獻(xiàn)在源代碼上,但是又因為沒有權(quán)限無法提交,這時候就可以使用 Fork了。
Fork 的主要作用
- 對該項目提出改動意見。
- 使用其它的人的項目作為自己項目的起點。
這樣你就可以在遵守Open source license的前提下任意修改這個項目了。
常用場景
- 對 repoA 進(jìn)行 Fork,然后就可以在自己的github下看到該工程了,名為 repoB
- 若直接 clone repoB
- 進(jìn)行瀏覽或修改,commit之后可以直接提交在自己的 repoB 中;
- 若希望修改也發(fā)生在 repoA中,則通過提 PR 的方式,則原 repoA accept后即可修改;
- 若直接 clone repoA
- 進(jìn)行瀏覽或修改,commit之后沒有代碼 push 權(quán)限,因為此時本地的 repo 關(guān)聯(lián)的是 repoA;
git remote -v可以查看 - 則需要將 repoB也設(shè)為本地 repo 的遠(yuǎn)端代碼,并設(shè)置遠(yuǎn)端repo的名字<fork_repo>
git remote add <fork_repo> <repoB_git_address>
之后則可以像步驟2 一樣進(jìn)行其他的操作。
Tips
- 通常我們在分支上push代碼時,會直接使用
gp命令,這里其實是git push origin <branch_name>的縮寫,代表將當(dāng)前分支push到origin遠(yuǎn)端分支上; - 當(dāng)我們在步驟3中為本地repo添加了第二個遠(yuǎn)端源之后,則當(dāng)前repo有兩個關(guān)聯(lián)的遠(yuǎn)端repo,分別為
origin和fork_repo,這時在分支上提交代碼時不能再使用gp, 需要使用git push fork_repo <branch_name>來完成push;
涉及知識點
- 使用 git remote -v 查看遠(yuǎn)程狀態(tài)
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 的兩個遠(yuǎn)端源是同一個,當(dāng)然也可以設(shè)置成不同的遠(yuǎn)端源,如從A源進(jìn)行fetch,而去B源push提交。
- 為本地repo添加一個遠(yuǎn)端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 本地代碼到遠(yuǎn)端repo
git push <remote_repo_name> <branch_name>