2017-01-03 50 views
1

我刚刚尝试学习Git; git命令行应用程序(以下简称“Git”)以及NetBeans中的Git集成(以下简称为“NetBeans”)。据我所知,只有在NetBeans中执行的一些操作实际上在Git中显示。就好像NetBeans有自己独立的Staging区域(AKA:Index)和内置的.gitignore文件。NetBeans Git集成与git命令行之间的差异

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

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窗口底部打开的窗格不会显示任何“更改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状态只显示它们既不添加也不忽略?事实上,NetBeans是否保留了自己的内部忽略列表和暂存区域?如果是这样,为什么这不是记录?

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

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文件。

+0

您最初在NetBeans中看到的内容可能是一次性的。我不知道该插件,但它应该反映Git bash命令行工具向您展示的内容。 –

+0

@TimBiegeleisen - 没有。我已退出Netbeans并重新启动。一切都是一样的。现在,我怀疑如果我使用NetBeans进行提交,那么它可能会修改git临时区域以及创建.gitignore文件以匹配NetBeans在界面中显示的内容。但是,我想一次采取这一步。我的目标不是只能做一次提交。我希望能够确切地知道NetBeans在做什么,这样我就可以写出它来教导其他人并帮助他们避免这些缺陷。我会尝试这个实验并做进一步的评论。 – GrantRobertson

回答

1

Netbeans File sTatus Information参见:

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

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

所以:

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

表示:

  • StupidLoopPrinter.java是添加到索引中的新文件。
  • 的其他文件是新文件,没有添加到索引(即未经跟踪)

被忽略的文件,尝试在命令行一个:

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

你会看到,如果有可以解释该状态的.gitignorecore.excludesfile设置。

+0

我已阅读链接文档。但是,现在我看到两个状态之间用斜线分开。所以,[ -/A](在我没有手动添加的所有文件上)意思是“在阶段和提交之间没有区别”,斜杠左侧的短划线和“'添加到我的工作目录但未暂存” A在斜杠的右侧。我想后者还具有“和NetBeans计划将它放在下一个提交中的附加含义,即使您没有专门告知NetBeans这样做。“ – GrantRobertson

+0

@GrantRobertson”not staged“意味着它不会成为下一个git commit的一部分 – VonC

+0

虽然你对git命令的说法是正确的,但它似乎意味着与NetBeans不同的东西。 – GrantRobertson

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命令。