【问题标题】:Proper handling of dependencies under Version Control in IntelliJ IDEA在 IntelliJ IDEA 中正确处理版本控制下的依赖关系
【发布时间】:2016-07-09 22:04:08
【问题描述】:

我正在使用 IntelliJ IDEA 社区版 2016.1。 我把我的项目放在 Git 下,托管在 GitHub 上。

我在处理跨存储库的模块依赖项时遇到问题。

配置特定 JAR 的路径时,这些路径因平台而异。例如,在我的 Windows 7 机器上,它们存储在 D:\Lib,而在我的 Windows 10 机器上,它们存储在 C:\IdeaDependencies

问题是如果我选择同步模块IML文件,每个平台的路径都是一样的,不会让IDE找到。

我该如何解决这个问题?

【问题讨论】:

    标签: git github intellij-idea dependencies


    【解决方案1】:

    如果您正在寻找一个简单的解决方案,请将您的依赖项与您的项目文件一起存储,就像任何其他资源一样。

    您可以在模块的内容根目录下创建一个名为libexcluded 文件夹,并使用它来存储您的库。这样,它们的路径将相对于您的项目文件夹(例如file://$PROJECT_DIR$/lib/gson-2.6.2.jar),您不必针对每个平台调整它们。

    【讨论】:

      【解决方案2】:

      将依赖项用作项目中的子模块,这样您就不必关心它们在磁盘上的位置。

      Submodules 始终允许将外部存储库嵌入到源代码树的专用子目录中指向一个特定的提交。


      git submodule

      像您目前所做的那样,将您的大项目分解为子项目。
      现在将每个子项目添加到您的主项目中:

      git submodule add <url>
      

      将项目添加到您的存储库后,您必须对其进行初始化和更新。

      git submodule init
      git submodule update
      

      Git 1.8.2 开始,添加了新选项 --remote

      git submodule update --remote --merge
      

      这将 fetch 来自上游的每个子模块的最新更改,merge them in,以及check out子模块的最新版本。

      正如the docs 描述的那样:

      --remote

      此选项仅对更新命令有效。不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。

      这相当于在每个子模块中运行git pull


      但是,在 C 中的 bug 修复会影响与父层共享的代码的情况下,我将如何推送提交?

      再次重申:使用子模块会将您的代码作为其内容的一部分放在主项目中。将其本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。


      这是子模块的图示 - 另一个项目中的项目,其中每个项目都是一个独立的项目:


      git subtree

      它允许您插入任何存储库作为另一个存储库的子目录。

      submodule 非常相似,但主要区别在于代码的管理位置。在子模块中,内容被放置在一个单独的 repo 中并在那里进行管理,这允许您将其克隆到许多其他 repo。

      subtree 将内容作为根项目的一部分进行管理,而不是在单独的项目中。

      您无需写下如何设置它以及了解如何使用它,您只需阅读this excellent post 即可解释一切。

      【讨论】:

        猜你喜欢
        • 2019-12-29
        • 2010-09-18
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        • 2020-02-28
        • 2019-10-29
        • 1970-01-01
        相关资源
        最近更新 更多