实现#2和#3的最佳设置是什么?即修改但尽可能容易地保持更新。
我按照他的理解列出了Burhan Khalid,Dan的答案 感谢您的回答!
本地子模块
git克隆库(作为子模块),并根据需要进行修改
在需要时拉动库的变化。
github fork + local submodule
您可以直接更改代码,并仍然在单独的仓库中管理对库的更改。
(不确定好处,你可以在github中使用git-forked repo,这样你就可以向原始仓库提出拉动请求了)
(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 pip -e original library repo
+ python setup.py install
您不关心pull request
只是进行修改并使用它
不确定python setup.py install
做了什么,以及我所做的修改将如何反映在我的项目回购中
答案 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
时,它会安装e
ditable version,这意味着您可以在将其作为软件包实际安装之前使用它。
如果您的更改是非常小的一次性更改,您只需从原始库源安装可编辑版本,修改它,然后python setup.py install
修改后的版本;您可以选择创建一个补丁,当原始源更新时,您可以使用该补丁修改原始源。
pip install -e
确实适用于安装软件包的开发版本,因为你不应该在pypi上发布它们。