正确的 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 文件中,您可以保持 fetchurl 参数相同,但为分叉(上游)存储库添加一个额外的 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)

这可能不是好的或不正确的做法,但它肯定会使它更有凝聚力。很想听听你们对此有何看法!