正确的 git 远程跟踪实践
Proper git remote tracking practice
GitHub forking documentation 概述了当您拥有自己的分叉时,最好的远程跟踪实践是将 origin
作为您自己的分支,并将 upstream
作为您分叉的分支:
$ 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)
理想情况下,我希望能够从 upstream
分支 track 以便我可以看到何时需要从远程获取代码以使用我当前的版本,但默认情况下我还想 push 我的代码到 origin
存储库,在那里我可以向我分叉的存储库发出拉取请求(而不是试图推到叉子上并收到 Permission denied: 403
错误)。
是否有 "best" 方法来做到这一点?
我搜索后找不到这个问题的明确答案,如果这个答案以前发布过但我没有找到,请随时 link 我。谢谢!
所以我找到了这个问题的潜在有趣解决方案。
我没有真正考虑但只是注意到的一件事是 (fetch)
和 (push)
括号后的远程 URL 列表来自详细的 git remote
命令:
$ 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)
如果您可以拥有一个单独的遥控器:origin
,它有一个不同的 URL 用于获取和推送会怎么样。这样你就可以跟踪一个默认的遥控器,但也可以默认推送到另一个遥控器。我做了一些研究,结果是 this is very possible.
在 .git/config
文件中,您可以保持 fetch
和 url
参数相同,但为分叉(上游)存储库添加一个额外的 pushurl
参数.
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
pushurl = https://github.com/YOUR_USERNAME/YOUR_FORK.git
这将导致以下输出:
$ git remote -v
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
origin https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
这可能不是好的或不正确的做法,但它肯定会使它更有凝聚力。很想听听你们对此有何看法!
GitHub forking documentation 概述了当您拥有自己的分叉时,最好的远程跟踪实践是将 origin
作为您自己的分支,并将 upstream
作为您分叉的分支:
$ 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)
理想情况下,我希望能够从 upstream
分支 track 以便我可以看到何时需要从远程获取代码以使用我当前的版本,但默认情况下我还想 push 我的代码到 origin
存储库,在那里我可以向我分叉的存储库发出拉取请求(而不是试图推到叉子上并收到 Permission denied: 403
错误)。
是否有 "best" 方法来做到这一点?
我搜索后找不到这个问题的明确答案,如果这个答案以前发布过但我没有找到,请随时 link 我。谢谢!
所以我找到了这个问题的潜在有趣解决方案。
我没有真正考虑但只是注意到的一件事是 (fetch)
和 (push)
括号后的远程 URL 列表来自详细的 git remote
命令:
$ 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)
如果您可以拥有一个单独的遥控器:origin
,它有一个不同的 URL 用于获取和推送会怎么样。这样你就可以跟踪一个默认的遥控器,但也可以默认推送到另一个遥控器。我做了一些研究,结果是 this is very possible.
在 .git/config
文件中,您可以保持 fetch
和 url
参数相同,但为分叉(上游)存储库添加一个额外的 pushurl
参数.
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
pushurl = https://github.com/YOUR_USERNAME/YOUR_FORK.git
这将导致以下输出:
$ git remote -v
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
origin https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
这可能不是好的或不正确的做法,但它肯定会使它更有凝聚力。很想听听你们对此有何看法!