如何以干净的方式分叉现有的Meteorite包?

kon*_*rad 19 meteor meteorite

我正在尝试找出在项目中在Atmosphere上分叉现有包的最佳/最干净的方法.我遇到过一些现有软件包需要进行一些修改的情况,我被迫分叉了.

据我所知,存在以下选项.不幸的是,所有这些都有自己的问题,我还没有找到完美的解决方案.我将以meteor-router一个例子为例:

1.只需将包文件复制到packages文件夹即可

脚步:

  • 去掉 packages/router/.git/
  • 编辑packages/.gitignore并删除"路由器"行
  • 从你的删除路由器 smart.json
  • 添加packages/router到项目存储库并提交
  • 现在进行更改(这样你的初始提交是一个干净的版本,你可以自己解决你已经改变的)

好处:

  • 易于实现和理解
  • 您所依赖的所有代码都可以在项目存储库中找到

缺点:

  • 你丢失了所有原始存储库的历史记录
  • 很难更新到更新的版本
  • 很难将您的更改贡献回原始项目

除了最简单的包装之外,甚至不要考虑这个!

2.在github上叉,然后......

要在github上分叉包,您可以检查您的smart.lock文件以查看正在使用的存储库.转到该存储库的github页面并进行分叉.

接下来,您有三个选择:

2A.将它添加为git子模块

有关git子模块的更多信息:http://git-scm.com/book/en/Git-Tools-Submodules

脚步:

  • 请参阅上面的链接,了解如何初始化/创建/更新子模块
  • 从您的包中取出包裹 smart.json

好处:

  • 子模块版本连接到您的项目
  • 立即获取更改

缺点:

  • 所有开发人员都需要git submodule init第一次运行并update进行更新
  • 编辑结帐时,您必须了解子模块的问题
  • 阅读有关子模块的其他问题

2B.编辑项目smart.json以使用您的版本

脚步:

  • 在你的smart.json,找到"router": {}并添加"git": "https://github.com/USER/meteor-router.git"内部空{}.
  • (可选)添加"branch""tag".

好处:

  • 您仍然可以使用Meteorite来管理外部包
  • 将自动为其他开发人员和部署环境工作

缺点:

  • package文件夹中的代码不可编辑,因为它不是git存储库
  • 每次运行时,Meteorite都不会自动更新到最新版本

(建议的陨石改进:允许以可编辑的形式安装包,比如Python的pip允许使用'-e'参数)

2C.在项目外部克隆并添加"path"smart.json

脚步:

  • 将包克隆到项目之外的位置
  • 与2b类似,添加一个"path"到您smart.json的指向陨石到您当地的结帐

好处:

  • 您可以随意编辑包,Meteor将自动获取更改.

缺点:

  • 如果您提交此内容smart.json,您很可能会破坏所有其他开发/部署环境......

你用哪种方法?你如何解决该方法的缺点?

我可能错过了这些解决方案的一些问题.

HaN*_*riX 10

对于Meteor 1.0,我推荐以下内容:

  1. 设置本地包文件夹

    $ mkdir "$HOME/code/packages"
    
    Run Code Online (Sandbox Code Playgroud)
  2. PACKAGE_DIRS环境变量添加到.bashrc/ .zshrcfile

    export PACKAGE_DIRS="$HOME/code/packages"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 分叉并克隆存储库

    $ cd "$HOME/code/packages"
    $ git clone <yourGithubFork>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 从文件系统安装包

    $ meteor add <packagenamespace>:<packagename>
    
    Run Code Online (Sandbox Code Playgroud)


Gra*_*mak 5

有一个比上述所有更容易的答案.在项目中创建一个名为packages的目录,并将要覆盖的包放入其中.简单!

例如:假设你想进行一些更改帐户-UI-无样式(这是一个子依赖账户-UI)的流星.将整个流星源的git克隆到本地存储库:

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
Run Code Online (Sandbox Code Playgroud)

在您的项目结构中,您将拥有此功能

MyProject
 |
 -> client
 -> lib
 -> packages
    |
    -> accounts-ui-unstyled
 -> private
 -> public
 -> server
 -> tests
Run Code Online (Sandbox Code Playgroud)

您在MyProject/packages/accounts-ui-unstyled中所做的任何更改现在都将覆盖该包.


Doc*_*oss 4

2b. 编辑项目的 smart.json 以使用您的版本

smart.json我会推荐这个版本,因为它与预期的使用和支持方式最一致。mrt update将正确反映我认为的最新情况git repo