【问题标题】:Clojure: leiningen (--force) and git interactionClojure: leiningen (--force) 和 git 交互
【发布时间】:2026-01-17 01:30:01
【问题描述】:

假设我有一个由 git clone 创建的 (leiningen) 项目树。这可能是通过 lein new 模板创建的项目的子集,这是完全合法的。有一个 --force 选项可以将 lein 项目滚动到已经存在的合适的源代码树上——或者我认为是这样。我试过了,是这样的:

$ lein new app alfa --force

它用模板存根替换了所有源文件。我哪里错了?

开创性讨论:issue #1467

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    这里没有任何问题,这就是 force 选项的工作方式。如果您的项目已经包含 leiningen 项目的某些文件和文件夹子集,那么如果它们已经存在于项目目录中,它们将被覆盖。考虑到正在运行的任务被称为“新”,这似乎是常规行为。它的运行假设这确实是一个新项目,但已经创建了一个目录。

    【讨论】:

    • 到目前为止,这种推理对我来说有点神秘。这意味着现有目录是无用的,可以事先手动删除,也可以根本不创建。例如,lein idefiles 任务的存在原因很明显,而且没有破坏性。
    • 我处理您所处场景的方式是在新目录上使用不带 force 选项的 lein new,然后将文件从本地 git 目录复制到新创建的目录中,覆盖来自 git 的模板文件。然后将上游设置为指向新目录中的 git 存储库。
    • 好吧,如果没有其他办法...但是 --force 选项的用处是什么?
    • 创建一个 git repo,将其克隆到磁盘上的目录,运行 lein new... 没有强制 => 错误。强制选项将模板文件写入现有目录。我认为它的设计仅考虑了这种情况。最好有一个 --no-overwrite 选项。