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

15
我在将Android Studio从3.5.3升级到4.0.1时,在Mac上发现了一个陌生的文件.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>

这个问题已经有了一个问题VonC回答说可以将其添加到.gitignore中。

我在想是否应该将它添加到.gitignore中,并且不应该将其提交到git中。如何决定将其添加到.gitignore中?

JetBrains.gitignore

在撰写本问题时,GitHub的流行仓库gitignore中有Android.gitignore,但没有.idea/jarRepositories.xml

另一方面,Global/JetBrains.gitignore有以下注释。

# 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中,davidkron的pull request添加了一行# .idea/jarRepositories.xml,并且他commented如下:
自从IntelliJ 2019.3以来,这个文件自动出现在我们的git更改中。它似乎只是关于在Maven/Gradle中定义的远程仓库的缓存信息。
做出此更改的原因:
在Maven/Gradle构建中,不应提交自动生成的文件。
支持这些规则更改的文档链接:
我没有找到关于这个文件的文档或文章,但我基于以下步骤做出了我的假设:
在IntelliJ中,“远程Jar仓库”可以在设置菜单中管理
我删除了列表中的所有条目->文件消失了
我重新导入了Maven/Gradle项目
文件再次出现,并且与之前相同的条目存在
正如他的评论,Android Studio 4.0.1具有“远程Jar仓库”设置,如下面的屏幕截图所示。

enter image description here

我查看了Android Studio 4.0.0的发布说明,找到了以下部分

IntelliJ IDEA 2019.3.3

核心的Android Studio IDE已经通过2019.3.3版本得到了来自IntelliJ IDEA的改进。

要了解包含在版本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社区版存储库中找到了它们的起源。

Jps代表JetBrains项目系统,根据一份文件:

外部构建过程中的项目模型由JPS(JetBrains项目系统)提供。

JPS的以前的存储库描述自己为:

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

2个回答

12

应将.idea/jarRepositories.xml文件添加到.gitignore中。该文件是自动生成的,仅包含与远程jar存储库有关的冗余信息。

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

allprojects {
    repositories {
        google()
        jcenter()
    }
}

The second reference explains how to include external libraries into your Android project using Gradle build system in Android Studio. It is important to use the dependency configurations defined on this page for your Android project. The Add Library Dependencies dialog in Android Studio 4.0.1 also allows you to add libraries by using the repositories specified in the project's build files. To access it, select File > Project Structure... in the menu of Android Studio, then select Dependencies in the left-side menu of Project Structure dialog, select app in the Modules column, select + in the Declared Dependencies column, and finally select 1 Library Dependency in the popup menu.


6

我该如何决定是否添加它?

决定是否忽略一个文件的一般标准是:

你是否可以克隆仓库而无需该文件,仍然拥有有效的项目(可以编译和执行)

例如,如果该文件是自动生成的或者重新创建了自定义本地路径(对于另一个PC上的不同开发者没有意义),那么该文件应该被忽略。

所以试一下,特别考虑你可以在 IntelliJ IDEA 项目中"禁用或启用 Gradle/Maven 自动导入"。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接