NetBeans Git 集成和 git 命令行之间的差异



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

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

D:DevLearningExperimentsStupidLoopPrinter>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/显示更改(奇怪的是,在"团队"菜单下不可用)时,在 NetBeans 窗口底部打开的窗格没有显示任何"HEAD 和索引之间的更改",本质上告诉我与 git status 命令相同的内容。

因此,我右键单击了 NetBeans 中的 One .java 文件,然后选择了 Git/Add。现在我的 git 状态显示:

D:DevLearningExperimentsStupidLoopPrinter>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 状态仅显示文件既未添加也不忽略?事实上,NetBeans 是否保留自己的内部忽略列表和暂存区域?如果是这样,为什么没有记录在案?

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

D:DevLearningExperimentsStupidLoopPrinter>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 File sTatus 信息:

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

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

所以:

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

这意味着:

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

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

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

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

作为次要答案,我想补充一点,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 命令。

相关内容

最新更新