我在技术上不如这里大多数人要求的那么熟练。我使用git将自己的工作备份到一个在线存储库中,但我很少协作使用它,并且不知道更多的基本功能。
我有一些代码(想起来更像是一堆脚本,真的),我用它们来做一些数据处理。通常,其他人(也有一定的技术技能)想要看到其中的一些。不幸的是,运行它的依赖项包括带有Python3Hooks的根部 (默认情况下,它使用Python2钩子安装,没有人会重新安装根来运行我的代码)和许多其他的大型库。我的项目是python 3,所以它可能无法使用大多数人的根安装。
为了使事情更容易访问,我在另一个文件夹中有一个模块子集,以避免任何更深奥的依赖关系。然而,我怀疑有比复制粘贴代码更好的方法来维护低依赖的版本。
我读到了这个问题:如何为多个客户端维护相同软件的不同自定义版本,它看起来可能是正确的方向。然而,它说,分支应该包含最小的变化。我需要一个版本的项目,其中只包含1/3的文件,在一些文件中有一些小的变化(删除导入)。这对我来说很不一样。存储库中的分支是否仍然是处理此问题的正确方法?
发布于 2018-11-14 08:44:14
你所指的答案可能是被接受的答案,但它并不是最受欢迎的答案。引用Alb的好答案 (强调“地雷”):
不要在SCM分支中这样做。使公共代码成为一个单独的项目,生成库或项目框架工件。每个客户项目都是一个单独的项目,然后依赖于作为依赖关系的公共项目。
对你来说,最好的选择就是把你的"gaggle脚本“变成形状。任何真正相同的功能、类等都应该被分解为独立的模块,这些模块可以通过不同的版本导入和集成。您不需要使用DI框架来获得模块化代码。
您应该将版本构造成单独的文件夹,其中包含唯一的requirements.txt文件,这样就可以轻松地创建虚拟主机。然后,在您继续开发时,只需在同一个分支中保持两个版本的最新。
您还应该设置测试,在小示例中验证不同版本的输出,并报告错误,以确保将来的编辑不会破坏现有功能。
发布于 2018-11-14 17:12:41
对于您所描述的,我可能会编写一个简单的“构建”脚本,其中
如果您愿意,也可以用Python编写脚本。
因此,与其手工复制粘贴要分发的代码,不如自动执行此任务。这不是“黑客”或“诀窍”:从单一来源生成软件的不同变体是一种标准的软件工程技术。
我们可以将其解释为一个“构建过程”,使用一些预处理器产生的不同构建配置,这在使用像C这样的编译语言时非常常见。
当然,您应该避免通过脚本修改代码中太多的位置(如果有的话),因为否则会变得容易出错。理想情况下,您只有几个需要导入根模块的文件,并且可以在复制过程中将它们排除在外(但如果不可能,只删除一些特定的导入行并不是真正的科学)。您还应该验证生成的“部分”代码库是否运行得完美无缺,并且您没有忘记复制一些重要的代码文件。一些自动化测试可能对此很有用。
https://softwareengineering.stackexchange.com/questions/381469
复制相似问题