【问题标题】:Can SBT refresh git uri dependency (always or on demand)?SBT 可以刷新 git uri 依赖项(总是或按需)?
【发布时间】:2014-01-19 08:32:05
【问题描述】:

我有以下 sbt 代码来添加对 git uri 的插件依赖:

import sbt._

object Plugins extends Build {
  lazy val username = ("git config --global user.bitbucket" !!).trim

  lazy val root = Project("root", file(".")) dependsOn(
    uri(s"https://$username@git-repo.org/team/build.git#build_0.1")
  )
}

这很好用,但是我发现如果我对build_0.1 进行更改并推送它,当我再次来到compile 项目时,sbt 不会取消我所做的更改,所以我有日期插件。

如何让 SBT 始终对它所依赖的依赖项执行 git pull?

【问题讨论】:

    标签: git sbt


    【解决方案1】:

    最高0.13.2-M1的SBT仅支持git clonegit checkout

    git clone 用于当 URL 不包含 # 以指向分支或提交时,例如

    git:file:///Users/jacek/sandbox/so/sbt-git/git-repo
    

    git checkout 在 URL 中有 # 指向分支或提交时执行,例如

    git:file:///Users/jacek/sandbox/so/sbt-git/git-repo/#a221379c7f82e5cc089cbf9347d473ef58255bb2
    

    当我 commit'ed 对 git 存储库进行更改时,我还必须更新 build.sbt 中的提交哈希,以便在 SBT 项目中引用更改(下面的 val v)。

    lazy val v = "a221379c7f82e5cc089cbf9347d473ef58255bb2"
    
    lazy val g = RootProject(uri(s"git:file:///Users/jacek/sandbox/so/sbt-git/git-repo/#$v"))
    
    lazy val root = project in file(".") dependsOn g
    

    随着 git 存储库中的更改,SBT 项目必须是reload'ed,这样才能运行新的签出并刷新项目。

    [root]> reload
    [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
    [info] Loading project definition from /Users/jacek/sandbox/so/sbt-git/project
    Cloning into '/Users/jacek/.sbt/0.13/staging/24535507588417c1c2dc/git-repo'...
    Checking connectivity... done
    [info] Set current project to root (in build file:/Users/jacek/sandbox/so/sbt-git/)
    [root]>
    

    这很痛苦,但可以解决问题(并让您使用远程 git repo 跟踪您的位置)。

    您可能还会发现Can multi-projects from GIT be used as SBT dependencies? 很有用。

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2013-12-03
      • 2011-08-26
      • 1970-01-01
      • 2018-03-20
      • 2019-04-02
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多