我现在正在努力学习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文件。
答案 0 :(得分:1)
请参阅Netbeans File sTatus Information:
IDE显示文件的两个状态值:
- 描述文件索引状态和当前HEAD提交之间差异的状态。
- 描述文件工作树和索引状态之间差异的状态,
所以:
StupidLoopPrinter.java
文件旁边有[A/-]
,而所有其他文件都有[-/A]
这意味着:
StupidLoopPrinter.java
是一个新文件,已添加到索引中。对于忽略的文件,请尝试命令行a:
git check-ignore -v -- an-ignored-file
您会看到是否有.gitignore
或core.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命令。