git - 如何使用 fork 的 repo 并仍然跟踪原始来源的更新

标签 git github pip

  1. 您找到了一个您想要使用的基于 github 的很棒的库。
  2. 您需要根据自己的喜好稍微修改库。 (好的,你 fork 图书馆)
  3. 您希望尽可能轻松地获取更新。 (像往常一样为未修改的库增加 pip 版本?)

实现#2 和#3 的最佳设置是什么?即,尽可能轻松地修改但保持更新。

我列出了 Burhan Khalid,据我了解 Dan 的回答。
感谢两位友善的回答!

  1. 本地子模块
    git 克隆库(作为子模块),并根据需要进行修改。
    在需要时 pull 库的更改。

  2. github fork + 本地子模块
    您可以直接更改代码,并仍然在单独的存储库中管理您对库的更改。 (不确定好处,您可以在 github 中拥有 git-forked 存储库,这样您就可以向原始存储库发出 pull 请求)

  3. (github fork +) 本地克隆(作为独立的 git repo)+ pip -e
    这个想法是,好的..通过 pip 安装很好,不是吗?
    由于 pip 安装的代码位于 virtual-env 目录中(不一定包含在您的项目 repo 中),因此对其进行修改并将其提交到您的 git repo 是一件很痛苦的事情。
    (我正在尝试了解 pip -e 的作用以及 python setup.py install 的作用。但这并不像 Burhan 想象的那么容易。谢谢!)

    • 我不确定我是否可以在我的 requirements.pip 中指定 pip install from git repo the latest commit availbale
  4. pip -e original library repo + python setup.py install
    您不关心pull request,只需修改并使用它即可。
    不确定 python setup.py install 做了什么,以及我所做的修改将如何反射(reflect)在我的项目 repo 中

最佳答案

@Dan 是正确的,您的问题实际上是关于 git 的。

fork 是一个完全分离的副本,当您从 github 上的 fork 克隆时,您的克隆(桌面上的存储库)不知道您的 github repo 是从哪里 fork 的。对于它,您的 github 存储库是“来源”。

因此,使用 git remote 将原始源添加为附加远程通常是一种很好的做法。

你无权写入它,但你可以 pull 然后 rebase (这是一种奇特的说法“通过重放自从我 fork 或分支以来的所有提交来让我保持最新状态”),使确保你更新了原始版本,更重要的是,如果你决定提出 pull 请求,你没有破坏任何东西。

具体来说,对于 pip,您可以使用 pip directly pull from github :

pip -e git://github.com/you/your_fork.git
pip -e https://github.com/you/your_fork.git

So what you are suggesting is.. create a fork in github. git clone it into local machine. make modification to it and commit/push to the repo. when I need updates from the original library repo, I should merge those changes into my local forked repo. commit it. Then I can do pip -e from my forked github repo again. Sorry if this is rather long but that's exactly why I wanna ask, if there is a shorter way.

这是正确的工作流程 - 如果您想维护自己的原始库版本并进行一些更改。

虽然您真正应该做的是提出一个描述您的更改的 pull 请求(特别是如果您正在修复一些错误)。这样,如果您的更改没有破坏任何东西 - 原始库所有者有可能将您的分支 merge 到主存储库中。

这并不意味着 cheese shop (pypi) 将被更新,因为最初的图书馆所有者仍然必须“手动”更新 pypi(pypi 未以任何方式与 git 或任何其他系统链接或同步,它只是一家商店)。一旦他们这样做了,那么每个人都将能够直接获取安装您的修改。

当您执行 pip -e 时,它会安装一个 editable version这意味着您可以在实际将其作为软件包安装之前试用它。

如果您的更改是非常小的一次性更改,您可以从原始库源安装可编辑版本,修改它,然后python setup.py install您的修改版本;您可以选择创建一个补丁,如果/当原始源更新时,您可以使用它来修改原始源。

pip install -e 确实用于安装包的开发版本,因为您不应该在 pypi 上发布它们。

关于git - 如何使用 fork 的 repo 并仍然跟踪原始来源的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24255519/

相关文章:

git - "Proper" pull git "production branch"到生产服务器的方法

git - 如何使用其他用户凭据撤消对 GitHub 的意外推送

git - 如何授予用户级别访问私有(private) GitLab 存储库的权限?

javascript - 如何在 Github Issue on create (API) 上发表评论

eclipse + Egit : clone project into workspace

python - pip 异常: AttributeError: 'NoneType' object has no attribute 'startswith'

python - Libssl 和 libcrypto 导致 dyld : Library not loaded:/usr/lib/libpq. 5.dylib

python - 如何修复 "ValueError: invalid literal for int() with base 10: ' ' 的发生。每当需要 pyobjc 时,包括安装 pyobjc

git rebase --editor=/something/other/than/vim? (为了更容易压扁)

Gitlab:您必须接受服务条款才能完成操作