【问题标题】:Differences between NetBeans Git integration and git command lineNetBeans Git 集成和 git 命令行之间的区别
【发布时间】:2017-01-03 04:53:16
【问题描述】:

我现在正在尝试学习 Git; git 命令行应用程序(以下简称“Git”)以及 NetBeans 中的 Git 集成(以下简称“NetBeans”)。据我所知,只有在 NetBeans 中执行的一些操作实际上会显示在 Git 中。就好像 NetBeans 有自己独立的暂存区(又名:索引)和内置的 .gitignore 文件。

例如:当我第一次在我的项目文件夹中初始化存储库时,命令行中的 git status 会给我:

D:\Dev\Learning\Experiments\StupidLoopPrinter>git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        build.xml
        build/
        manifest.mf
        nbproject/
        src/

nothing added to commit but untracked files present (use "git add" to track)

但是,当我在 NetBeans 中打开查看/显示版本控制标签,然后查看 NetBeans 中的文件树时,我看到许多文件被标记为“已添加”,而其他文件被标记为“已忽略”(即使当我将鼠标悬停在树中的文件名上时,项目文件夹中没有 .gitignore 文件。

然而,当我右键单击我的项目节点然后选择 Git / Show Changes(奇怪的是在 Team 菜单下不可用)时,在 NetBeans 窗口底部打开的窗格没有显示任何“Changes between HEAD 和 Index,”本质上告诉我与 git status 命令相同的内容。

所以,我在 NetBeans 中右键单击了我的一个 .java 文件并选择了 Git/Add。现在我的 git 状态显示:

D:\Dev\Learning\Experiments\StupidLoopPrinter>git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   src/StupidLoopPrinter.java

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        build.xml
        build/
        manifest.mf
        nbproject/

... StupidLoopPrinter.java 出现在“HEAD 和索引之间的变化”中。

仔细检查 NetBeans 文件树中所有文件右侧的标记后,我发现 StupidLoopPrinter.java 文件旁边有一个 [A/-],而所有其他文件都有一个 [- /A] 在他们旁边。这种差异有什么意义? (你可以想象,这在谷歌上是不可能的。)

最后:为什么 NetBeans 将文件显示为“已添加”或“已忽略”,而 git status 仅将文件显示为既未添加也未忽略?实际上,NetBeans 是否保留自己的内部忽略列表和暂存区?如果是这样,为什么没有记录在案?

================= 更新================ 我通过在 NetBeans 菜单中选择 Team/Commit 运行了提交。正如预测的那样,就 git 命令而言,这确实改变了阶段。 git status 给我:

D:\Dev\Learning\Experiments\StupidLoopPrinter>git status
On branch Alice
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/StupidLoopPrinter.java

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        build/
        nbproject/private/

no changes added to commit (use "git add" and/or "git commit -a")

请注意,上面显示为“未跟踪”的几个文件在此处未显示为“未跟踪”。但是,NetBeans 没有创建 .gitignore 文件。

【问题讨论】:

  • 您最初在 NetBeans 中看到的可能是一次性的。我不知道插件,但它应该反映 Git bash 命令行工具向您显示的内容。
  • @TimBiegeleisen - 不。我已退出 Netbeans 并重新启动。一切都还是一样。现在,我怀疑如果我使用 NetBeans 进行提交,那么它可能会修改 git 暂存区域并创建一个 .gitignore 文件以匹配 NetBeans 在界面中显示的内容。但是,我想一次迈出这一步。我的目标不仅仅是能够进行提交。我希望能够确切地知道 NetBeans 正在做什么,以便我可以写下它来教其他人并帮助他们避免这些陷阱。我会尝试那个实验并做更多的 cmets。

标签: git netbeans


【解决方案1】:

Netbeans File sTatus Information:

IDE 显示文件的两个状态值:

  • 描述文件索引状态和当前 HEAD 提交之间差异的状态。
  • 描述文件工作树和索引状态之间差异的状态,

所以:

StupidLoopPrinter.java 文件旁边有一个[A/-],而所有其他文件都有一个[-/A]

这意味着:

  • StupidLoopPrinter.java 是一个新文件,已添加到索引中。
  • 其他文件是新文件,尚未添加到索引中(即未跟踪)

对于被忽略的文件,在命令行中尝试:

git check-ignore -v -- an-ignored-file

您将看到是否有 .gitignorecore.excludesfile 设置可以解释该状态。

【讨论】:

  • 我已阅读链接到的文档。但是,现在我看到这两种状态用斜线隔开。因此,[-/A](在我没有手动添加的所有文件上)表示“暂存和提交之间没有区别”,斜线左侧有破折号,并且“‘已添加’到我的工作目录但未暂存”与斜线右侧的 A。我猜后者还具有“即使您没有明确告诉 NetBeans 这样做,NetBeans 也计划将其放入下一次提交”的附加含义。
  • @GrantRobertson "not staged" 意味着它不会成为下一个 git 提交的一部分。
  • 虽然您所说的对于 git 命令是正确的,但它似乎与 NetBeans 的含义有所不同。请参阅下面的第二个答案。
【解决方案2】:

作为次要答案,我想补充一点,NetBeans 似乎实际上并没有自己的阶段。相反,它只是标记某些文件以包含在下一次提交中。这个“标记”只有 NetBeans 知道。因此,一旦为 Git 初始化了 NetBeans 项目文件夹(使用 git 命令或 NetBeans 接口),那么第一次提交的结果取决于您使用的是 git 命令还是 NetBeans 接口。如果你使用 git 命令并且仅仅输入

git init
git commit

...你的提交将一无所获。

但是,如果您使用 NetBeans 进行提交,那么它会自动获取所有标有 [-/A] 的文件并为您将它们添加到阶段,然后进行提交。所有这些文件都将被视为“已跟踪”,如果您的工作文件发生更改,git 命令会通知您。 NetBeans 也将忽略它标记为 [I] 的所有文件,但此信息不会通过 .gitignore 文件传送到 git 命令。相反,NetBeans 仅仅依赖于这样一个事实,即这些文件未被跟踪,以防止它们在未来使用 git 命令进行提交。我希望 NetBeans Git 插件的作者假设我们将始终使用 NetBeans 接口而从不使用 git 命令。

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 2016-04-08
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多