如何使用forked repo并仍然跟踪原始源的更新

时间:2014-06-17 04:02:25

标签: git github pip

  1. 你找到一个你想要使用的基于github的真棒库。
  2. 您需要根据自己的喜好修改库。 (好吧,你分叉图书馆)
  3. 您希望尽可能轻松地获得更新。 (像往常一样为未修改的库增加pip版本?)
  4. 实现#2和#3的最佳设置是什么?即修改但尽可能容易地保持更新。

    我按照他的理解列出了Burhan Khalid,Dan的答案 感谢您的回答!

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

    2. github fork + local submodule
      您可以直接更改代码,并仍然在单独的仓库中管理对库的更改。 (不确定好处,你可以在github中使用git-forked repo,这样你就可以向原始仓库提出拉动请求了)

    3. (github fork +)本地克隆(作为独立的git repo)+ pip -e
      这个想法是,好吧..通过点子安装很好,不是吗? 由于pip安装的代码存在于virtual-env目录中(不是必须包含在你的项目仓库中),因此修改它并将其提交到你的git repo是一件痛苦的事。 (我试图理解pip -e做了什么以及python setup.py install做了什么。但它并不像你想象的那样容易。尽管如此!谢谢!)

      • 我不确定我是否可以在我的要求中指定pip install from git repo the latest commit availbale .pip
    4. pip -e original library repo + python setup.py install
      您不关心pull request只是进行修改并使用它 不确定python setup.py install做了什么,以及我所做的修改将如何反映在我的项目回购中

2 个答案:

答案 0 :(得分:2)

这是一个基本的Git操作方法问题,特别是与Python无关。

假设您已将git clone - 库放入本地存储库,则git pull将获取远程更改,然后将其合并到您的本地更改中。

在许多情况下,你真正想做的是git pull --rebase,它将重播"您在远程更改之上的本地更改。

这是一篇非常好的博客文章,介绍了您可能希望将本地存储库与远程源同步的不同方法:http://blog.mikepearce.net/2010/05/18/the-difference-between-git-pull-git-fetch-and-git-clone-and-git-rebase/

答案 1 :(得分:2)

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

fork是一个完全独立的副本,当你从github上的fork中克隆时,你的克隆(桌面上的存储库)不知道你的github repo从哪里分叉。对于它,你的github存储库是'origin'。

因此,将原始来源添加为git remote的附加遥控器通常是一种很好的做法。

你没有权利写信给你,但是你可以拉,然后变基(这是一种奇特的说法“通过重播我分叉或分支后的所有提交来让我更新”),制作确定你已经更新了原版,更重要的是如果你决定提出拉动请求,你没有破坏任何东西。

具体来说,你可以点击directly pull from github

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

  

所以你建议的是......在github中创建一个fork。 git克隆它   进入本地机器。对它进行修改并提交/推送到   回购。当我需要原始库回购的更新时,我应该   将这些更改合并到我的本地分叉存储库中。提交它。然后我可以   再次pip -e from my forked github repo。对不起,如果是这样的话   但是这就是为什么我想问,如果有更短的路。

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

虽然你应该做的是提出描述你的更改的拉取请求(特别是如果你正在修复一些错误)。这样,如果您的更改没有破坏任何内容 - 原始库所有者可能会将您的 fork合并到主存储库中。

这并不意味着奶酪店(pypi)会更新,因为原来的库所有者仍然需要“手动”更新pypi(pypi没有以任何方式与git或任何其他系统链接或同步,它只是一个商店)。一旦他们这样做,那么每个人都可以直接获取安装你的修改。

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

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

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