我正在尝试找出在项目中在Atmosphere上分叉现有包的最佳/最干净的方法。我遇到过一些现有软件包需要进行一些修改的情况,我被迫分叉了。
据我所知,存在以下选项。不幸的是,所有这些都有自己的问题,我还没有找到完美的解决方案。我将以meteor-router
为例:
步骤:
packages/router/.git/
packages/.gitignore
并删除“路由器”行smart.json
packages/router
添加到项目存储库并提交优点:
缺点:
除了最简单的包之外,甚至不要考虑这个!
要在github上分叉包,您可以检查smart.lock
文件以查看正在使用的存储库。转到该存储库的github页面并进行分叉。
接下来,您有三个选择:
有关git子模块的更多信息:http://git-scm.com/book/en/Git-Tools-Submodules
步骤:
smart.json
优点:
缺点:
git submodule init
并更新update
smart.json
以使用您的版本步骤:
smart.json
中,找到"router": {}
并在空"git": "https://github.com/USER/meteor-router.git"
内添加{}
。 "branch"
或"tag"
。优点:
缺点:
(建议的陨石改进:允许以可编辑的形式安装软件包,比如Python的pip允许使用'-e'参数)
"path"
添加到smart.json
步骤:
"path"
添加smart.json
,将陨石指向您当地的结帐优点:
缺点:
smart.json
,则很可能会破坏所有其他开发/部署环境...... 您使用哪种方法?你如何解决这种方法的缺点?
我可能错过了这些解决方案的一些问题。
答案 0 :(得分:10)
对于Meteor 1.0,我建议如下:
设置本地包文件夹
$ mkdir "$HOME/code/packages"
将PACKAGE_DIRS
环境变量添加到.bashrc
/ .zshrc
文件
export PACKAGE_DIRS="$HOME/code/packages"
分叉并克隆存储库
$ cd "$HOME/code/packages"
$ git clone <yourGithubFork>
从文件系统
安装软件包$ meteor add <packagenamespace>:<packagename>
答案 1 :(得分:5)
比上述所有方法都更容易回答。在项目中创建一个名为packages的目录,并将要覆盖的包放入其中。简单!
例如:假设您要对流星的accounts-ui-unstyled(sub-dependency accounts-ui)进行一些更改。将整个meteor source的git clone复制到本地存储库:
MyMachine:~ theuser$ cd Development/
MyMachine:Development theuser$ git clone https://github.com/meteor/meteor.git
MyMachine:Development theuser$ cp accounts-ui-unstyled ~/Development/MyProject/packages
在您的项目结构中,您将拥有此
MyProject
|
-> client
-> lib
-> packages
|
-> accounts-ui-unstyled
-> private
-> public
-> server
-> tests
您在MyProject / packages / accounts-ui-unstyled中所做的任何更改现在都将覆盖该包。
答案 2 :(得分:4)
2B。编辑项目的smart.json以使用您的版本
我建议使用此版本,因为它与smart.json
打算如何使用和支持的方式最为一致。 mrt update
会正确反映我认为git repo
的最新信息。
答案 3 :(得分:0)
我使用#2选项的混合:我将smart.json
指向本地结帐,但我将所有包(包括应用程序和签出的智能包)作为git子模块放入父项目。陨石仍然在应用程序中安装其余的智能包。这样,当您开发智能包时,一切都保持一致,并且当您的fork合并时,您可以将应用程序移动到正常的Meteorite。
有关示例,请参阅 https://github.com/mizzao/CrisisMapping 。在我的情况下,那些甚至不是福克斯,它们只是我在最新的陨石发布之外开发的智能包。