我如何决定在 .gitignore 中添加 .idea/jarRepositories.xml

Posted

技术标签:

【中文标题】我如何决定在 .gitignore 中添加 .idea/jarRepositories.xml【英文标题】:How can I decide to add .idea/jarRepositories.xml in .gitignore 【发布时间】:2020-11-30 05:03:06 【问题描述】:

我在 Mac 上将 android Studio 3.5.3 更新为 4.0.1 时发现了一个不熟悉的文件 .idea/jarRepositories.xml。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RemoteRepositoriesConfiguration">
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Maven Central repository" />
      <option name="url" value="https://repo1.maven.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="jboss.community" />
      <option name="name" value="JBoss Community repository" />
      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="BintrayJCenter" />
      <option name="name" value="BintrayJCenter" />
      <option name="url" value="https://jcenter.bintray.com/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="Google" />
      <option name="name" value="Google" />
      <option name="url" value="https://dl.google.com/dl/android/maven2/" />
    </remote-repository>
  </component>
</project>

上面已经有question了,VonC answered可以加到.gitignore上。

我想知道是否应该将其添加到 .gitignore 并且不应该将其提交给 git。我如何决定将其添加到.gitignore

JetBrains.gitignore

github 的流行存储库 gitignore 具有 Android.gitignore,但在撰写此问题时它没有 .idea/jarRepositories.xml

另一方面,Global/JetBrains.gitignore 具有以下 cmets。

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr

如您所见,它有.idea/jarRepositories.xml 并且该行已被注释掉。它还有以下注释:

自动导入的 Gradle 和 Maven

当使用带有自动导入功能的 Gradle 或 Maven 时,您应该排除模块文件, 因为它们将被重新创建,并可能导致流失。如果使用取消注释 自动导入。

在 Android Studio 4.0.x 中,是否可以在不自动导入的情况下使用 Gradle?

远程 Jar 存储库

在上面的Global/JetBrains.gitignore中,# .idea/jarRepositories.xml这一行已经被davidkron的pull request添加了,他的commented如下:

自 IntelliJ 2019.3 以来,此文件自动出现在我们的 git 更改中。这些似乎只是有关在 Maven/Gradle 中定义的远程存储库的缓存信息。

进行此更改的原因:

在 Maven/Gradle 构建中,不应提交自动生成的文件。

支持这些规则更改的文档链接:

我没有找到有关此文件的文档或文章,但我的假设基于以下步骤:

在 IntelliJ 中,可以在“设置”菜单中管理“远程 Jar 存储库” 我删除了列表中的每个条目 -> 文件消失了 我再次重新导入了 Maven/Gradle 项目 文件再次出现,条目与之前相同

正如他的评论,Android Studio 4.0.1 具有Remote Jar Repositories 设置,如以下屏幕截图所示。

查了Android Studio的release notes4.0.0,发现a section如下:

IntelliJ IDEA 2019.3.3

核心 Android Studio IDE 已通过 IntelliJ IDEA 到 2019.3.3 版本的改进进行了更新。

要详细了解 2019.3.3 版累积包含的其他 IntelliJ 版本的改进,请参阅以下页面:

IntelliJ IDEA 2019.3 IntelliJ IDEA 2019.3.3

我不确定,但想知道是否应该在 .gitignore 中添加 .idea/jarRepositories.xml 并且不应该将其提交给 git。我如何决定是否添加它?如果有人能澄清标准,我真的很感激。

更新:

在Android Studio的源代码4.0.0找到源文件,定义了文件名jarRepositories.xml

JpsRemoteRepositoriesConfigurationSerializer.java

public JpsRemoteRepositoriesConfigurationSerializer() 
  super("jarRepositories.xml", "RemoteRepositoriesConfiguration");

RemoteRepositoriesConfiguration.java

@State(name = "RemoteRepositoriesConfiguration", storages = @Storage("jarRepositories.xml"))
public class RemoteRepositoriesConfiguration implements PersistentStateComponent<RemoteRepositoriesConfiguration.State> 
  // ...

我还在 JetBrain 的 IntelliJ IDEA 社区版的存储库中找到了它们的起源。

JpsRemoteRepositoriesConfigurationSerializer.java RemoteRepositoriesConfiguration.java

Jps代表JetBrains Project System,根据a document:

External Build过程中的项目模型由JPS(JetBrains Project System)提供。

JPS's previous repository 将自己描述为:

基于 Gant 的构建框架 + dsl,具有声明性项目结构定义和自动 IntelliJ IDEA 项目构建

【问题讨论】:

【参考方案1】:

文件.idea/jarRepositories.xml 应添加到.gitignore。它是自动生成的,只有关于 remote jar repositories 的冗余信息。

我们的 Android 项目在项目级别 build.gradle 中定义了这些存储库,例如:

allprojects 
    repositories 
        google()
        jcenter()
    

https://developer.android.com/studio/build#top-level https://developer.android.com/studio/build/dependencies.html#remote-repositories https://docs.gradle.org/current/userguide/dependency_management.html#declaring-repositories

第二个参考在其网页顶部写了以下介绍:

添加构建依赖项

Android Studio 中的 Gradle 构建系统可以轻松地将外部二进制文件或其他库模块作为依赖项包含到您的构建中。 ... 本页介绍如何在您的 Android 项目中使用依赖项, ... 但请记住,您的 Android 项目必须仅使用此页面上定义的依赖项配置。 [强调]

此外,Android Studio 4.0.1 中的 Add Library Dependencies 对话框有如下指令:

第 1 步。

使用下面的表格查找要添加的库。此表单使用项目构建文件中指定的存储库(Google、JCenter、Android 存储库、Google 存储库)

您可以通过以下步骤找到它:

    在Android Studio的菜单中选择File > Project Structure...。 在Project Structure对话框的左侧菜单中选择Dependencies。 在Modules列中选择app。 在Declared Dependencies列中选择+。 在弹出菜单中选择1 Library Dependency

【讨论】:

【参考方案2】:

我如何决定是否添加它?

决定是否应忽略文件的明确通用标准是:

你可以克隆存储库没有那个文件并且仍然有一个有效的项目(一个你可以编译和执行的)

例如,如果该文件是自动重新生成的,或者是使用自定义本地路径重新创建的(这对于不同 PC 上的不同开发人员来说没有意义),那么可以忽略该文件。

所以试试吧,特别是考虑到你可以“disable or enable Gradle / Maven auto-import for an IntelliJ IDEA project”。

【讨论】:

非常感谢您的澄清。你的一般标准是毋庸置疑的,我完全同意。话虽如此,this article 让我感到困惑。它说“这是您需要共享的内容:项目根目录中 .idea 目录下的所有文件,除了...”以及“您可以考虑不共享以下内容:...”。 @qtmfld 当您阅读本文时,您需要检查的是当其他人克隆您的存储库时会发生什么:它是否立即工作,或者在项目构建/运行之前需要进行更改?如果它立即生效,那么您分享的内容就足够了。

以上是关于我如何决定在 .gitignore 中添加 .idea/jarRepositories.xml的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 5 中使用 gitignore 文件

如何在 git 中使用 gitignore 命令

将目录添加到 .gitignore 后从远程存储库中删除目录

如何创建 .gitignore 文件

如何添加带有变量结尾(“扩展名”)的.gitignore文件,但开头是一样的

在 Rider IDE 中使用 .gitignore