NetBeans Git集成和git命令行

时间:2017-01-03 04:53:17

标签: git netbeans

我现在正在努力学习Git; git命令行应用程序(以下简称" Git")以及NetBeans中的Git集成(以下简称" NetBeans")。据我所知,只有NetBeans中执行的一些操作实际上出现在Git中。就好像NetBeans有自己独立的Staging区域(AKA:Index)和内置的.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中的“文件”树时,我发现许多文件被标记为&#34;已添加&#34;和其他人被标记为&#34;被忽略&#34; (当我将鼠标悬停在树中的文件名上时,(即使项目文件夹中没有.gitignore文件)。

然而,当我右键单击我的项目节点然后选择Git / Show Changes(奇怪的是在Team菜单下不可用)时,在NetBeans窗口底部打开的窗格不会显示任何&#34 ; HEAD和Index之间的变化,&#34;基本上告诉我与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出现在&#34; HEAD和Index之间的变化。&#34;

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

最后:为什么NetBeans将文件显示为&#34;已添加&#34;或&#34;忽略&#34;当git status只显示它们既没有添加也没有被忽略?事实上,NetBeans是否保留了自己的内部忽略列表和暂存区域?如果是这样,为什么这个记录没有?

================= UPDATE ================ 我通过在NetBeans菜单中选择Team / Commit来运行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")

请注意,有几个文件显示为&#34;未跟踪&#34;以上未显示为&#34;未跟踪&#34;这里。但是,NetBeans没有创建.gitignore文件。

2 个答案:

答案 0 :(得分:1)

请参阅Netbeans File sTatus Information

  

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

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

所以:

  

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

这意味着:

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

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

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

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

答案 1 :(得分:0)

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