【问题标题】:How to smoothly rename a Phoenix Project?如何顺利重命名凤凰项目?
【发布时间】:2017-09-03 17:44:42
【问题描述】:

我已经克隆了一个 git 存储库,我需要基于它启动一个新项目。

如何重命名它,以确保一切正常?

我正在使用 ma​​cOS

【问题讨论】:

  • 我通常只是用MyNewApp搜索替换MyApp,用my_new_app替换my_app,将lib/my_app重命名为lib/my_new_app,检查它是否仍然编译,最后手动评论git diff
  • @RomanPerekhrest 不负责重命名代码中的应用程序和内部引用。
  • @Dogbert 您愿意明确显示您正在使用的命令吗?
  • 对于命令行中的搜索替换,我是 Perl 的粉丝:git ls-files | xargs perl -p -i -e 's/MyApp/MyNewApp/g ; s/my_app/my_new_app/g'(确保在运行之前提交您的更改!)。

标签: git sed elixir phoenix-framework xargs


【解决方案1】:

我不知道有什么方法可以完全准确地自动执行此操作,但这些是我需要重命名 Phoenix 项目时手动执行的步骤。

以下命令假设您的代码在 git 存储库中,旧应用程序是 my_app / MyApp,新应用程序是 my_new_app / MyNewApp。这个过程很脆弱——如果您的应用程序或模块名称可以出现在许多地方(例如,它是单个字母 A 或其他什么),那么这将不起作用。

# search replace both the application name and module name in all files indexed by git
$ git ls-files -z | xargs -0 perl -p -i -e 's/my_app/my_new_app/g; s/MyApp/MyNewApp/g;'
# rename `lib/my_app`
$ mv lib/my_app lib/my_new_app

之后我运行mix test 并修复所有编译错误或测试失败。

最后,我对git diff 做了一个快速回顾,以确保一切正常。

【讨论】:

  • lib/my_app.ex 没有被模式以某种方式捕获(文件名,而不是文件的内容)
  • 我使用了这种方法,效果很好,但我也遇到了@jaysoifer 提到的问题——不过,解决这个问题很容易。
【解决方案2】:

基于nerdyworm's rename.sh,它使用ack,我已经对其进行了调整以使用git grep并轻松在ma​​cOS上运行。

OTP NAME:应用程序的 Snake Case (snake_case) 名称。

NAME:常规应用名称。

$ git grep -l $CURRENT_OTP | xargs sed -i '' -e "s/$CURRENT_OTP/$NEW_OTP/g"
$ git grep -l $CURRENT_NAME | xargs sed -i '' -e "s/$CURRENT_NAME/$NEW_NAME/g"

$ mv lib/$CURRENT_OTP lib/$NEW_OTP
$ mv lib/$CURRENT_OTP.ex lib/$NEW_OTP.ex

【讨论】:

  • 重命名 Phoenix 1.3 项目需要更改什么?
  • @Emily 不确定我是否理解您的问题,无论 Phoenix 的版本如何(在 1.2.x 和 1.3.x 上测试),此过程都有效。
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 2016-01-30
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多